mirror of
https://github.com/marcredhat/SIEM-toolkit-patched
synced 2026-06-08 12:33:51 +00:00
Add Default Parser Only and No Parser filters to Coverage Map
Filters are now: All | Custom Parser | Default Parser Only | No Parser - Custom Parser: covered sources with a loaded SDL parser file - Default Parser Only: covered via event.type detection in data lake but no custom parser file — built-in or cloud-managed parser running - No Parser: parser_needed sources (no parser found at all) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+15
-5
@@ -243,9 +243,13 @@ async function cvLoad() {
|
|||||||
|
|
||||||
const filtersEl = document.getElementById('cv-filters')
|
const filtersEl = document.getElementById('cv-filters')
|
||||||
filtersEl.classList.remove('hidden')
|
filtersEl.classList.remove('hidden')
|
||||||
filtersEl.innerHTML = [['all','All'],['covered','Covered'],['parser_needed','Parser Needed']]
|
filtersEl.innerHTML = [
|
||||||
.map(([f,l]) => `<button onclick="cvSetFilter('${f}')" id="cvf-${f}"
|
['all', 'All'],
|
||||||
class="px-3 py-1 text-xs rounded-full border border-gray-700 text-gray-400 hover:border-gray-500">${l}</button>`).join('')
|
['covered', 'Custom Parser'],
|
||||||
|
['default_only', 'Default Parser Only'],
|
||||||
|
['parser_needed', 'No Parser'],
|
||||||
|
].map(([f,l]) => `<button onclick="cvSetFilter('${f}')" id="cvf-${f}"
|
||||||
|
class="px-3 py-1 text-xs rounded-full border border-gray-700 text-gray-400 hover:border-gray-500">${l}</button>`).join('')
|
||||||
|
|
||||||
if (cvData.synced_at) {
|
if (cvData.synced_at) {
|
||||||
filtersEl.innerHTML += `<span class="text-xs text-gray-600 self-center ml-2">Synced ${new Date(cvData.synced_at).toLocaleTimeString()}</span>`
|
filtersEl.innerHTML += `<span class="text-xs text-gray-600 self-center ml-2">Synced ${new Date(cvData.synced_at).toLocaleTimeString()}</span>`
|
||||||
@@ -261,14 +265,20 @@ function cvSetFilter(f) {
|
|||||||
cvFilter = f
|
cvFilter = f
|
||||||
document.querySelectorAll('[id^="cvf-"]').forEach(b => {
|
document.querySelectorAll('[id^="cvf-"]').forEach(b => {
|
||||||
const on = b.id === `cvf-${f}`
|
const on = b.id === `cvf-${f}`
|
||||||
b.className = `px-3 py-1 text-xs rounded-full border transition-colors ${on ? 'bg-purple-700 border-purple-600 text-white' : 'border-gray-700 text-gray-400 hover:border-gray-500'}`
|
b.className = `px-3 py-1 text-xs rounded-full border transition-colors ${on ? 'bg-purple-700 border-purple-600 text-white' : 'border-gray-700 text-gray-400 hover:border-gray-500 cursor-pointer'}`
|
||||||
})
|
})
|
||||||
if (!cvData?.sources) return
|
if (!cvData?.sources) return
|
||||||
|
|
||||||
const LABELS = { covered: 'Covered', parser_needed: 'Parser Needed' }
|
const LABELS = { covered: 'Covered', parser_needed: 'Parser Needed' }
|
||||||
const STYLES = { covered: 'bg-emerald-900/50 text-emerald-300 border-emerald-700', parser_needed: 'bg-red-900/50 text-red-300 border-red-700' }
|
const STYLES = { covered: 'bg-emerald-900/50 text-emerald-300 border-emerald-700', parser_needed: 'bg-red-900/50 text-red-300 border-red-700' }
|
||||||
|
|
||||||
const sources = cvData.sources.filter(s => f === 'all' || s.status === f)
|
const sources = cvData.sources.filter(s => {
|
||||||
|
if (f === 'all') return true
|
||||||
|
if (f === 'parser_needed') return s.status === 'parser_needed'
|
||||||
|
if (f === 'default_only') return s.status === 'covered' && s.parser === 'detected in data'
|
||||||
|
if (f === 'covered') return s.status === 'covered' && s.parser !== 'detected in data'
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
function parserCell(s) {
|
function parserCell(s) {
|
||||||
if (s.status === 'covered') {
|
if (s.status === 'covered') {
|
||||||
|
|||||||
Reference in New Issue
Block a user