Files
parsedmarc/dashboards
Sean Whalen 265bf64240 Align Grafana dashboard with OpenSearch Dashboards source-of-truth (#738)
* Align Grafana dashboard with OpenSearch Dashboards source-of-truth

Adds the two aggregate-DMARC panels that exist on the OSD dashboard but
were missing from the bundled Grafana dashboard:

- "Message sources by name and type" — buckets by source_name + source_type,
  sums message_count per (name, type) tuple. Mirrors the OSD viz from 9.4.x.
- "Message sources by Autonomous System" — buckets by source_asn +
  source_as_name + source_as_domain, sums message_count per ASN. Mirrors
  the OSD viz added in 9.9.0 with the IPinfo Lite ASN integration.

Both panels are patterned on the existing "Reporting Organisations" panel
(same datasource $datasourceag, same sum(message_count) metric, same
gradient-gauge "Messages" column with rename transforms). They sit at
the bottom of the existing layout (gridPos y=129 and y=140) so the
existing panel positions are unchanged.

Verified against the bundled grafana/grafana:12.3.0: dashboard import
returns status=success, both panels render with real data from the
sample-corpus indexes, and the ES aggregations (terms on source_name
+ source_type, numeric terms on source_asn) return the expected results.

Out of scope:
- Extras in the Grafana dashboard that aren't on OSD (SPF/DKIM Results
  Over Time, Alignment Over Time, Stat overview, Published Policies,
  Forensic IP / country tables) are left in place. They were
  community-contributed and likely valued by some users.
- Migrating the deprecated `graph` and `grafana-worldmap-panel` panel
  types to modern timeseries / geomap is a separate, larger task.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Grafana: migrate deprecated graph and worldmap panels

Replaces the 6 legacy `graph` panels with `timeseries` panels and the
2 legacy `grafana-worldmap-panel` panels with `geomap` panels. Both
deprecated plugins still rendered in Grafana 12 via auto-migration but
were flagged for removal; this ships the modern saved shape.

graph -> timeseries (6 panels):
  SPF Results Over Time, DKIM Results Over Time, SPF Alignment Over Time,
  DKIM Alignment Over Time, DMARC Passage Over Time, Message Disposition
  Over Time. Panel `aliasColors` (e.g. {true: dark-green, false: dark-red})
  are translated into per-series `fieldConfig.overrides` so the green/red
  by-pass-fail colorings carry forward; legacy graph fields (lines, fill,
  yaxes, tooltip etc.) are dropped in favor of the new
  `fieldConfig.defaults.custom` block and `options.legend` / `options.tooltip`.

worldmap -> geomap (2 panels):
  Map of Message Source Countries (aggregate), Forensic Sample Sources
  by Country (forensic). The legacy `locationData=countries` lookup-by-ISO
  becomes a geomap markers layer with `location.mode=lookup`,
  `gazetteer=public/gazetteer/countries.json`, and `lookup=source_country.keyword`
  — same input data, modern renderer. Drops the date_histogram bucket
  from the geomap targets since the map is a snapshot over the panel
  time range, not a time series.

Verified against the bundled grafana/grafana:12.3.0: dashboard imports
with status=success and `version=19`, live panel types now report
`{timeseries: 6, geomap: 2, table: 14, grafana-piechart-panel: 3,
stat: 1, row: 3}` — no more `graph` or `grafana-worldmap-panel` entries.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Sean Whalen <seanthegeek@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 01:32:29 -04:00
..