monitoring(testing): redesign atlas testing dashboard and unify suite aliases
This commit is contained in:
parent
9a8c454123
commit
9a20f4f854
@ -535,9 +535,28 @@ PLATFORM_TEST_SUITE_NAMES = [
|
|||||||
"arcanagon",
|
"arcanagon",
|
||||||
"data-prepper",
|
"data-prepper",
|
||||||
]
|
]
|
||||||
PLATFORM_TEST_SUITE_MATCHER = "|".join(PLATFORM_TEST_SUITE_NAMES)
|
PLATFORM_TEST_SUCCESS_STATUS = "ok|passed|success"
|
||||||
|
PLATFORM_TEST_SUITE_VALUE_BY_NAME = {
|
||||||
|
"ariadne": "ariadne",
|
||||||
|
"metis": "metis",
|
||||||
|
"ananke": "ananke",
|
||||||
|
"atlasbot": "atlasbot",
|
||||||
|
"lesavka": "lesavka",
|
||||||
|
"pegasus": "pegasus|pegasus-health|pegasus_health",
|
||||||
|
"soteria": "soteria",
|
||||||
|
"titan-iac": "titan-iac|titan_iac",
|
||||||
|
"bstein-home": "bstein-home|bstein_home",
|
||||||
|
"arcanagon": "arcanagon",
|
||||||
|
"data-prepper": "data-prepper|data_prepper",
|
||||||
|
}
|
||||||
|
PLATFORM_TEST_SUITE_MATCHER = "|".join(
|
||||||
|
PLATFORM_TEST_SUITE_VALUE_BY_NAME.get(suite, suite) for suite in PLATFORM_TEST_SUITE_NAMES
|
||||||
|
)
|
||||||
|
PLATFORM_TEST_SUITE_VARIABLE_ALL_MATCHER = "|".join(
|
||||||
|
PLATFORM_TEST_SUITE_VALUE_BY_NAME.get(suite, suite) for suite in PLATFORM_TEST_SUITE_NAMES
|
||||||
|
)
|
||||||
PLATFORM_TEST_SUCCESS_EVENTS_30D = (
|
PLATFORM_TEST_SUCCESS_EVENTS_30D = (
|
||||||
f'(sum(increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}",status=~"ok|passed|success"}}[30d])) or on() vector(0))'
|
f'(sum(increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}",status=~"{PLATFORM_TEST_SUCCESS_STATUS}"}}[30d])) or on() vector(0))'
|
||||||
)
|
)
|
||||||
PLATFORM_TEST_TOTAL_EVENTS_30D = (
|
PLATFORM_TEST_TOTAL_EVENTS_30D = (
|
||||||
f'(sum(increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}"}}[30d])) or on() vector(0))'
|
f'(sum(increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}"}}[30d])) or on() vector(0))'
|
||||||
@ -546,10 +565,10 @@ TEST_SUCCESS_RATE = (
|
|||||||
f"100 * ({PLATFORM_TEST_SUCCESS_EVENTS_30D}) / clamp_min(({PLATFORM_TEST_TOTAL_EVENTS_30D}), 1)"
|
f"100 * ({PLATFORM_TEST_SUCCESS_EVENTS_30D}) / clamp_min(({PLATFORM_TEST_TOTAL_EVENTS_30D}), 1)"
|
||||||
)
|
)
|
||||||
TEST_FAILURES_24H_TOTAL = (
|
TEST_FAILURES_24H_TOTAL = (
|
||||||
f'(sum(increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}",status!~"ok|passed|success"}}[24h])) or on() vector(0))'
|
f'(sum(increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}",status!~"{PLATFORM_TEST_SUCCESS_STATUS}"}}[24h])) or on() vector(0))'
|
||||||
)
|
)
|
||||||
PLATFORM_TEST_FAILURES_24H_BY_SUITE = (
|
PLATFORM_TEST_FAILURES_24H_BY_SUITE = (
|
||||||
f'sort_desc(sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}",status!~"ok|passed|success"}}[24h])))'
|
f'sort_desc(sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}",status!~"{PLATFORM_TEST_SUCCESS_STATUS}"}}[24h])))'
|
||||||
)
|
)
|
||||||
PLATFORM_TEST_ACTIVITY_30D = (
|
PLATFORM_TEST_ACTIVITY_30D = (
|
||||||
f'sum by (suite, status) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}"}}[30d]))'
|
f'sum by (suite, status) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}"}}[30d]))'
|
||||||
@ -559,10 +578,10 @@ PLATFORM_TEST_SUCCESS_RATE_SUITE_TARGETS = [
|
|||||||
{
|
{
|
||||||
"refId": chr(ord("A") + index),
|
"refId": chr(ord("A") + index),
|
||||||
"expr": (
|
"expr": (
|
||||||
f'(100 * (sum(increase(platform_quality_gate_runs_total{{suite="{suite}",status=~"ok|passed|success"}}'
|
f'(100 * (sum(increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_VALUE_BY_NAME.get(suite, suite)}",status=~"{PLATFORM_TEST_SUCCESS_STATUS}"}}'
|
||||||
f'[{PLATFORM_TEST_POINT_WINDOW}]))) / '
|
f'[{PLATFORM_TEST_POINT_WINDOW}]))) / '
|
||||||
f'clamp_min((sum(increase(platform_quality_gate_runs_total{{suite="{suite}"}}[{PLATFORM_TEST_POINT_WINDOW}]))), 1)) '
|
f'clamp_min((sum(increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_VALUE_BY_NAME.get(suite, suite)}"}}[{PLATFORM_TEST_POINT_WINDOW}]))), 1)) '
|
||||||
f'and on() ((sum(increase(platform_quality_gate_runs_total{{suite="{suite}"}}[{PLATFORM_TEST_POINT_WINDOW}]))) > 0) '
|
f'and on() ((sum(increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_VALUE_BY_NAME.get(suite, suite)}"}}[{PLATFORM_TEST_POINT_WINDOW}]))) > 0) '
|
||||||
"or on() vector(0)"
|
"or on() vector(0)"
|
||||||
),
|
),
|
||||||
"legendFormat": suite,
|
"legendFormat": suite,
|
||||||
@ -570,7 +589,7 @@ PLATFORM_TEST_SUCCESS_RATE_SUITE_TARGETS = [
|
|||||||
for index, suite in enumerate(PLATFORM_TEST_SUITE_NAMES)
|
for index, suite in enumerate(PLATFORM_TEST_SUITE_NAMES)
|
||||||
]
|
]
|
||||||
PLATFORM_TEST_SUCCESS_RATE_24H_BY_SUITE = (
|
PLATFORM_TEST_SUCCESS_RATE_24H_BY_SUITE = (
|
||||||
f'sort_desc((100 * (sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}",status=~"ok|passed|success"}}[24h]))) '
|
f'sort_desc((100 * (sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}",status=~"{PLATFORM_TEST_SUCCESS_STATUS}"}}[24h]))) '
|
||||||
f'/ clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}"}}[24h]))), 1)) '
|
f'/ clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}"}}[24h]))), 1)) '
|
||||||
f'and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}"}}[24h]))) > 0))'
|
f'and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{PLATFORM_TEST_SUITE_MATCHER}"}}[24h]))) > 0))'
|
||||||
)
|
)
|
||||||
@ -1224,7 +1243,7 @@ def table_panel(
|
|||||||
return panel
|
return panel
|
||||||
|
|
||||||
|
|
||||||
def pie_panel(panel_id, title, expr, grid, *, links=None, description=None):
|
def pie_panel(panel_id, title, expr, grid, *, links=None, description=None, legend="{{namespace}}", unit="percent", instant=False):
|
||||||
"""Return a pie chart panel with readable namespace labels."""
|
"""Return a pie chart panel with readable namespace labels."""
|
||||||
panel = {
|
panel = {
|
||||||
"id": panel_id,
|
"id": panel_id,
|
||||||
@ -1232,10 +1251,10 @@ def pie_panel(panel_id, title, expr, grid, *, links=None, description=None):
|
|||||||
"title": title,
|
"title": title,
|
||||||
"datasource": PROM_DS,
|
"datasource": PROM_DS,
|
||||||
"gridPos": grid,
|
"gridPos": grid,
|
||||||
"targets": [{"expr": expr, "refId": "A", "legendFormat": "{{namespace}}"}],
|
"targets": [{"expr": expr, "refId": "A", "legendFormat": legend, **({"instant": True} if instant else {})}],
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"unit": "percent",
|
"unit": unit,
|
||||||
"color": {"mode": "palette-classic"},
|
"color": {"mode": "palette-classic"},
|
||||||
},
|
},
|
||||||
"overrides": [],
|
"overrides": [],
|
||||||
@ -1295,6 +1314,36 @@ def namespace_scope_variable(var_name, label):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def testing_suite_variable():
|
||||||
|
options = [
|
||||||
|
{
|
||||||
|
"text": suite,
|
||||||
|
"value": PLATFORM_TEST_SUITE_VALUE_BY_NAME.get(suite, suite),
|
||||||
|
"selected": False,
|
||||||
|
}
|
||||||
|
for suite in PLATFORM_TEST_SUITE_NAMES
|
||||||
|
]
|
||||||
|
query = ",".join(
|
||||||
|
f"{suite} : {PLATFORM_TEST_SUITE_VALUE_BY_NAME.get(suite, suite)}"
|
||||||
|
for suite in PLATFORM_TEST_SUITE_NAMES
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
"name": "suite",
|
||||||
|
"label": "Suite",
|
||||||
|
"type": "custom",
|
||||||
|
"query": query,
|
||||||
|
"current": {"text": "All", "value": "$__all", "selected": True},
|
||||||
|
"options": options,
|
||||||
|
"hide": 0,
|
||||||
|
"multi": False,
|
||||||
|
"includeAll": True,
|
||||||
|
"allValue": PLATFORM_TEST_SUITE_VARIABLE_ALL_MATCHER,
|
||||||
|
"refresh": 1,
|
||||||
|
"sort": 1,
|
||||||
|
"skipUrlSync": False,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def namespace_scope_links(var_name):
|
def namespace_scope_links(var_name):
|
||||||
def with_value(value):
|
def with_value(value):
|
||||||
encoded = urllib.parse.quote(value, safe="")
|
encoded = urllib.parse.quote(value, safe="")
|
||||||
@ -4014,6 +4063,55 @@ def build_jobs_dashboard():
|
|||||||
|
|
||||||
def build_testing_dashboard():
|
def build_testing_dashboard():
|
||||||
panels = []
|
panels = []
|
||||||
|
suite_var = "${suite}"
|
||||||
|
success = PLATFORM_TEST_SUCCESS_STATUS
|
||||||
|
runs_24h = (
|
||||||
|
f'(sum(increase(platform_quality_gate_runs_total{{suite=~"{suite_var}"}}[24h])) or on() vector(0))'
|
||||||
|
)
|
||||||
|
runs_30d = (
|
||||||
|
f'(sum(increase(platform_quality_gate_runs_total{{suite=~"{suite_var}"}}[30d])) or on() vector(0))'
|
||||||
|
)
|
||||||
|
success_24h = (
|
||||||
|
f'(sum(increase(platform_quality_gate_runs_total{{suite=~"{suite_var}",status=~"{success}"}}[24h])) or on() vector(0))'
|
||||||
|
)
|
||||||
|
success_30d = (
|
||||||
|
f'(sum(increase(platform_quality_gate_runs_total{{suite=~"{suite_var}",status=~"{success}"}}[30d])) or on() vector(0))'
|
||||||
|
)
|
||||||
|
failures_24h = (
|
||||||
|
f'(sum(increase(platform_quality_gate_runs_total{{suite=~"{suite_var}",status!~"{success}"}}[24h])) or on() vector(0))'
|
||||||
|
)
|
||||||
|
success_rate_24h = f"100 * ({success_24h}) / clamp_min(({runs_24h}), 1)"
|
||||||
|
success_rate_30d = f"100 * ({success_30d}) / clamp_min(({runs_30d}), 1)"
|
||||||
|
suite_index_30d = (
|
||||||
|
f'sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{suite_var}"}}[30d]))'
|
||||||
|
)
|
||||||
|
coverage_by_suite = (
|
||||||
|
f'(max by (suite) ({{__name__=~".*_quality_gate_coverage_percent",suite=~"{suite_var}"}})) '
|
||||||
|
f'or on(suite) (max by (suite) (platform_quality_gate_workspace_line_coverage_percent{{suite=~"{suite_var}"}}))'
|
||||||
|
)
|
||||||
|
coverage_with_missing = (
|
||||||
|
f"({coverage_by_suite}) or on(suite) (0 * ({suite_index_30d}) - 1)"
|
||||||
|
)
|
||||||
|
coverage_gap = f"clamp_min(95 - ({coverage_by_suite}), 0)"
|
||||||
|
smell_by_suite = (
|
||||||
|
f'max by (suite) (platform_quality_gate_source_lines_over_500_total{{suite=~"{suite_var}"}})'
|
||||||
|
)
|
||||||
|
smell_with_missing = (
|
||||||
|
f"({smell_by_suite}) or on(suite) (0 * ({suite_index_30d}) - 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))'
|
||||||
|
success_rate_by_suite_24h = (
|
||||||
|
f'sort_desc((100 * (sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{suite_var}",status=~"{success}"}}[24h]))) '
|
||||||
|
f'/ clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{suite_var}"}}[24h]))), 1)) '
|
||||||
|
f'and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{suite_var}"}}[24h]))) > 0))'
|
||||||
|
)
|
||||||
|
success_history_by_suite = (
|
||||||
|
f'(100 * (sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{suite_var}",status=~"{success}"}}[$__interval]))) '
|
||||||
|
f'/ clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{suite_var}"}}[$__interval]))), 1)) '
|
||||||
|
f'and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{suite_var}"}}[$__interval]))) > 0))'
|
||||||
|
)
|
||||||
|
|
||||||
pass_rate_thresholds = {
|
pass_rate_thresholds = {
|
||||||
"mode": "absolute",
|
"mode": "absolute",
|
||||||
"steps": [
|
"steps": [
|
||||||
@ -4032,6 +4130,15 @@ def build_testing_dashboard():
|
|||||||
{"color": "red", "value": 5},
|
{"color": "red", "value": 5},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
coverage_gap_thresholds = {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{"color": "green", "value": None},
|
||||||
|
{"color": "yellow", "value": 1},
|
||||||
|
{"color": "orange", "value": 5},
|
||||||
|
{"color": "red", "value": 10},
|
||||||
|
],
|
||||||
|
}
|
||||||
smell_thresholds = {
|
smell_thresholds = {
|
||||||
"mode": "absolute",
|
"mode": "absolute",
|
||||||
"steps": [
|
"steps": [
|
||||||
@ -4043,49 +4150,97 @@ def build_testing_dashboard():
|
|||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
pass_rate_panel = stat_panel(
|
panels.append(
|
||||||
1,
|
text_panel(
|
||||||
"Platform Test Success Rate (30d)",
|
1,
|
||||||
TEST_SUCCESS_RATE,
|
"Testing Modes",
|
||||||
{"h": 4, "w": 6, "x": 0, "y": 0},
|
(
|
||||||
unit="percent",
|
"### Atlas Testing\n"
|
||||||
decimals=2,
|
"- **Overview mode**: keep `Suite=All` to compare every project.\n"
|
||||||
instant=True,
|
"- **Drilldown mode**: choose one suite to isolate quality checks, failures, and trends.\n"
|
||||||
thresholds=pass_rate_thresholds,
|
"- Goal line: **95% coverage** and **0 files over 500 LOC** for every suite."
|
||||||
|
),
|
||||||
|
{"h": 3, "w": 24, "x": 0, "y": 0},
|
||||||
|
)
|
||||||
)
|
)
|
||||||
pass_rate_panel["description"] = "Overall success rate across tracked suites over the last 30 days."
|
panels.append(
|
||||||
panels.append(pass_rate_panel)
|
stat_panel(
|
||||||
failures_panel = stat_panel(
|
2,
|
||||||
2,
|
"Success Rate (24h)",
|
||||||
"Platform Test Failures (24h)",
|
success_rate_24h,
|
||||||
TEST_FAILURES_24H_TOTAL,
|
{"h": 5, "w": 4, "x": 0, "y": 3},
|
||||||
{"h": 4, "w": 6, "x": 6, "y": 0},
|
unit="percent",
|
||||||
unit="none",
|
decimals=2,
|
||||||
instant=True,
|
instant=True,
|
||||||
thresholds=failures_thresholds,
|
thresholds=pass_rate_thresholds,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
failures_panel["description"] = "Total failed runs in the last 24 hours."
|
panels.append(
|
||||||
panels.append(failures_panel)
|
stat_panel(
|
||||||
activity_panel = table_panel(
|
3,
|
||||||
3,
|
"Success Rate (30d)",
|
||||||
"Platform Test Activity (30d)",
|
success_rate_30d,
|
||||||
PLATFORM_TEST_ACTIVITY_30D,
|
{"h": 5, "w": 4, "x": 4, "y": 3},
|
||||||
{"h": 8, "w": 12, "x": 12, "y": 0},
|
unit="percent",
|
||||||
unit="none",
|
decimals=2,
|
||||||
transformations=[
|
instant=True,
|
||||||
{"id": "labelsToFields", "options": {}},
|
thresholds=pass_rate_thresholds,
|
||||||
{"id": "sortBy", "options": {"fields": ["Value"], "order": "desc"}},
|
)
|
||||||
],
|
)
|
||||||
instant=True,
|
panels.append(
|
||||||
|
stat_panel(
|
||||||
|
4,
|
||||||
|
"Failures (24h)",
|
||||||
|
failures_24h,
|
||||||
|
{"h": 5, "w": 4, "x": 8, "y": 3},
|
||||||
|
unit="none",
|
||||||
|
instant=True,
|
||||||
|
thresholds=failures_thresholds,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
panels.append(
|
||||||
|
stat_panel(
|
||||||
|
5,
|
||||||
|
"Runs (24h)",
|
||||||
|
runs_24h,
|
||||||
|
{"h": 5, "w": 4, "x": 12, "y": 3},
|
||||||
|
unit="none",
|
||||||
|
instant=True,
|
||||||
|
thresholds={
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [{"color": "red", "value": None}, {"color": "green", "value": 1}],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
)
|
||||||
|
panels.append(
|
||||||
|
stat_panel(
|
||||||
|
6,
|
||||||
|
"Avg Coverage (%)",
|
||||||
|
average_coverage,
|
||||||
|
{"h": 5, "w": 4, "x": 16, "y": 3},
|
||||||
|
unit="percent",
|
||||||
|
decimals=2,
|
||||||
|
instant=True,
|
||||||
|
thresholds=pass_rate_thresholds,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
panels.append(
|
||||||
|
stat_panel(
|
||||||
|
7,
|
||||||
|
"Suites with LOC >500",
|
||||||
|
suites_loc_violating,
|
||||||
|
{"h": 5, "w": 4, "x": 20, "y": 3},
|
||||||
|
unit="none",
|
||||||
|
instant=True,
|
||||||
|
thresholds=smell_thresholds,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
activity_panel["description"] = "Suite/status event counts over 30 days."
|
|
||||||
panels.append(activity_panel)
|
|
||||||
panels.append(
|
panels.append(
|
||||||
bargauge_panel(
|
bargauge_panel(
|
||||||
4,
|
8,
|
||||||
"Platform Test Failures by Suite (24h)",
|
"Failures by Suite (24h)",
|
||||||
PLATFORM_TEST_FAILURES_24H_BY_SUITE,
|
f'sum by (suite) (increase(platform_quality_gate_runs_total{{suite=~"{suite_var}",status!~"{success}"}}[24h]))',
|
||||||
{"h": 8, "w": 12, "x": 0, "y": 8},
|
{"h": 8, "w": 8, "x": 0, "y": 8},
|
||||||
unit="none",
|
unit="none",
|
||||||
instant=True,
|
instant=True,
|
||||||
legend="{{suite}}",
|
legend="{{suite}}",
|
||||||
@ -4094,10 +4249,10 @@ def build_testing_dashboard():
|
|||||||
)
|
)
|
||||||
panels.append(
|
panels.append(
|
||||||
bargauge_panel(
|
bargauge_panel(
|
||||||
5,
|
9,
|
||||||
"Platform Test Success Rate by Suite (24h, lowest first)",
|
"Success Rate by Suite (24h)",
|
||||||
PLATFORM_TEST_SUCCESS_RATE_24H_BY_SUITE,
|
success_rate_by_suite_24h,
|
||||||
{"h": 8, "w": 12, "x": 12, "y": 8},
|
{"h": 8, "w": 8, "x": 8, "y": 8},
|
||||||
unit="percent",
|
unit="percent",
|
||||||
instant=True,
|
instant=True,
|
||||||
legend="{{suite}}",
|
legend="{{suite}}",
|
||||||
@ -4106,34 +4261,146 @@ def build_testing_dashboard():
|
|||||||
decimals=2,
|
decimals=2,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
suite_panel = timeseries_panel(
|
coverage_gap_panel = bargauge_panel(
|
||||||
6,
|
10,
|
||||||
"Platform Test Success Rate by Suite",
|
"Coverage Gap to 95% by Suite",
|
||||||
None,
|
coverage_gap,
|
||||||
|
{"h": 8, "w": 8, "x": 16, "y": 8},
|
||||||
|
unit="percent",
|
||||||
|
instant=True,
|
||||||
|
legend="{{suite}}",
|
||||||
|
sort_order="desc",
|
||||||
|
thresholds=coverage_gap_thresholds,
|
||||||
|
decimals=2,
|
||||||
|
)
|
||||||
|
coverage_gap_panel["description"] = "Gap from the 95% target. 0 means the suite is at or above target."
|
||||||
|
panels.append(coverage_gap_panel)
|
||||||
|
history_panel = timeseries_panel(
|
||||||
|
11,
|
||||||
|
"Success History by Suite",
|
||||||
|
success_history_by_suite,
|
||||||
{"h": 8, "w": 24, "x": 0, "y": 16},
|
{"h": 8, "w": 24, "x": 0, "y": 16},
|
||||||
unit="percent",
|
unit="percent",
|
||||||
targets=PLATFORM_TEST_SUCCESS_RATE_SUITE_TARGETS,
|
legend="{{suite}}",
|
||||||
legend_display="list",
|
legend_display="list",
|
||||||
legend_placement="bottom",
|
legend_placement="bottom",
|
||||||
)
|
)
|
||||||
suite_panel["fieldConfig"]["defaults"]["min"] = 0
|
history_panel["fieldConfig"]["defaults"]["min"] = 0
|
||||||
suite_panel["fieldConfig"]["defaults"]["max"] = 100
|
history_panel["fieldConfig"]["defaults"]["max"] = 100
|
||||||
suite_panel["fieldConfig"]["defaults"]["custom"] = {
|
history_panel["fieldConfig"]["defaults"]["custom"] = {
|
||||||
"drawStyle": "line",
|
"drawStyle": "line",
|
||||||
"lineInterpolation": "linear",
|
"lineInterpolation": "linear",
|
||||||
"lineWidth": 2,
|
"lineWidth": 2,
|
||||||
"fillOpacity": 10,
|
"fillOpacity": 8,
|
||||||
"showPoints": "always",
|
"showPoints": "always",
|
||||||
"pointSize": 4,
|
"pointSize": 3,
|
||||||
"spanNulls": True,
|
"spanNulls": True,
|
||||||
}
|
}
|
||||||
suite_panel["description"] = "Trend line per suite. Flat gaps mean no runs in that interval."
|
history_panel["description"] = "Trend per suite. In drilldown mode this becomes the selected suite history."
|
||||||
panels.append(suite_panel)
|
panels.append(history_panel)
|
||||||
|
panels.append(
|
||||||
|
timeseries_panel(
|
||||||
|
12,
|
||||||
|
"Run Outcomes (Selected Scope)",
|
||||||
|
None,
|
||||||
|
{"h": 8, "w": 8, "x": 0, "y": 24},
|
||||||
|
unit="none",
|
||||||
|
targets=[
|
||||||
|
{
|
||||||
|
"refId": "A",
|
||||||
|
"expr": f'sum(increase(platform_quality_gate_runs_total{{suite=~"{suite_var}",status=~"{success}"}}[$__interval])) or on() vector(0)',
|
||||||
|
"legendFormat": "Success",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"refId": "B",
|
||||||
|
"expr": f'sum(increase(platform_quality_gate_runs_total{{suite=~"{suite_var}",status!~"{success}"}}[$__interval])) or on() vector(0)',
|
||||||
|
"legendFormat": "Failure",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"refId": "C",
|
||||||
|
"expr": f'sum(increase(platform_quality_gate_runs_total{{suite=~"{suite_var}"}}[$__interval])) or on() vector(0)',
|
||||||
|
"legendFormat": "Total",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
legend_display="list",
|
||||||
|
legend_placement="bottom",
|
||||||
|
legend_calcs=["lastNotNull", "sum"],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
panels.append(
|
||||||
|
timeseries_panel(
|
||||||
|
13,
|
||||||
|
"Coverage & LOC History (Selected Scope)",
|
||||||
|
None,
|
||||||
|
{"h": 8, "w": 8, "x": 8, "y": 24},
|
||||||
|
unit="none",
|
||||||
|
targets=[
|
||||||
|
{
|
||||||
|
"refId": "A",
|
||||||
|
"expr": f'max_over_time(platform_quality_gate_workspace_line_coverage_percent{{suite=~"{suite_var}"}}[$__interval])',
|
||||||
|
"legendFormat": "{{suite}} coverage %",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"refId": "B",
|
||||||
|
"expr": f'max_over_time(platform_quality_gate_source_lines_over_500_total{{suite=~"{suite_var}"}}[$__interval])',
|
||||||
|
"legendFormat": "{{suite}} files >500 LOC",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
legend_display="list",
|
||||||
|
legend_placement="bottom",
|
||||||
|
legend_calcs=["lastNotNull", "max"],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
panels.append(
|
||||||
|
pie_panel(
|
||||||
|
14,
|
||||||
|
"Run Status Mix (30d)",
|
||||||
|
f'sum by (status) (increase(platform_quality_gate_runs_total{{suite=~"{suite_var}"}}[30d]))',
|
||||||
|
{"h": 8, "w": 8, "x": 16, "y": 24},
|
||||||
|
legend="{{status}}",
|
||||||
|
unit="none",
|
||||||
|
instant=True,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
latest_tests_panel = bargauge_panel(
|
||||||
|
15,
|
||||||
|
"Latest Test Counters (Suite + Result)",
|
||||||
|
f'sum by (suite, result) ({{__name__=~".*_quality_gate_tests_total",suite=~"{suite_var}"}})',
|
||||||
|
{"h": 8, "w": 12, "x": 0, "y": 32},
|
||||||
|
unit="none",
|
||||||
|
instant=True,
|
||||||
|
legend="{{suite}} · {{result}}",
|
||||||
|
sort_order="desc",
|
||||||
|
limit=24,
|
||||||
|
)
|
||||||
|
latest_tests_panel["description"] = (
|
||||||
|
"Latest emitted test counters per suite/result. "
|
||||||
|
"If a suite is missing here, that exporter is not sending *_quality_gate_tests_total."
|
||||||
|
)
|
||||||
|
panels.append(latest_tests_panel)
|
||||||
|
failing_checks_panel = bargauge_panel(
|
||||||
|
16,
|
||||||
|
"Failing Checks (Suite + Check)",
|
||||||
|
(
|
||||||
|
f'sum by (suite, check) '
|
||||||
|
f'({{__name__=~".*_quality_gate_checks_total",suite=~"{suite_var}",result!~"{success}"}})'
|
||||||
|
),
|
||||||
|
{"h": 8, "w": 12, "x": 12, "y": 32},
|
||||||
|
unit="none",
|
||||||
|
instant=True,
|
||||||
|
legend="{{suite}} · {{check}}",
|
||||||
|
sort_order="desc",
|
||||||
|
limit=24,
|
||||||
|
thresholds=failures_thresholds,
|
||||||
|
)
|
||||||
|
failing_checks_panel["description"] = "Top failing checks in the selected scope. Empty is healthy."
|
||||||
|
panels.append(failing_checks_panel)
|
||||||
|
|
||||||
coverage_panel = bargauge_panel(
|
coverage_panel = bargauge_panel(
|
||||||
7,
|
17,
|
||||||
"Quality Gate Coverage by Suite (%, gate 95)",
|
"Coverage by Suite (Latest, gate 95)",
|
||||||
QUALITY_GATE_COVERAGE_BY_SUITE_WITH_MISSING,
|
coverage_with_missing,
|
||||||
{"h": 8, "w": 12, "x": 0, "y": 24},
|
{"h": 8, "w": 12, "x": 0, "y": 40},
|
||||||
unit="percent",
|
unit="percent",
|
||||||
instant=True,
|
instant=True,
|
||||||
legend="{{suite}}",
|
legend="{{suite}}",
|
||||||
@ -4141,63 +4408,23 @@ def build_testing_dashboard():
|
|||||||
thresholds=pass_rate_thresholds,
|
thresholds=pass_rate_thresholds,
|
||||||
decimals=2,
|
decimals=2,
|
||||||
)
|
)
|
||||||
coverage_panel["description"] = (
|
|
||||||
"Latest reported per-suite line coverage. The quality gate target is 95%. "
|
|
||||||
"A value of -1 means that suite has runs but no coverage metric published yet."
|
|
||||||
)
|
|
||||||
coverage_panel["fieldConfig"]["defaults"]["mappings"] = [
|
coverage_panel["fieldConfig"]["defaults"]["mappings"] = [
|
||||||
{
|
{"type": "value", "options": {"-1": {"text": "missing"}}}
|
||||||
"type": "value",
|
|
||||||
"options": {
|
|
||||||
"-1": {"text": "missing"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
panels.append(coverage_panel)
|
panels.append(coverage_panel)
|
||||||
coverage_gap_panel = bargauge_panel(
|
|
||||||
8,
|
|
||||||
"Coverage Gap to 95% by Suite",
|
|
||||||
QUALITY_GATE_COVERAGE_GAP_BY_SUITE,
|
|
||||||
{"h": 8, "w": 12, "x": 12, "y": 24},
|
|
||||||
unit="percent",
|
|
||||||
instant=True,
|
|
||||||
legend="{{suite}}",
|
|
||||||
sort_order="desc",
|
|
||||||
thresholds={
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [
|
|
||||||
{"color": "green", "value": None},
|
|
||||||
{"color": "yellow", "value": 1},
|
|
||||||
{"color": "orange", "value": 5},
|
|
||||||
{"color": "red", "value": 10},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
decimals=2,
|
|
||||||
)
|
|
||||||
coverage_gap_panel["description"] = "How far each suite is below the 95% target (0 means at or above target)."
|
|
||||||
panels.append(coverage_gap_panel)
|
|
||||||
smell_panel = bargauge_panel(
|
smell_panel = bargauge_panel(
|
||||||
9,
|
18,
|
||||||
"Code Smell Infractions by Suite (files >500 LOC)",
|
"Files >500 LOC by Suite (Latest)",
|
||||||
QUALITY_GATE_SMELL_INFRACTIONS_BY_SUITE_WITH_MISSING,
|
smell_with_missing,
|
||||||
{"h": 8, "w": 24, "x": 0, "y": 32},
|
{"h": 8, "w": 12, "x": 12, "y": 40},
|
||||||
unit="none",
|
unit="none",
|
||||||
instant=True,
|
instant=True,
|
||||||
legend="{{suite}}",
|
legend="{{suite}}",
|
||||||
sort_order="desc",
|
sort_order="desc",
|
||||||
thresholds=smell_thresholds,
|
thresholds=smell_thresholds,
|
||||||
)
|
)
|
||||||
smell_panel["description"] = (
|
|
||||||
"Per-suite count of files violating the 500-line hygiene/code-smell threshold. "
|
|
||||||
"A value of -1 means that suite has runs but no smell-infraction metric published yet."
|
|
||||||
)
|
|
||||||
smell_panel["fieldConfig"]["defaults"]["mappings"] = [
|
smell_panel["fieldConfig"]["defaults"]["mappings"] = [
|
||||||
{
|
{"type": "value", "options": {"-1": {"text": "missing"}}}
|
||||||
"type": "value",
|
|
||||||
"options": {
|
|
||||||
"-1": {"text": "missing"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
panels.append(smell_panel)
|
panels.append(smell_panel)
|
||||||
|
|
||||||
@ -4212,6 +4439,7 @@ def build_testing_dashboard():
|
|||||||
"schemaVersion": 39,
|
"schemaVersion": 39,
|
||||||
"style": "dark",
|
"style": "dark",
|
||||||
"tags": ["atlas", "testing", "quality"],
|
"tags": ["atlas", "testing", "quality"],
|
||||||
|
"templating": {"list": [testing_suite_variable()]},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2196,57 +2196,57 @@
|
|||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"refId": "A",
|
"refId": "A",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"ariadne\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"ariadne\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"ariadne\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "ariadne"
|
"legendFormat": "ariadne"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "B",
|
"refId": "B",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"metis\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"metis\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"metis\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"metis\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"metis\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"metis\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "metis"
|
"legendFormat": "metis"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "C",
|
"refId": "C",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"ananke\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"ananke\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"ananke\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "ananke"
|
"legendFormat": "ananke"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "D",
|
"refId": "D",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "atlasbot"
|
"legendFormat": "atlasbot"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "E",
|
"refId": "E",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "lesavka"
|
"legendFormat": "lesavka"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "F",
|
"refId": "F",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "pegasus"
|
"legendFormat": "pegasus"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "G",
|
"refId": "G",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"soteria\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"soteria\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"soteria\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "soteria"
|
"legendFormat": "soteria"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "H",
|
"refId": "H",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "titan-iac"
|
"legendFormat": "titan-iac"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "I",
|
"refId": "I",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "bstein-home"
|
"legendFormat": "bstein-home"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "J",
|
"refId": "J",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "arcanagon"
|
"legendFormat": "arcanagon"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "K",
|
"refId": "K",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"data-prepper\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"data-prepper\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"data-prepper\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "data-prepper"
|
"legendFormat": "data-prepper"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -2205,57 +2205,57 @@ data:
|
|||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"refId": "A",
|
"refId": "A",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"ariadne\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"ariadne\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"ariadne\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "ariadne"
|
"legendFormat": "ariadne"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "B",
|
"refId": "B",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"metis\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"metis\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"metis\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"metis\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"metis\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"metis\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "metis"
|
"legendFormat": "metis"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "C",
|
"refId": "C",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"ananke\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"ananke\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"ananke\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "ananke"
|
"legendFormat": "ananke"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "D",
|
"refId": "D",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"atlasbot\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "atlasbot"
|
"legendFormat": "atlasbot"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "E",
|
"refId": "E",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"lesavka\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "lesavka"
|
"legendFormat": "lesavka"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "F",
|
"refId": "F",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"pegasus\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "pegasus"
|
"legendFormat": "pegasus"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "G",
|
"refId": "G",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"soteria\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"soteria\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"soteria\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "soteria"
|
"legendFormat": "soteria"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "H",
|
"refId": "H",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"titan-iac\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "titan-iac"
|
"legendFormat": "titan-iac"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "I",
|
"refId": "I",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"bstein-home\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "bstein-home"
|
"legendFormat": "bstein-home"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "J",
|
"refId": "J",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"arcanagon\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "arcanagon"
|
"legendFormat": "arcanagon"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"refId": "K",
|
"refId": "K",
|
||||||
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=\"data-prepper\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=\"data-prepper\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=\"data-prepper\"}[1h]))) > 0) or on() vector(0)",
|
"expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\"}[1h]))) > 0) or on() vector(0)",
|
||||||
"legendFormat": "data-prepper"
|
"legendFormat": "data-prepper"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user