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'/ clamp_min(sum by (suite) (max by (suite, check) (({{{checks_selector}}} > bool 0))), 1)) '
|
||||||
f'or on(suite) ({selected_suite_zero})'
|
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 = (
|
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)'
|
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 = (
|
coverage_by_suite = (
|
||||||
f'(max by (suite) ({{{coverage_metric_selector}}})) '
|
f'(max by (suite) ({{{coverage_metric_selector}}})) '
|
||||||
f'or on(suite) (max by (suite) (platform_quality_gate_workspace_line_coverage_percent{{{workspace_coverage_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 = (
|
coverage_with_missing = (
|
||||||
f"({coverage_by_suite}) or on(suite) ((0 * (sum by (suite) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[30d])))) - 1)"
|
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) (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)"
|
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 = (
|
loc_limit_compliance_history = (
|
||||||
f"(100 * clamp_min(({loc_files_history}) - ({loc_violations_history}), 0) / ({loc_files_history})) "
|
f"({loc_limit_compliance_by_suite}) "
|
||||||
f"and on(suite) (({loc_files_history}) > 0) "
|
f"or on(suite) (100 * (1 - clamp_max(({smell_by_suite}), 1)))"
|
||||||
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__", ".*")'
|
|
||||||
")"
|
|
||||||
)
|
)
|
||||||
average_coverage = f"(avg(({coverage_by_suite})) or on() vector(0))"
|
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))'
|
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(
|
panels.append(
|
||||||
stat_panel(
|
stat_panel(
|
||||||
2,
|
2,
|
||||||
@ -3737,81 +3772,73 @@ def build_jobs_dashboard():
|
|||||||
{"type": "value", "options": {"-1": {"text": "no runs"}}}
|
{"type": "value", "options": {"-1": {"text": "no runs"}}}
|
||||||
]
|
]
|
||||||
panels.append(reliability_suite_panel)
|
panels.append(reliability_suite_panel)
|
||||||
history_panel = timeseries_panel(
|
history_panel = _state_timeline_panel(
|
||||||
11,
|
11,
|
||||||
"Run Reliability History by Suite",
|
"Run Reliability by Suite (7d rolling)",
|
||||||
success_history_by_suite,
|
success_history_by_suite,
|
||||||
{"h": 8, "w": 24, "x": 0, "y": 13},
|
{"h": 8, "w": 24, "x": 0, "y": 13},
|
||||||
unit="percent",
|
thresholds=success_thresholds,
|
||||||
legend="{{suite}}",
|
description=(
|
||||||
legend_display="list",
|
"Seven-day rolling run success rate per suite. Each suite gets its own lane, "
|
||||||
legend_placement="bottom",
|
"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(history_panel)
|
||||||
|
|
||||||
panels.append(
|
run_volume_panel = timeseries_panel(
|
||||||
timeseries_panel(
|
12,
|
||||||
12,
|
"Daily Run Volume (Selected Scope)",
|
||||||
"Run Outcomes (Selected Scope)",
|
None,
|
||||||
None,
|
{"h": 8, "w": 8, "x": 0, "y": 21},
|
||||||
{"h": 8, "w": 8, "x": 0, "y": 21},
|
unit="none",
|
||||||
unit="none",
|
targets=[
|
||||||
targets=[
|
{"refId": "A", "expr": daily_success_volume, "legendFormat": "Success"},
|
||||||
{
|
{"refId": "B", "expr": daily_failure_volume, "legendFormat": "Failure"},
|
||||||
"refId": "A",
|
],
|
||||||
"expr": f'sum(increase(platform_quality_gate_runs_total{{{runs_success_selector}}}[$__interval])) or on() vector(0)',
|
legend_display="list",
|
||||||
"legendFormat": "Success",
|
legend_placement="bottom",
|
||||||
},
|
legend_calcs=[],
|
||||||
{
|
|
||||||
"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["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(
|
panels.append(
|
||||||
timeseries_panel(
|
_state_timeline_panel(
|
||||||
13,
|
13,
|
||||||
"Coverage & LOC Compliance History",
|
"Coverage History by Suite",
|
||||||
None,
|
coverage_history_by_suite,
|
||||||
{"h": 8, "w": 8, "x": 8, "y": 21},
|
{"h": 8, "w": 8, "x": 8, "y": 21},
|
||||||
unit="percent",
|
thresholds=coverage_thresholds,
|
||||||
targets=[
|
description=(
|
||||||
{
|
"Latest reported line coverage per suite over time. Coverage is separate "
|
||||||
"refId": "A",
|
"from LOC compliance so one signal cannot hide the other."
|
||||||
"expr": coverage_loc_compliance_history,
|
),
|
||||||
"legendFormat": "{{suite}}",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
legend_display="list",
|
|
||||||
legend_placement="bottom",
|
|
||||||
legend_calcs=[],
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
run_mix_panel = pie_panel(
|
panels.append(
|
||||||
14,
|
_state_timeline_panel(
|
||||||
"Run Status Mix (30d)",
|
14,
|
||||||
f'sum by (status) (increase(platform_quality_gate_runs_total{{{runs_selector}}}[30d]))',
|
"Files <=500 LOC History by Suite",
|
||||||
{"h": 8, "w": 8, "x": 16, "y": 21},
|
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 = [
|
check_dimensions = [
|
||||||
("Tests", check_regex_tests),
|
("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 "Current Gate Health by Suite" in panels_by_title
|
||||||
assert "Run Reliability by Suite (24h)" 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 "Failures by Suite (24h)" not in panels_by_title
|
||||||
assert "Success Rate 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"}}}
|
{"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():
|
def test_jobs_dashboard_bar_gauges_use_solid_threshold_colors():
|
||||||
mod = load_module()
|
mod = load_module()
|
||||||
|
|||||||
@ -804,8 +804,9 @@
|
|||||||
"panels": [
|
"panels": [
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"type": "timeseries",
|
"type": "state-timeline",
|
||||||
"title": "Run Reliability History by Suite",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -818,42 +819,69 @@
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"refId": "A",
|
||||||
"legendFormat": "{{suite}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "thresholds"
|
||||||
|
},
|
||||||
"unit": "percent",
|
"unit": "percent",
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"max": 100,
|
"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": {
|
"custom": {
|
||||||
"drawStyle": "line",
|
"fillOpacity": 70,
|
||||||
"lineInterpolation": "linear",
|
"lineWidth": 0,
|
||||||
"lineWidth": 2,
|
|
||||||
"fillOpacity": 8,
|
|
||||||
"showPoints": "always",
|
|
||||||
"pointSize": 3,
|
|
||||||
"spanNulls": true
|
"spanNulls": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "bottom"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 12,
|
"id": 12,
|
||||||
"type": "timeseries",
|
"type": "timeseries",
|
||||||
"title": "Run Outcomes (Selected Scope)",
|
"title": "Daily Run Volume (Selected Scope)",
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -867,18 +895,29 @@
|
|||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"refId": "A",
|
"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"
|
"legendFormat": "Success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "B",
|
"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"
|
"legendFormat": "Failure"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"unit": "none"
|
"unit": "none",
|
||||||
|
"min": 0,
|
||||||
|
"custom": {
|
||||||
|
"drawStyle": "bars",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"lineWidth": 0,
|
||||||
|
"fillOpacity": 70,
|
||||||
|
"stacking": {
|
||||||
|
"mode": "normal",
|
||||||
|
"group": "A"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
@ -890,12 +929,14 @@
|
|||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"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,
|
"id": 13,
|
||||||
"type": "timeseries",
|
"type": "state-timeline",
|
||||||
"title": "Coverage & LOC Compliance History",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -908,31 +949,70 @@
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"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}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"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": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "bottom"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 14,
|
"id": 14,
|
||||||
"type": "piechart",
|
"type": "state-timeline",
|
||||||
"title": "Run Status Mix (30d)",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -945,38 +1025,62 @@
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"refId": "A",
|
||||||
"legendFormat": "{{status}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"unit": "none",
|
|
||||||
"color": {
|
"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": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "right"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"pieType": "pie",
|
|
||||||
"displayLabels": [],
|
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "single"
|
"mode": "single",
|
||||||
},
|
"sort": "none"
|
||||||
"colorScheme": "interpolateSpectral",
|
|
||||||
"colorBy": "value",
|
|
||||||
"reduceOptions": {
|
|
||||||
"calcs": [
|
|
||||||
"lastNotNull"
|
|
||||||
],
|
|
||||||
"fields": "",
|
|
||||||
"values": false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -804,8 +804,9 @@
|
|||||||
"panels": [
|
"panels": [
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"type": "timeseries",
|
"type": "state-timeline",
|
||||||
"title": "Run Reliability History by Suite",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -818,42 +819,69 @@
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"refId": "A",
|
||||||
"legendFormat": "{{suite}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "thresholds"
|
||||||
|
},
|
||||||
"unit": "percent",
|
"unit": "percent",
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"max": 100,
|
"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": {
|
"custom": {
|
||||||
"drawStyle": "line",
|
"fillOpacity": 70,
|
||||||
"lineInterpolation": "linear",
|
"lineWidth": 0,
|
||||||
"lineWidth": 2,
|
|
||||||
"fillOpacity": 8,
|
|
||||||
"showPoints": "always",
|
|
||||||
"pointSize": 3,
|
|
||||||
"spanNulls": true
|
"spanNulls": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "bottom"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 12,
|
"id": 12,
|
||||||
"type": "timeseries",
|
"type": "timeseries",
|
||||||
"title": "Run Outcomes (Selected Scope)",
|
"title": "Daily Run Volume (Selected Scope)",
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -867,18 +895,29 @@
|
|||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"refId": "A",
|
"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"
|
"legendFormat": "Success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "B",
|
"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"
|
"legendFormat": "Failure"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"unit": "none"
|
"unit": "none",
|
||||||
|
"min": 0,
|
||||||
|
"custom": {
|
||||||
|
"drawStyle": "bars",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"lineWidth": 0,
|
||||||
|
"fillOpacity": 70,
|
||||||
|
"stacking": {
|
||||||
|
"mode": "normal",
|
||||||
|
"group": "A"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
@ -890,12 +929,14 @@
|
|||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"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,
|
"id": 13,
|
||||||
"type": "timeseries",
|
"type": "state-timeline",
|
||||||
"title": "Coverage & LOC Compliance History",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -908,31 +949,70 @@
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"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}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"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": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "bottom"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 14,
|
"id": 14,
|
||||||
"type": "piechart",
|
"type": "state-timeline",
|
||||||
"title": "Run Status Mix (30d)",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -945,38 +1025,62 @@
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"refId": "A",
|
||||||
"legendFormat": "{{status}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"unit": "none",
|
|
||||||
"color": {
|
"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": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "right"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"pieType": "pie",
|
|
||||||
"displayLabels": [],
|
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "single"
|
"mode": "single",
|
||||||
},
|
"sort": "none"
|
||||||
"colorScheme": "interpolateSpectral",
|
|
||||||
"colorBy": "value",
|
|
||||||
"reduceOptions": {
|
|
||||||
"calcs": [
|
|
||||||
"lastNotNull"
|
|
||||||
],
|
|
||||||
"fields": "",
|
|
||||||
"values": false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -813,8 +813,9 @@ data:
|
|||||||
"panels": [
|
"panels": [
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"type": "timeseries",
|
"type": "state-timeline",
|
||||||
"title": "Run Reliability History by Suite",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -827,42 +828,69 @@ data:
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"refId": "A",
|
||||||
"legendFormat": "{{suite}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "thresholds"
|
||||||
|
},
|
||||||
"unit": "percent",
|
"unit": "percent",
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"max": 100,
|
"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": {
|
"custom": {
|
||||||
"drawStyle": "line",
|
"fillOpacity": 70,
|
||||||
"lineInterpolation": "linear",
|
"lineWidth": 0,
|
||||||
"lineWidth": 2,
|
|
||||||
"fillOpacity": 8,
|
|
||||||
"showPoints": "always",
|
|
||||||
"pointSize": 3,
|
|
||||||
"spanNulls": true
|
"spanNulls": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "bottom"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 12,
|
"id": 12,
|
||||||
"type": "timeseries",
|
"type": "timeseries",
|
||||||
"title": "Run Outcomes (Selected Scope)",
|
"title": "Daily Run Volume (Selected Scope)",
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -876,18 +904,29 @@ data:
|
|||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"refId": "A",
|
"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"
|
"legendFormat": "Success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "B",
|
"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"
|
"legendFormat": "Failure"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"unit": "none"
|
"unit": "none",
|
||||||
|
"min": 0,
|
||||||
|
"custom": {
|
||||||
|
"drawStyle": "bars",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"lineWidth": 0,
|
||||||
|
"fillOpacity": 70,
|
||||||
|
"stacking": {
|
||||||
|
"mode": "normal",
|
||||||
|
"group": "A"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
@ -899,12 +938,14 @@ data:
|
|||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"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,
|
"id": 13,
|
||||||
"type": "timeseries",
|
"type": "state-timeline",
|
||||||
"title": "Coverage & LOC Compliance History",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -917,31 +958,70 @@ data:
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"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}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"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": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "bottom"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 14,
|
"id": 14,
|
||||||
"type": "piechart",
|
"type": "state-timeline",
|
||||||
"title": "Run Status Mix (30d)",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -954,38 +1034,62 @@ data:
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"refId": "A",
|
||||||
"legendFormat": "{{status}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"unit": "none",
|
|
||||||
"color": {
|
"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": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "right"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"pieType": "pie",
|
|
||||||
"displayLabels": [],
|
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "single"
|
"mode": "single",
|
||||||
},
|
"sort": "none"
|
||||||
"colorScheme": "interpolateSpectral",
|
|
||||||
"colorBy": "value",
|
|
||||||
"reduceOptions": {
|
|
||||||
"calcs": [
|
|
||||||
"lastNotNull"
|
|
||||||
],
|
|
||||||
"fields": "",
|
|
||||||
"values": false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -813,8 +813,9 @@ data:
|
|||||||
"panels": [
|
"panels": [
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"type": "timeseries",
|
"type": "state-timeline",
|
||||||
"title": "Run Reliability History by Suite",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -827,42 +828,69 @@ data:
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"refId": "A",
|
||||||
"legendFormat": "{{suite}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "thresholds"
|
||||||
|
},
|
||||||
"unit": "percent",
|
"unit": "percent",
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"max": 100,
|
"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": {
|
"custom": {
|
||||||
"drawStyle": "line",
|
"fillOpacity": 70,
|
||||||
"lineInterpolation": "linear",
|
"lineWidth": 0,
|
||||||
"lineWidth": 2,
|
|
||||||
"fillOpacity": 8,
|
|
||||||
"showPoints": "always",
|
|
||||||
"pointSize": 3,
|
|
||||||
"spanNulls": true
|
"spanNulls": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "bottom"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 12,
|
"id": 12,
|
||||||
"type": "timeseries",
|
"type": "timeseries",
|
||||||
"title": "Run Outcomes (Selected Scope)",
|
"title": "Daily Run Volume (Selected Scope)",
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -876,18 +904,29 @@ data:
|
|||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"refId": "A",
|
"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"
|
"legendFormat": "Success"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "B",
|
"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"
|
"legendFormat": "Failure"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"unit": "none"
|
"unit": "none",
|
||||||
|
"min": 0,
|
||||||
|
"custom": {
|
||||||
|
"drawStyle": "bars",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"lineWidth": 0,
|
||||||
|
"fillOpacity": 70,
|
||||||
|
"stacking": {
|
||||||
|
"mode": "normal",
|
||||||
|
"group": "A"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
@ -899,12 +938,14 @@ data:
|
|||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"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,
|
"id": 13,
|
||||||
"type": "timeseries",
|
"type": "state-timeline",
|
||||||
"title": "Coverage & LOC Compliance History",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -917,31 +958,70 @@ data:
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"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}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"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": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "bottom"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "multi"
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 14,
|
"id": 14,
|
||||||
"type": "piechart",
|
"type": "state-timeline",
|
||||||
"title": "Run Status Mix (30d)",
|
"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": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "atlas-vm"
|
"uid": "atlas-vm"
|
||||||
@ -954,38 +1034,62 @@ data:
|
|||||||
},
|
},
|
||||||
"targets": [
|
"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",
|
"refId": "A",
|
||||||
"legendFormat": "{{status}}"
|
"legendFormat": "{{suite}}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"unit": "none",
|
|
||||||
"color": {
|
"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": []
|
"overrides": []
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
|
"mergeValues": true,
|
||||||
|
"showValue": "never",
|
||||||
"legend": {
|
"legend": {
|
||||||
"displayMode": "list",
|
"displayMode": "list",
|
||||||
"placement": "right"
|
"placement": "bottom"
|
||||||
},
|
},
|
||||||
"pieType": "pie",
|
|
||||||
"displayLabels": [],
|
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"mode": "single"
|
"mode": "single",
|
||||||
},
|
"sort": "none"
|
||||||
"colorScheme": "interpolateSpectral",
|
|
||||||
"colorBy": "value",
|
|
||||||
"reduceOptions": {
|
|
||||||
"calcs": [
|
|
||||||
"lastNotNull"
|
|
||||||
],
|
|
||||||
"fields": "",
|
|
||||||
"values": false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user