monitoring(testing): clarify run and compliance history
This commit is contained in:
parent
944a778c0a
commit
792ac2b946
@ -3426,15 +3426,25 @@ def build_jobs_dashboard():
|
||||
f'/ clamp_min(sum by (suite) (max by (suite, check) (({{{checks_selector}}} > bool 0))), 1)) '
|
||||
f'or on(suite) ({selected_suite_zero})'
|
||||
)
|
||||
success_history_runs = f'sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[$__interval]))'
|
||||
success_history_runs = f'sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[7d]))'
|
||||
success_history_by_suite = (
|
||||
f'(100 * sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_success_selector}}}[$__interval])) '
|
||||
f'(100 * sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_success_selector}}}[7d])) '
|
||||
f'/ ({success_history_runs})) and on(suite) (({success_history_runs}) > 0)'
|
||||
)
|
||||
daily_success_volume = (
|
||||
f'sum(increase(platform_quality_gate_runs_total{{{runs_success_selector}}}[24h])) or on() vector(0)'
|
||||
)
|
||||
daily_failure_volume = (
|
||||
f'sum(increase(platform_quality_gate_runs_total{{{runs_failure_selector}}}[24h])) or on() vector(0)'
|
||||
)
|
||||
coverage_by_suite = (
|
||||
f'(max by (suite) ({{{coverage_metric_selector}}})) '
|
||||
f'or on(suite) (max by (suite) (platform_quality_gate_workspace_line_coverage_percent{{{workspace_coverage_selector}}}))'
|
||||
)
|
||||
coverage_history_by_suite = (
|
||||
f'(max by (suite) (platform_quality_gate_workspace_line_coverage_percent{{{workspace_coverage_selector}}})) '
|
||||
f'or on(suite) (max by (suite) ({{{coverage_metric_selector}}}))'
|
||||
)
|
||||
coverage_with_missing = (
|
||||
f"({coverage_by_suite}) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[30d])))) - 1)"
|
||||
)
|
||||
@ -3452,25 +3462,9 @@ def build_jobs_dashboard():
|
||||
f"or on(suite) (100 * (1 - clamp_max(({smell_by_suite}), 1))) "
|
||||
f"or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[30d])))) - 1)"
|
||||
)
|
||||
loc_files_history = (
|
||||
f"max by (suite) (max_over_time(platform_quality_gate_source_files_total{{{smell_selector}}}[$__interval]))"
|
||||
)
|
||||
loc_violations_history = (
|
||||
f"max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{{{smell_selector}}}[$__interval]))"
|
||||
)
|
||||
loc_limit_compliance_history = (
|
||||
f"(100 * clamp_min(({loc_files_history}) - ({loc_violations_history}), 0) / ({loc_files_history})) "
|
||||
f"and on(suite) (({loc_files_history}) > 0) "
|
||||
f"or on(suite) (100 * (1 - clamp_max(({loc_violations_history}), 1))) "
|
||||
f"or on(suite) ({selected_suite_zero})"
|
||||
)
|
||||
coverage_loc_compliance_history = (
|
||||
"min by (suite) ("
|
||||
f'label_replace(max_over_time(platform_quality_gate_workspace_line_coverage_percent{{{workspace_coverage_selector}}}[$__interval]), '
|
||||
'"dimension", "coverage", "__name__", ".*") '
|
||||
"or "
|
||||
f'label_replace(({loc_limit_compliance_history}), "dimension", "loc", "__name__", ".*")'
|
||||
")"
|
||||
f"({loc_limit_compliance_by_suite}) "
|
||||
f"or on(suite) (100 * (1 - clamp_max(({smell_by_suite}), 1)))"
|
||||
)
|
||||
average_coverage = f"(avg(({coverage_by_suite})) or on() vector(0))"
|
||||
suites_loc_violating = f'(sum((({smell_by_suite}) > bool 0)) or on() vector(0))'
|
||||
@ -3626,6 +3620,47 @@ def build_jobs_dashboard():
|
||||
],
|
||||
}
|
||||
|
||||
def _state_timeline_panel(
|
||||
panel_id: int,
|
||||
title: str,
|
||||
expr: str,
|
||||
grid: dict,
|
||||
*,
|
||||
description: str,
|
||||
thresholds: dict,
|
||||
) -> dict:
|
||||
panel = {
|
||||
"id": panel_id,
|
||||
"type": "state-timeline",
|
||||
"title": title,
|
||||
"description": description,
|
||||
"datasource": PROM_DS,
|
||||
"gridPos": grid,
|
||||
"targets": [{"expr": expr, "refId": "A", "legendFormat": "{{suite}}"}],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {"mode": "thresholds"},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": thresholds,
|
||||
"custom": {
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": True,
|
||||
},
|
||||
},
|
||||
"overrides": [],
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": True,
|
||||
"showValue": "never",
|
||||
"legend": {"displayMode": "list", "placement": "bottom"},
|
||||
"tooltip": {"mode": "single", "sort": "none"},
|
||||
},
|
||||
}
|
||||
return panel
|
||||
|
||||
panels.append(
|
||||
stat_panel(
|
||||
2,
|
||||
@ -3737,81 +3772,73 @@ def build_jobs_dashboard():
|
||||
{"type": "value", "options": {"-1": {"text": "no runs"}}}
|
||||
]
|
||||
panels.append(reliability_suite_panel)
|
||||
history_panel = timeseries_panel(
|
||||
history_panel = _state_timeline_panel(
|
||||
11,
|
||||
"Run Reliability History by Suite",
|
||||
"Run Reliability by Suite (7d rolling)",
|
||||
success_history_by_suite,
|
||||
{"h": 8, "w": 24, "x": 0, "y": 13},
|
||||
unit="percent",
|
||||
legend="{{suite}}",
|
||||
legend_display="list",
|
||||
legend_placement="bottom",
|
||||
thresholds=success_thresholds,
|
||||
description=(
|
||||
"Seven-day rolling run success rate per suite. Each suite gets its own lane, "
|
||||
"so brief failed/debug runs lower the lane color without creating unreadable 0/100 spikes."
|
||||
),
|
||||
)
|
||||
history_panel["fieldConfig"]["defaults"]["min"] = 0
|
||||
history_panel["fieldConfig"]["defaults"]["max"] = 100
|
||||
history_panel["fieldConfig"]["defaults"]["custom"] = {
|
||||
"drawStyle": "line",
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 8,
|
||||
"showPoints": "always",
|
||||
"pointSize": 3,
|
||||
"spanNulls": True,
|
||||
}
|
||||
panels.append(history_panel)
|
||||
|
||||
panels.append(
|
||||
timeseries_panel(
|
||||
12,
|
||||
"Run Outcomes (Selected Scope)",
|
||||
None,
|
||||
{"h": 8, "w": 8, "x": 0, "y": 21},
|
||||
unit="none",
|
||||
targets=[
|
||||
{
|
||||
"refId": "A",
|
||||
"expr": f'sum(increase(platform_quality_gate_runs_total{{{runs_success_selector}}}[$__interval])) or on() vector(0)',
|
||||
"legendFormat": "Success",
|
||||
},
|
||||
{
|
||||
"refId": "B",
|
||||
"expr": f'sum(increase(platform_quality_gate_runs_total{{{runs_failure_selector}}}[$__interval])) or on() vector(0)',
|
||||
"legendFormat": "Failure",
|
||||
},
|
||||
],
|
||||
legend_display="list",
|
||||
legend_placement="bottom",
|
||||
legend_calcs=[],
|
||||
)
|
||||
run_volume_panel = timeseries_panel(
|
||||
12,
|
||||
"Daily Run Volume (Selected Scope)",
|
||||
None,
|
||||
{"h": 8, "w": 8, "x": 0, "y": 21},
|
||||
unit="none",
|
||||
targets=[
|
||||
{"refId": "A", "expr": daily_success_volume, "legendFormat": "Success"},
|
||||
{"refId": "B", "expr": daily_failure_volume, "legendFormat": "Failure"},
|
||||
],
|
||||
legend_display="list",
|
||||
legend_placement="bottom",
|
||||
legend_calcs=[],
|
||||
)
|
||||
run_volume_panel["description"] = (
|
||||
"Twenty-four-hour rolling run counts for the selected suite/branch scope. "
|
||||
"This is volume, not a pass-rate percentage."
|
||||
)
|
||||
run_volume_panel["fieldConfig"]["defaults"]["min"] = 0
|
||||
run_volume_panel["fieldConfig"]["defaults"]["custom"] = {
|
||||
"drawStyle": "bars",
|
||||
"barAlignment": 0,
|
||||
"lineWidth": 0,
|
||||
"fillOpacity": 70,
|
||||
"stacking": {"mode": "normal", "group": "A"},
|
||||
}
|
||||
panels.append(run_volume_panel)
|
||||
|
||||
panels.append(
|
||||
timeseries_panel(
|
||||
_state_timeline_panel(
|
||||
13,
|
||||
"Coverage & LOC Compliance History",
|
||||
None,
|
||||
"Coverage History by Suite",
|
||||
coverage_history_by_suite,
|
||||
{"h": 8, "w": 8, "x": 8, "y": 21},
|
||||
unit="percent",
|
||||
targets=[
|
||||
{
|
||||
"refId": "A",
|
||||
"expr": coverage_loc_compliance_history,
|
||||
"legendFormat": "{{suite}}",
|
||||
},
|
||||
],
|
||||
legend_display="list",
|
||||
legend_placement="bottom",
|
||||
legend_calcs=[],
|
||||
thresholds=coverage_thresholds,
|
||||
description=(
|
||||
"Latest reported line coverage per suite over time. Coverage is separate "
|
||||
"from LOC compliance so one signal cannot hide the other."
|
||||
),
|
||||
)
|
||||
)
|
||||
run_mix_panel = pie_panel(
|
||||
14,
|
||||
"Run Status Mix (30d)",
|
||||
f'sum by (status) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[30d]))',
|
||||
{"h": 8, "w": 8, "x": 16, "y": 21},
|
||||
panels.append(
|
||||
_state_timeline_panel(
|
||||
14,
|
||||
"Files <=500 LOC History by Suite",
|
||||
loc_limit_compliance_history,
|
||||
{"h": 8, "w": 8, "x": 16, "y": 21},
|
||||
thresholds=success_thresholds,
|
||||
description=(
|
||||
"Percent of LOC-gated source files at or under the 500-line limit. "
|
||||
"This uses the existing file-count telemetry; longest-file history needs a new publisher metric."
|
||||
),
|
||||
)
|
||||
)
|
||||
run_mix_panel["targets"][0]["legendFormat"] = "{{status}}"
|
||||
run_mix_panel["fieldConfig"]["defaults"]["unit"] = "none"
|
||||
panels.append(run_mix_panel)
|
||||
|
||||
check_dimensions = [
|
||||
("Tests", check_regex_tests),
|
||||
|
||||
@ -97,7 +97,13 @@ def test_jobs_dashboard_separates_current_gate_health_from_reliability():
|
||||
|
||||
assert "Current Gate Health by Suite" in panels_by_title
|
||||
assert "Run Reliability by Suite (24h)" in panels_by_title
|
||||
assert "Run Reliability History by Suite" in panels_by_title
|
||||
assert "Run Reliability by Suite (7d rolling)" in panels_by_title
|
||||
assert "Daily Run Volume (Selected Scope)" in panels_by_title
|
||||
assert "Coverage History by Suite" in panels_by_title
|
||||
assert "Files <=500 LOC History by Suite" in panels_by_title
|
||||
assert "Run Reliability History by Suite" not in panels_by_title
|
||||
assert "Coverage & LOC Compliance History" not in panels_by_title
|
||||
assert "Run Status Mix (30d)" not in panels_by_title
|
||||
assert "Failures by Suite (24h)" not in panels_by_title
|
||||
assert "Success Rate by Suite (24h)" not in panels_by_title
|
||||
|
||||
@ -114,6 +120,20 @@ def test_jobs_dashboard_separates_current_gate_health_from_reliability():
|
||||
{"type": "value", "options": {"-1": {"text": "no runs"}}}
|
||||
]
|
||||
|
||||
rolling_panel = panels_by_title["Run Reliability by Suite (7d rolling)"]
|
||||
assert rolling_panel["type"] == "state-timeline"
|
||||
assert "[7d]" in rolling_panel["targets"][0]["expr"]
|
||||
|
||||
coverage_panel = panels_by_title["Coverage History by Suite"]
|
||||
loc_panel = panels_by_title["Files <=500 LOC History by Suite"]
|
||||
assert coverage_panel["type"] == "state-timeline"
|
||||
assert loc_panel["type"] == "state-timeline"
|
||||
assert coverage_panel["targets"][0]["expr"] != loc_panel["targets"][0]["expr"]
|
||||
|
||||
run_volume_panel = panels_by_title["Daily Run Volume (Selected Scope)"]
|
||||
assert run_volume_panel["fieldConfig"]["defaults"]["custom"]["drawStyle"] == "bars"
|
||||
assert "[$__interval]" not in run_volume_panel["targets"][0]["expr"]
|
||||
|
||||
|
||||
def test_jobs_dashboard_bar_gauges_use_solid_threshold_colors():
|
||||
mod = load_module()
|
||||
|
||||
@ -804,8 +804,9 @@
|
||||
"panels": [
|
||||
{
|
||||
"id": 11,
|
||||
"type": "timeseries",
|
||||
"title": "Run Reliability History by Suite",
|
||||
"type": "state-timeline",
|
||||
"title": "Run Reliability by Suite (7d rolling)",
|
||||
"description": "Seven-day rolling run success rate per suite. Each suite gets its own lane, so brief failed/debug runs lower the lane color without creating unreadable 0/100 spikes.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -818,42 +819,69 @@
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0)",
|
||||
"expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[7d])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[7d])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[7d]))) > 0)",
|
||||
"refId": "A",
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"drawStyle": "line",
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 8,
|
||||
"showPoints": "always",
|
||||
"pointSize": 3,
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"type": "timeseries",
|
||||
"title": "Run Outcomes (Selected Scope)",
|
||||
"title": "Daily Run Volume (Selected Scope)",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -867,18 +895,29 @@
|
||||
"targets": [
|
||||
{
|
||||
"refId": "A",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) or on() vector(0)",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[24h])) or on() vector(0)",
|
||||
"legendFormat": "Success"
|
||||
},
|
||||
{
|
||||
"refId": "B",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[$__interval])) or on() vector(0)",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[24h])) or on() vector(0)",
|
||||
"legendFormat": "Failure"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "none"
|
||||
"unit": "none",
|
||||
"min": 0,
|
||||
"custom": {
|
||||
"drawStyle": "bars",
|
||||
"barAlignment": 0,
|
||||
"lineWidth": 0,
|
||||
"fillOpacity": 70,
|
||||
"stacking": {
|
||||
"mode": "normal",
|
||||
"group": "A"
|
||||
}
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
@ -890,12 +929,14 @@
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Twenty-four-hour rolling run counts for the selected suite/branch scope. This is volume, not a pass-rate percentage."
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"type": "timeseries",
|
||||
"title": "Coverage & LOC Compliance History",
|
||||
"type": "state-timeline",
|
||||
"title": "Coverage History by Suite",
|
||||
"description": "Latest reported line coverage per suite over time. Coverage is separate from LOC compliance so one signal cannot hide the other.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -908,31 +949,70 @@
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "(max by (suite) (platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) or on(suite) (max by (suite) ({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))",
|
||||
"refId": "A",
|
||||
"expr": "min by (suite) (label_replace(max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]), \"dimension\", \"coverage\", \"__name__\", \".*\") or label_replace(((100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))), \"dimension\", \"loc\", \"__name__\", \".*\"))",
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "percent"
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"type": "piechart",
|
||||
"title": "Run Status Mix (30d)",
|
||||
"type": "state-timeline",
|
||||
"title": "Files <=500 LOC History by Suite",
|
||||
"description": "Percent of LOC-gated source files at or under the 500-line limit. This uses the existing file-count telemetry; longest-file history needs a new publisher metric.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -945,38 +1025,62 @@
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "sum by (status) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))",
|
||||
"expr": "((100 * clamp_min((max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) - (max by (suite) (platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})), 0) / (max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))) and on(suite) ((max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) > 0)) or on(suite) (100 * (1 - clamp_max((max by (suite) (platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})), 1)))",
|
||||
"refId": "A",
|
||||
"legendFormat": "{{status}}"
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "none",
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "right"
|
||||
"placement": "bottom"
|
||||
},
|
||||
"pieType": "pie",
|
||||
"displayLabels": [],
|
||||
"tooltip": {
|
||||
"mode": "single"
|
||||
},
|
||||
"colorScheme": "interpolateSpectral",
|
||||
"colorBy": "value",
|
||||
"reduceOptions": {
|
||||
"calcs": [
|
||||
"lastNotNull"
|
||||
],
|
||||
"fields": "",
|
||||
"values": false
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -804,8 +804,9 @@
|
||||
"panels": [
|
||||
{
|
||||
"id": 11,
|
||||
"type": "timeseries",
|
||||
"title": "Run Reliability History by Suite",
|
||||
"type": "state-timeline",
|
||||
"title": "Run Reliability by Suite (7d rolling)",
|
||||
"description": "Seven-day rolling run success rate per suite. Each suite gets its own lane, so brief failed/debug runs lower the lane color without creating unreadable 0/100 spikes.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -818,42 +819,69 @@
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0)",
|
||||
"expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[7d])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[7d])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[7d]))) > 0)",
|
||||
"refId": "A",
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"drawStyle": "line",
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 8,
|
||||
"showPoints": "always",
|
||||
"pointSize": 3,
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"type": "timeseries",
|
||||
"title": "Run Outcomes (Selected Scope)",
|
||||
"title": "Daily Run Volume (Selected Scope)",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -867,18 +895,29 @@
|
||||
"targets": [
|
||||
{
|
||||
"refId": "A",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) or on() vector(0)",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[24h])) or on() vector(0)",
|
||||
"legendFormat": "Success"
|
||||
},
|
||||
{
|
||||
"refId": "B",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[$__interval])) or on() vector(0)",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[24h])) or on() vector(0)",
|
||||
"legendFormat": "Failure"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "none"
|
||||
"unit": "none",
|
||||
"min": 0,
|
||||
"custom": {
|
||||
"drawStyle": "bars",
|
||||
"barAlignment": 0,
|
||||
"lineWidth": 0,
|
||||
"fillOpacity": 70,
|
||||
"stacking": {
|
||||
"mode": "normal",
|
||||
"group": "A"
|
||||
}
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
@ -890,12 +929,14 @@
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Twenty-four-hour rolling run counts for the selected suite/branch scope. This is volume, not a pass-rate percentage."
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"type": "timeseries",
|
||||
"title": "Coverage & LOC Compliance History",
|
||||
"type": "state-timeline",
|
||||
"title": "Coverage History by Suite",
|
||||
"description": "Latest reported line coverage per suite over time. Coverage is separate from LOC compliance so one signal cannot hide the other.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -908,31 +949,70 @@
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "(max by (suite) (platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) or on(suite) (max by (suite) ({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))",
|
||||
"refId": "A",
|
||||
"expr": "min by (suite) (label_replace(max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]), \"dimension\", \"coverage\", \"__name__\", \".*\") or label_replace(((100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))), \"dimension\", \"loc\", \"__name__\", \".*\"))",
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "percent"
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"type": "piechart",
|
||||
"title": "Run Status Mix (30d)",
|
||||
"type": "state-timeline",
|
||||
"title": "Files <=500 LOC History by Suite",
|
||||
"description": "Percent of LOC-gated source files at or under the 500-line limit. This uses the existing file-count telemetry; longest-file history needs a new publisher metric.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -945,38 +1025,62 @@
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "sum by (status) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))",
|
||||
"expr": "((100 * clamp_min((max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) - (max by (suite) (platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})), 0) / (max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))) and on(suite) ((max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) > 0)) or on(suite) (100 * (1 - clamp_max((max by (suite) (platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})), 1)))",
|
||||
"refId": "A",
|
||||
"legendFormat": "{{status}}"
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "none",
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "right"
|
||||
"placement": "bottom"
|
||||
},
|
||||
"pieType": "pie",
|
||||
"displayLabels": [],
|
||||
"tooltip": {
|
||||
"mode": "single"
|
||||
},
|
||||
"colorScheme": "interpolateSpectral",
|
||||
"colorBy": "value",
|
||||
"reduceOptions": {
|
||||
"calcs": [
|
||||
"lastNotNull"
|
||||
],
|
||||
"fields": "",
|
||||
"values": false
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -813,8 +813,9 @@ data:
|
||||
"panels": [
|
||||
{
|
||||
"id": 11,
|
||||
"type": "timeseries",
|
||||
"title": "Run Reliability History by Suite",
|
||||
"type": "state-timeline",
|
||||
"title": "Run Reliability by Suite (7d rolling)",
|
||||
"description": "Seven-day rolling run success rate per suite. Each suite gets its own lane, so brief failed/debug runs lower the lane color without creating unreadable 0/100 spikes.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -827,42 +828,69 @@ data:
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0)",
|
||||
"expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[7d])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[7d])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[7d]))) > 0)",
|
||||
"refId": "A",
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"drawStyle": "line",
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 8,
|
||||
"showPoints": "always",
|
||||
"pointSize": 3,
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"type": "timeseries",
|
||||
"title": "Run Outcomes (Selected Scope)",
|
||||
"title": "Daily Run Volume (Selected Scope)",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -876,18 +904,29 @@ data:
|
||||
"targets": [
|
||||
{
|
||||
"refId": "A",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) or on() vector(0)",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[24h])) or on() vector(0)",
|
||||
"legendFormat": "Success"
|
||||
},
|
||||
{
|
||||
"refId": "B",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[$__interval])) or on() vector(0)",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[24h])) or on() vector(0)",
|
||||
"legendFormat": "Failure"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "none"
|
||||
"unit": "none",
|
||||
"min": 0,
|
||||
"custom": {
|
||||
"drawStyle": "bars",
|
||||
"barAlignment": 0,
|
||||
"lineWidth": 0,
|
||||
"fillOpacity": 70,
|
||||
"stacking": {
|
||||
"mode": "normal",
|
||||
"group": "A"
|
||||
}
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
@ -899,12 +938,14 @@ data:
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Twenty-four-hour rolling run counts for the selected suite/branch scope. This is volume, not a pass-rate percentage."
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"type": "timeseries",
|
||||
"title": "Coverage & LOC Compliance History",
|
||||
"type": "state-timeline",
|
||||
"title": "Coverage History by Suite",
|
||||
"description": "Latest reported line coverage per suite over time. Coverage is separate from LOC compliance so one signal cannot hide the other.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -917,31 +958,70 @@ data:
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "(max by (suite) (platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) or on(suite) (max by (suite) ({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))",
|
||||
"refId": "A",
|
||||
"expr": "min by (suite) (label_replace(max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]), \"dimension\", \"coverage\", \"__name__\", \".*\") or label_replace(((100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))), \"dimension\", \"loc\", \"__name__\", \".*\"))",
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "percent"
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"type": "piechart",
|
||||
"title": "Run Status Mix (30d)",
|
||||
"type": "state-timeline",
|
||||
"title": "Files <=500 LOC History by Suite",
|
||||
"description": "Percent of LOC-gated source files at or under the 500-line limit. This uses the existing file-count telemetry; longest-file history needs a new publisher metric.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -954,38 +1034,62 @@ data:
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "sum by (status) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))",
|
||||
"expr": "((100 * clamp_min((max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) - (max by (suite) (platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})), 0) / (max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))) and on(suite) ((max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) > 0)) or on(suite) (100 * (1 - clamp_max((max by (suite) (platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})), 1)))",
|
||||
"refId": "A",
|
||||
"legendFormat": "{{status}}"
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "none",
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "right"
|
||||
"placement": "bottom"
|
||||
},
|
||||
"pieType": "pie",
|
||||
"displayLabels": [],
|
||||
"tooltip": {
|
||||
"mode": "single"
|
||||
},
|
||||
"colorScheme": "interpolateSpectral",
|
||||
"colorBy": "value",
|
||||
"reduceOptions": {
|
||||
"calcs": [
|
||||
"lastNotNull"
|
||||
],
|
||||
"fields": "",
|
||||
"values": false
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -813,8 +813,9 @@ data:
|
||||
"panels": [
|
||||
{
|
||||
"id": 11,
|
||||
"type": "timeseries",
|
||||
"title": "Run Reliability History by Suite",
|
||||
"type": "state-timeline",
|
||||
"title": "Run Reliability by Suite (7d rolling)",
|
||||
"description": "Seven-day rolling run success rate per suite. Each suite gets its own lane, so brief failed/debug runs lower the lane color without creating unreadable 0/100 spikes.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -827,42 +828,69 @@ data:
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0)",
|
||||
"expr": "(100 * sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[7d])) / (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[7d])))) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[7d]))) > 0)",
|
||||
"refId": "A",
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"drawStyle": "line",
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 8,
|
||||
"showPoints": "always",
|
||||
"pointSize": 3,
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"type": "timeseries",
|
||||
"title": "Run Outcomes (Selected Scope)",
|
||||
"title": "Daily Run Volume (Selected Scope)",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -876,18 +904,29 @@ data:
|
||||
"targets": [
|
||||
{
|
||||
"refId": "A",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[$__interval])) or on() vector(0)",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}[24h])) or on() vector(0)",
|
||||
"legendFormat": "Success"
|
||||
},
|
||||
{
|
||||
"refId": "B",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[$__interval])) or on() vector(0)",
|
||||
"expr": "sum(increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status!~\"ok|passed|success\"}[24h])) or on() vector(0)",
|
||||
"legendFormat": "Failure"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "none"
|
||||
"unit": "none",
|
||||
"min": 0,
|
||||
"custom": {
|
||||
"drawStyle": "bars",
|
||||
"barAlignment": 0,
|
||||
"lineWidth": 0,
|
||||
"fillOpacity": 70,
|
||||
"stacking": {
|
||||
"mode": "normal",
|
||||
"group": "A"
|
||||
}
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
@ -899,12 +938,14 @@ data:
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Twenty-four-hour rolling run counts for the selected suite/branch scope. This is volume, not a pass-rate percentage."
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"type": "timeseries",
|
||||
"title": "Coverage & LOC Compliance History",
|
||||
"type": "state-timeline",
|
||||
"title": "Coverage History by Suite",
|
||||
"description": "Latest reported line coverage per suite over time. Coverage is separate from LOC compliance so one signal cannot hide the other.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -917,31 +958,70 @@ data:
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "(max by (suite) (platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) or on(suite) (max by (suite) ({__name__=~\".*_quality_gate_coverage_percent\",suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))",
|
||||
"refId": "A",
|
||||
"expr": "min by (suite) (label_replace(max_over_time(platform_quality_gate_workspace_line_coverage_percent{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]), \"dimension\", \"coverage\", \"__name__\", \".*\") or label_replace(((100 * clamp_min((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) - (max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 0) / (max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval])))) and on(suite) ((max by (suite) (max_over_time(platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (max_over_time(platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[$__interval]))), 1))) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d])) >= bool 0)))), \"dimension\", \"loc\", \"__name__\", \".*\"))",
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "percent"
|
||||
"color": {
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "multi"
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"type": "piechart",
|
||||
"title": "Run Status Mix (30d)",
|
||||
"type": "state-timeline",
|
||||
"title": "Files <=500 LOC History by Suite",
|
||||
"description": "Percent of LOC-gated source files at or under the 500-line limit. This uses the existing file-count telemetry; longest-file history needs a new publisher metric.",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "atlas-vm"
|
||||
@ -954,38 +1034,62 @@ data:
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"expr": "sum by (status) (increase(platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}[30d]))",
|
||||
"expr": "((100 * clamp_min((max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) - (max by (suite) (platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})), 0) / (max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))) and on(suite) ((max by (suite) (platform_quality_gate_source_files_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})) > 0)) or on(suite) (100 * (1 - clamp_max((max by (suite) (platform_quality_gate_source_lines_over_500_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"})), 1)))",
|
||||
"refId": "A",
|
||||
"legendFormat": "{{status}}"
|
||||
"legendFormat": "{{suite}}"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "none",
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
"mode": "thresholds"
|
||||
},
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "dark-orange",
|
||||
"value": 90
|
||||
},
|
||||
{
|
||||
"color": "dark-yellow",
|
||||
"value": 93
|
||||
},
|
||||
{
|
||||
"color": "dark-green",
|
||||
"value": 95
|
||||
},
|
||||
{
|
||||
"color": "dark-blue",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"fillOpacity": 70,
|
||||
"lineWidth": 0,
|
||||
"spanNulls": true
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"mergeValues": true,
|
||||
"showValue": "never",
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "right"
|
||||
"placement": "bottom"
|
||||
},
|
||||
"pieType": "pie",
|
||||
"displayLabels": [],
|
||||
"tooltip": {
|
||||
"mode": "single"
|
||||
},
|
||||
"colorScheme": "interpolateSpectral",
|
||||
"colorBy": "value",
|
||||
"reduceOptions": {
|
||||
"calcs": [
|
||||
"lastNotNull"
|
||||
],
|
||||
"fields": "",
|
||||
"values": false
|
||||
"mode": "single",
|
||||
"sort": "none"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user