Add unlabelled event detection, stub parser quality, Sync All, and modern UI redesign

Key changes:
- Unlabelled event banner: shows count only after Sample Events is clicked; uses broad SDL filter expression; time window synced to sync-days dropdown
- Parser Quality: new "Attributes Missing" subsection listing all parsers without dataSource.name regardless of event volume
- Coverage map: filter buttons (All / Complete Parser / Attributes Missing); stat card renamed to "Incomplete Parser"; stub count excluded from sync when no active sources
- Sync All button: runs SDL parser sync → library sync → live sources sync in sequence
- Reset now clears ActiveSource table and resets unlabelled count cache
- run_powerquery: configurable max_count param (default 1000, 50M for count queries)
- _DS_NAME_RE: supports both quoted and unquoted dataSource.name keys in parser files
- Full modern UI redesign: slate palette, gradient cards, ring borders, pill nav, colored stat accents
- Updated 7 tracked parser files synced from SDL

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Mick
2026-05-22 10:00:21 -04:00
parent 0013adbe7e
commit c5a4f796a0
15 changed files with 3498 additions and 469 deletions
+158 -19
View File
@@ -2,14 +2,27 @@
"attributes": {
"dataSource.vendor": "Cisco",
"dataSource.name": "Cisco Duo Security",
"dataSource.category": "security"
"dataSource.category": "security",
"metadata.product.vendor_name": "Cisco",
"metadata.product.name": "Cisco Duo Security",
"metadata.version": "1.0.0"
},
"formats": [
{
"format": "$unmapped.{parse=json}$",
"rewrites": [
{ "input": "unmapped.timestamp", "output": "timestamp", "match": ".*", "replace": "$0" },
{ "input": "unmapped.time", "output": "time", "match": ".*", "replace": "$0" }
{
"input": "unmapped.timestamp",
"output": "timestamp",
"match": ".*",
"replace": "$0"
},
{
"input": "unmapped.time",
"output": "time",
"match": ".*",
"replace": "$0"
}
]
}
],
@@ -19,24 +32,150 @@
{
"predicate": "unmapped.class_uid = '3002'",
"transformations": [
{ "copy": { "from": "unmapped.activity_id", "to": "activity_id" } },
{ "copy": { "from": "unmapped.activity_name", "to": "activity_name" } },
{ "copy": { "from": "unmapped.type_uid", "to": "type_uid" } },
{ "copy": { "from": "unmapped.severity_id", "to": "severity_id" } },
{ "copy": { "from": "unmapped.status_id", "to": "status_id" } },
{ "copy": { "from": "unmapped.status", "to": "status" } },
{ "copy": { "from": "unmapped.message", "to": "message" } },
{ "copy": { "from": "unmapped.user.name", "to": "user.name" } },
{ "copy": { "from": "unmapped.user.account_uid", "to": "user.account_uid" } },
{ "copy": { "from": "unmapped.user.account_type", "to": "user.account_type" } },
{ "copy": { "from": "unmapped.src_endpoint.ip", "to": "src_endpoint.ip" } },
{ "copy": { "from": "unmapped.src_endpoint.location.desc", "to": "src_endpoint.location.desc" } },
{ "copy": { "from": "unmapped.src_endpoint.location.city", "to": "src_endpoint.location.city" } },
{ "copy": { "from": "unmapped.src_endpoint.location.country", "to": "src_endpoint.location.country" } },
{ "copy": { "from": "unmapped.auth_protocol", "to": "auth_protocol" } },
{ "copy": { "from": "unmapped.mfa_factors", "to": "mfa_factors" } }
{
"constant": {
"value": 3002,
"field": "class_uid"
}
},
{
"constant": {
"value": "Authentication",
"field": "class_name"
}
},
{
"constant": {
"value": 3,
"field": "category_uid"
}
},
{
"constant": {
"value": "Identity & Access Management",
"field": "category_name"
}
},
{
"copy": {
"from": "unmapped.activity_id",
"to": "activity_id"
}
},
{
"copy": {
"from": "unmapped.activity_name",
"to": "activity_name"
}
},
{
"copy": {
"from": "unmapped.type_uid",
"to": "type_uid"
}
},
{
"copy": {
"from": "unmapped.severity_id",
"to": "severity_id"
}
},
{
"copy": {
"from": "unmapped.status_id",
"to": "status_id"
}
},
{
"copy": {
"from": "unmapped.status",
"to": "status"
}
},
{
"copy": {
"from": "unmapped.message",
"to": "message"
}
},
{
"copy": {
"from": "unmapped.user.name",
"to": "user.name"
}
},
{
"copy": {
"from": "unmapped.user.account_uid",
"to": "user.account_uid"
}
},
{
"copy": {
"from": "unmapped.user.account_type",
"to": "user.account_type"
}
},
{
"copy": {
"from": "unmapped.src_endpoint.ip",
"to": "src_endpoint.ip"
}
},
{
"copy": {
"from": "unmapped.src_endpoint.location.desc",
"to": "src_endpoint.location.desc"
}
},
{
"copy": {
"from": "unmapped.src_endpoint.location.city",
"to": "src_endpoint.location.city"
}
},
{
"copy": {
"from": "unmapped.src_endpoint.location.country",
"to": "src_endpoint.location.country"
}
},
{
"copy": {
"from": "unmapped.auth_protocol",
"to": "auth_protocol"
}
},
{
"copy": {
"from": "unmapped.auth_protocol_id",
"to": "auth_protocol_id"
}
},
{
"copy": {
"from": "unmapped.mfa_factors",
"to": "mfa_factors"
}
}
]
}
]
},
"observables": {
"fields": [
{
"name": "user.name",
"type": "User"
},
{
"name": "src_endpoint.ip",
"type": "IP Address"
},
{
"name": "auth_protocol",
"type": "Other"
}
]
}
}