module-eval: pin the severity mapping's direction and the panel
The direction is the part a reviewer cannot check by looking, so it is asserted at both ends of the table and in both tiers' groups: an inverted mapping still maps every value to something, and a case that only asks whether a severity parser exists passes on the exact defect. The reader that turns a rendered operator list back into a PRIORITY -> name function lives in lib.nix, since both tiers need it. The panel is asserted on its query rather than its title, because a panel that keeps the title and loses the expression renders an empty graph that looks exactly like zero prioless lines.
This commit is contained in:
parent
83a604ae23
commit
7fa13b592f
4 changed files with 121 additions and 0 deletions
|
|
@ -217,6 +217,32 @@ let
|
|||
grafanaRemoteAuthelia.services.hyperhive.swarm.statusPublish.tokenEndpoint
|
||||
== "https://auth.example.invalid/api/oidc/token";
|
||||
}
|
||||
{
|
||||
# The standing check on the collector's PRIORITY mapping — whether a line
|
||||
# ever reaches the log store carrying no severity. It is shipped config
|
||||
# rather than something an operator imports by hand, which also means it
|
||||
# can be deleted by hand. Read out of the dashboard the provisioner
|
||||
# actually ships (`dashboardDir` in ../host-modules/swarm-grafana.nix
|
||||
# names this file), and asserted on the QUERY rather than the title,
|
||||
# because a panel that keeps its title and loses its expression renders
|
||||
# an empty graph that looks exactly like zero prioless lines.
|
||||
name = "the logs dashboard still counts lines that arrive with no severity";
|
||||
ok =
|
||||
let
|
||||
board = builtins.fromJSON (
|
||||
builtins.readFile ../host-modules/swarm-grafana/dashboards/logstore.json
|
||||
);
|
||||
exprs = lib.concatMap (p: map (t: t.expr or "") (p.targets or [ ])) board.panels;
|
||||
counts = lib.filter (e: lib.hasInfix "severity_text" e && lib.hasInfix "stats count()" e) exprs;
|
||||
in
|
||||
# Both arms of the split: lines that HAD a priority and arrived without
|
||||
# a severity anyway (the regression line, which must reach zero), and
|
||||
# lines that never had one to map — Claude Code's own OTLP telemetry,
|
||||
# which no mapping can reach. Folded into one number the second would
|
||||
# keep the panel off zero forever and hide the first.
|
||||
lib.any (e: lib.hasInfix "PRIORITY:*" e) counts
|
||||
&& lib.any (e: lib.hasInfix "PRIORITY:\"\"" e) counts;
|
||||
}
|
||||
];
|
||||
in
|
||||
runGroup "grafana" cases
|
||||
|
|
|
|||
Loading…
Reference in a new issue