monitoring: refine overview and failure colors

This commit is contained in:
jenkins 2026-05-15 22:43:44 -03:00
parent f0520d652a
commit b4229c5a8f
12 changed files with 578 additions and 423 deletions

View File

@ -489,8 +489,8 @@ ARIADNE_TASK_RUNS_BY_STATUS_1H = 'sum by (status) (increase(ariadne_task_runs_to
ARIADNE_TASK_ERRORS_1H_TOTAL = 'sum(increase(ariadne_task_runs_total{status="error"}[1h]))'
ARIADNE_TASK_ERRORS_24H_TOTAL = 'sum(increase(ariadne_task_runs_total{status="error"}[24h]))'
ARIADNE_TASK_RUNS_1H_TOTAL = 'sum(increase(ariadne_task_runs_total[1h]))'
ARIADNE_TASK_ATTEMPTS_SERIES = 'sum(increase(ariadne_task_runs_total[$__interval]))'
ARIADNE_TASK_FAILURES_SERIES = 'sum(increase(ariadne_task_runs_total{status="error"}[$__interval]))'
ARIADNE_TASK_ATTEMPTS_SERIES = 'sum(increase(ariadne_task_runs_total[5m]))'
ARIADNE_TASK_FAILURES_SERIES = 'sum(increase(ariadne_task_runs_total{status="error"}[5m]))'
ARIADNE_TASK_WARNINGS_SERIES = (
'sum(increase(ariadne_task_runs_total{status!~"ok|error"}[$__interval])) or on() vector(0)'
)
@ -683,6 +683,10 @@ GITOPS_HELM_TOTAL_COUNT = (
GITOPS_HELM_SUSPENDED = (
f"sum(max by (namespace, name) (ananke_gitops_helmrelease_suspended{{{GITOPS_SELECTOR}}})) or on() vector(0)"
)
GITOPS_NOT_SUSPENDED_PCT = (
f"100 * (1 - (({GITOPS_KUSTOMIZATION_SUSPENDED}) + ({GITOPS_HELM_SUSPENDED})) "
f"/ clamp_min(({GITOPS_KUSTOMIZATION_TOTAL_COUNT}) + ({GITOPS_HELM_TOTAL_COUNT}), 1))"
)
GITOPS_SCRAPE_SUCCESS = f"min(ananke_gitops_scrape_success{{{GITOPS_SELECTOR}}}) or on() vector(0)"
GITOPS_LAST_SCRAPE_AGE = (
f"(time() - max(ananke_gitops_last_scrape_timestamp_seconds{{{GITOPS_SELECTOR}}})) or on() vector(0)"
@ -1082,6 +1086,8 @@ def apply_bar_timeseries_style(panel, *, stacked=False, fill_opacity=70):
"barAlignment": 0,
"lineWidth": 0,
"fillOpacity": fill_opacity,
"gradientMode": "none",
"showPoints": "never",
"spanNulls": True,
}
if stacked:
@ -1089,6 +1095,17 @@ def apply_bar_timeseries_style(panel, *, stacked=False, fill_opacity=70):
return panel
def fixed_color_overrides(series_colors):
"""Return fixed-color overrides keyed by exact series name."""
return [
{
"matcher": {"id": "byName", "options": series_name},
"properties": [{"id": "color", "value": {"mode": "fixed", "fixedColor": color}}],
}
for series_name, color in series_colors.items()
]
def table_panel(
panel_id,
title,
@ -1377,6 +1394,7 @@ def bargauge_panel(
overrides=None,
data_links=None,
include_color=True,
description=None,
):
"""Return a bar gauge panel with label-aware reduction."""
cleaned_expr = expr.strip()
@ -1424,7 +1442,7 @@ def bargauge_panel(
"overrides": [],
},
"options": {
"displayMode": "gradient",
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": ["lastNotNull"],
@ -1439,6 +1457,8 @@ def bargauge_panel(
panel["fieldConfig"]["defaults"]["decimals"] = decimals
if links:
panel["links"] = links
if description:
panel["description"] = description
if data_links:
panel["fieldConfig"]["defaults"]["links"] = data_links
# Keep bars ordered by value descending for readability.
@ -1783,14 +1803,19 @@ def build_overview():
{"color": "green", "value": 98},
],
}
dark_red = "dark-red"
dark_orange = "dark-orange"
dark_yellow = "dark-yellow"
dark_green = "dark-green"
dark_blue = "dark-blue"
test_success_thresholds = {
"mode": "absolute",
"steps": [
{"color": "red", "value": None},
{"color": "orange", "value": 90},
{"color": "yellow", "value": 93},
{"color": "green", "value": 95},
{"color": "blue", "value": 100},
{"color": dark_red, "value": None},
{"color": dark_orange, "value": 70},
{"color": dark_yellow, "value": 85},
{"color": dark_green, "value": 95},
{"color": dark_blue, "value": 100},
],
}
ups_text = {"titleSize": 14, "valueSize": 30}
@ -1834,6 +1859,9 @@ def build_overview():
{"refId": "A", "expr": ANANKE_UPS_DRAW_WATTS_DB_SERIES, "legendFormat": ANANKE_UPS_DB_NAME},
{"refId": "B", "expr": ANANKE_UPS_DRAW_WATTS_TETHYS_SERIES, "legendFormat": ANANKE_UPS_TETHYS_NAME},
],
field_overrides=fixed_color_overrides(
{ANANKE_UPS_DB_NAME: dark_blue, ANANKE_UPS_TETHYS_NAME: dark_yellow}
),
legend_display="table",
legend_placement="right",
links=overview_link("atlas-power"),
@ -2016,69 +2044,52 @@ def build_overview():
links=overview_link("atlas-power"),
)
)
panels.append(
table_panel(
140,
"Flux Source",
f"{GITOPS_SOURCE_INFO} or on() vector(0)",
{"h": 2, "w": 6, "x": 18, "y": 13},
instant=True,
format="table",
transformations=[
{"id": "labelsToFields", "options": {}},
{
"id": "organize",
"options": {
"excludeByName": {
"Time": True,
"Value": True,
"namespace": True,
"name": True,
}
},
},
],
options={"showColumnFilters": False},
filterable=False,
footer={"show": False, "fields": "", "calcs": []},
links=overview_link("atlas-gitops"),
description="Flux GitRepository branch and revision reported by Ananke. Value is hidden here on purpose.",
)
)
gitops_counts = stat_panel(
150,
"GitOps Counts",
flux_source = stat_panel(
140,
"Flux Source",
None,
{"h": 2, "w": 6, "x": 18, "y": 15},
{"h": 2, "w": 6, "x": 18, "y": 13},
unit="none",
text_mode="name_and_value",
decimals=0,
text_mode="name",
thresholds={
"mode": "absolute",
"steps": [
{"color": dark_red, "value": None},
{"color": dark_blue, "value": 1},
],
},
targets=[
{"expr": GITOPS_KUSTOMIZATION_READY_COUNT, "refId": "A", "legendFormat": "K Ready", "instant": True},
{"expr": GITOPS_KUSTOMIZATION_TOTAL_COUNT, "refId": "B", "legendFormat": "K Total", "instant": True},
{"expr": GITOPS_KUSTOMIZATION_SUSPENDED, "refId": "C", "legendFormat": "K Susp", "instant": True},
{"expr": GITOPS_HELM_READY_COUNT, "refId": "D", "legendFormat": "H Ready", "instant": True},
{"expr": GITOPS_HELM_TOTAL_COUNT, "refId": "E", "legendFormat": "H Total", "instant": True},
{"expr": GITOPS_HELM_SUSPENDED, "refId": "F", "legendFormat": "H Susp", "instant": True},
{
"expr": f"{GITOPS_SOURCE_INFO} or on() vector(0)",
"refId": "A",
"legendFormat": "{{branch}} @ {{revision}}",
"instant": True,
}
],
links=overview_link("atlas-gitops"),
description="K = Kustomizations, H = HelmReleases. Ready and total are shown as counts; suspended should stay zero.",
description="Flux GitRepository branch and revision reported by Ananke. Full object detail lives in Atlas GitOps.",
)
gitops_counts["options"]["text"] = {"titleSize": 11, "valueSize": 18}
panels.append(gitops_counts)
flux_source["options"]["graphMode"] = "none"
flux_source["options"]["text"] = {"titleSize": 13, "valueSize": 18}
panels.append(flux_source)
panels.append(
state_timeline_panel(
151,
"GitOps Ready History",
bargauge_panel(
150,
"GitOps Health",
(
f'label_replace({GITOPS_KUSTOMIZATION_READY_PCT}, "kind", "Kustomizations", "__name__", ".*") '
f'or label_replace({GITOPS_HELM_READY_PCT}, "kind", "HelmReleases", "__name__", ".*")'
f'label_replace({GITOPS_KUSTOMIZATION_READY_PCT}, "signal", "Kustomizations Ready", "__name__", ".*") '
f'or label_replace({GITOPS_HELM_READY_PCT}, "signal", "HelmReleases Ready", "__name__", ".*") '
f'or label_replace({GITOPS_NOT_SUSPENDED_PCT}, "signal", "Objects Not Suspended", "__name__", ".*")'
),
{"h": 2, "w": 6, "x": 18, "y": 17},
{"h": 4, "w": 6, "x": 18, "y": 15},
unit="percent",
instant=True,
legend="{{signal}}",
sort_order="asc",
thresholds=test_success_thresholds,
legend="{{kind}}",
decimals=0,
links=overview_link("atlas-gitops"),
description="Compact readiness history. Full object tables live in Atlas GitOps.",
description="Compact GitOps health: readiness percentages plus percent of Flux objects not suspended.",
)
)
@ -2112,21 +2123,14 @@ def build_overview():
legend_placement="right",
links=overview_link("atlas-jobs"),
)
ariadne_volume["fieldConfig"]["overrides"] = [
{
"matcher": {"id": "byName", "options": "Attempts"},
"properties": [{"id": "color", "value": {"mode": "fixed", "fixedColor": "green"}}],
},
{
"matcher": {"id": "byName", "options": "Failures"},
"properties": [{"id": "color", "value": {"mode": "fixed", "fixedColor": "red"}}],
},
]
ariadne_volume["fieldConfig"]["overrides"] = fixed_color_overrides(
{"Attempts": dark_blue, "Failures": dark_red}
)
panels.append(apply_bar_timeseries_style(ariadne_volume, stacked=False))
panels.append(
bargauge_panel(
46,
"Platform Gate Health by Suite",
"Gate Checks Passing by Suite",
PLATFORM_TEST_CURRENT_GATE_HEALTH_BY_SUITE,
{"h": 6, "w": 6, "x": 18, "y": 7},
unit="percent",
@ -2134,13 +2138,12 @@ def build_overview():
legend="{{suite}}",
sort_order="asc",
thresholds=test_success_thresholds,
decimals=1,
decimals=0,
links=overview_link("atlas-testing"),
)
)
panels[-1]["description"] = (
"Latest quality-gate health by suite. This mirrors the testing dashboard's current gate health "
"instead of plotting sparse per-run success spikes."
"Percent of current gate dimensions passing per suite. There are seven gate dimensions, so 85.7% means one gate is failing."
)
for panel_id, title, metric, x_pos, description in [
(
@ -3679,7 +3682,8 @@ def build_jobs_dashboard():
failures_thresholds = {
"mode": "absolute",
"steps": [
{"color": dark_green, "value": None},
{"color": dark_blue, "value": None},
{"color": dark_green, "value": 0.01},
{"color": dark_yellow, "value": 1},
{"color": dark_orange, "value": 3},
{"color": dark_red, "value": 5},
@ -4623,6 +4627,9 @@ def build_power_dashboard():
{"refId": "A", "expr": ANANKE_UPS_DRAW_WATTS_DB_SERIES, "legendFormat": ANANKE_UPS_DB_NAME},
{"refId": "B", "expr": ANANKE_UPS_DRAW_WATTS_TETHYS_SERIES, "legendFormat": ANANKE_UPS_TETHYS_NAME},
],
field_overrides=fixed_color_overrides(
{ANANKE_UPS_DB_NAME: "dark-blue", ANANKE_UPS_TETHYS_NAME: "dark-yellow"}
),
legend_display="table",
legend_placement="right",
description="Historical UPS power consumption in watts for titan-db and tethys.",

View File

@ -68,13 +68,14 @@ def test_overview_uses_readable_quality_power_and_gitops_panels():
panels_by_title = {panel["title"]: panel for panel in flatten_panels(dashboard["panels"])}
assert "Platform Test Success Rate" not in panels_by_title
assert panels_by_title["Platform Gate Health by Suite"]["type"] == "bargauge"
assert panels_by_title["Gate Checks Passing by Suite"]["type"] == "bargauge"
assert panels_by_title["Gate Checks Passing by Suite"]["options"]["displayMode"] == "basic"
assert panels_by_title["UPS History (Power Draw)"]["fieldConfig"]["defaults"]["custom"]["drawStyle"] == "bars"
assert panels_by_title["Ariadne Run Volume"]["fieldConfig"]["defaults"]["custom"]["drawStyle"] == "bars"
assert panels_by_title["Flux Source"]["type"] == "table"
assert panels_by_title["GitOps Counts"]["type"] == "stat"
assert panels_by_title["GitOps Ready History"]["type"] == "state-timeline"
assert panels_by_title["Flux Source"]["type"] == "stat"
assert panels_by_title["GitOps Health"]["type"] == "bargauge"
assert panels_by_title["GitOps Health"]["gridPos"]["h"] == 4
def test_render_configmap_writes(tmp_path):
@ -211,6 +212,7 @@ def test_jobs_dashboard_collapses_heavy_drilldowns_for_light_first_paint():
assert failure_rate_panel["type"] == "state-timeline"
assert failure_rate_panel["fieldConfig"]["defaults"]["unit"] == "percent"
assert failure_rate_panel["fieldConfig"]["defaults"]["max"] == 100
assert failure_rate_panel["fieldConfig"]["defaults"]["thresholds"]["steps"][0]["color"] == "dark-blue"
assert "increase(" not in failure_rate_panel["targets"][0]["expr"]
assert "0 *" in failure_rate_panel["targets"][0]["expr"]

View File

@ -183,9 +183,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1130,9 +1134,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1202,9 +1210,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1274,9 +1286,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1346,9 +1362,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1418,9 +1438,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1490,9 +1514,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1562,9 +1590,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -2194,9 +2226,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -2376,9 +2412,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -3845,9 +3885,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -3914,9 +3958,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1

View File

@ -1302,10 +1302,43 @@
"barAlignment": 0,
"lineWidth": 0,
"fillOpacity": 70,
"gradientMode": "none",
"showPoints": "never",
"spanNulls": true
}
},
"overrides": []
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Pyrphoros"
},
"properties": [
{
"id": "color",
"value": {
"mode": "fixed",
"fixedColor": "dark-blue"
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "Statera"
},
"properties": [
{
"id": "color",
"value": {
"mode": "fixed",
"fixedColor": "dark-yellow"
}
}
]
}
]
},
"options": {
"legend": {
@ -1889,7 +1922,7 @@
},
{
"id": 140,
"type": "table",
"type": "stat",
"title": "Flux Source",
"datasource": {
"type": "prometheus",
@ -1905,104 +1938,7 @@
{
"expr": "max by (branch, revision) (ananke_gitops_flux_source_info{job=\"ananke-power\",namespace=\"flux-system\",name=\"flux-system\"}) or on() vector(0)",
"refId": "A",
"instant": true,
"format": "table"
}
],
"fieldConfig": {
"defaults": {
"unit": "none",
"custom": {
"filterable": false
}
},
"overrides": []
},
"options": {
"showHeader": true,
"columnFilters": false,
"showColumnFilters": false,
"footer": {
"show": false,
"fields": "",
"calcs": []
}
},
"transformations": [
{
"id": "labelsToFields",
"options": {}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Time": true,
"Value": true,
"namespace": true,
"name": true
}
}
}
],
"description": "Flux GitRepository branch and revision reported by Ananke. Value is hidden here on purpose.",
"links": [
{
"title": "Open atlas-gitops dashboard",
"url": "/d/atlas-gitops",
"targetBlank": true
}
]
},
{
"id": 150,
"type": "stat",
"title": "GitOps Counts",
"datasource": {
"type": "prometheus",
"uid": "atlas-vm"
},
"gridPos": {
"h": 2,
"w": 6,
"x": 18,
"y": 15
},
"targets": [
{
"expr": "sum(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) or on() vector(0)",
"refId": "A",
"legendFormat": "K Ready",
"instant": true
},
{
"expr": "count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) or on() vector(0)",
"refId": "B",
"legendFormat": "K Total",
"instant": true
},
{
"expr": "sum(max by (namespace, name) (ananke_gitops_kustomization_suspended{job=\"ananke-power\"})) or on() vector(0)",
"refId": "C",
"legendFormat": "K Susp",
"instant": true
},
{
"expr": "sum(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) or on() vector(0)",
"refId": "D",
"legendFormat": "H Ready",
"instant": true
},
{
"expr": "count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) or on() vector(0)",
"refId": "E",
"legendFormat": "H Total",
"instant": true
},
{
"expr": "sum(max by (namespace, name) (ananke_gitops_helmrelease_suspended{job=\"ananke-power\"})) or on() vector(0)",
"refId": "F",
"legendFormat": "H Susp",
"legendFormat": "{{branch}} @ {{revision}}",
"instant": true
}
],
@ -2016,11 +1952,11 @@
"mode": "absolute",
"steps": [
{
"color": "rgba(115, 115, 115, 1)",
"color": "dark-red",
"value": null
},
{
"color": "dark-green",
"color": "dark-blue",
"value": 1
}
]
@ -2028,14 +1964,13 @@
"unit": "none",
"custom": {
"displayMode": "auto"
},
"decimals": 0
}
},
"overrides": []
},
"options": {
"colorMode": "value",
"graphMode": "area",
"graphMode": "none",
"justifyMode": "center",
"reduceOptions": {
"calcs": [
@ -2044,9 +1979,9 @@
"fields": "",
"values": false
},
"textMode": "name_and_value",
"textMode": "name",
"text": {
"titleSize": 11,
"titleSize": 13,
"valueSize": 18
}
},
@ -2057,28 +1992,28 @@
"targetBlank": true
}
],
"description": "K = Kustomizations, H = HelmReleases. Ready and total are shown as counts; suspended should stay zero."
"description": "Flux GitRepository branch and revision reported by Ananke. Full object detail lives in Atlas GitOps."
},
{
"id": 151,
"type": "state-timeline",
"title": "GitOps Ready History",
"description": "Compact readiness history. Full object tables live in Atlas GitOps.",
"id": 150,
"type": "bargauge",
"title": "GitOps Health",
"datasource": {
"type": "prometheus",
"uid": "atlas-vm"
},
"gridPos": {
"h": 2,
"h": 4,
"w": 6,
"x": 18,
"y": 17
"y": 15
},
"targets": [
{
"expr": "label_replace(100 * sum(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})), 1), \"kind\", \"Kustomizations\", \"__name__\", \".*\") or label_replace(100 * sum(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})), 1), \"kind\", \"HelmReleases\", \"__name__\", \".*\")",
"expr": "sort(label_replace(100 * sum(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})), 1), \"signal\", \"Kustomizations Ready\", \"__name__\", \".*\") or label_replace(100 * sum(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})), 1), \"signal\", \"HelmReleases Ready\", \"__name__\", \".*\") or label_replace(100 * (1 - ((sum(max by (namespace, name) (ananke_gitops_kustomization_suspended{job=\"ananke-power\"})) or on() vector(0)) + (sum(max by (namespace, name) (ananke_gitops_helmrelease_suspended{job=\"ananke-power\"})) or on() vector(0))) / clamp_min((count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) or on() vector(0)) + (count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) or on() vector(0)), 1)), \"signal\", \"Objects Not Suspended\", \"__name__\", \".*\"))",
"refId": "A",
"legendFormat": "{{kind}}"
"legendFormat": "{{signal}}",
"instant": true
}
],
"fieldConfig": {
@ -2087,6 +2022,8 @@
"mode": "thresholds"
},
"unit": "percent",
"min": 0,
"max": 100,
"thresholds": {
"mode": "absolute",
"steps": [
@ -2096,11 +2033,11 @@
},
{
"color": "dark-orange",
"value": 90
"value": 70
},
{
"color": "dark-yellow",
"value": 93
"value": 85
},
{
"color": "dark-green",
@ -2112,26 +2049,19 @@
}
]
},
"custom": {
"fillOpacity": 70,
"lineWidth": 0,
"spanNulls": true
},
"min": 0,
"max": 100
"decimals": 0
},
"overrides": []
},
"options": {
"mergeValues": true,
"showValue": "never",
"legend": {
"displayMode": "list",
"placement": "bottom"
},
"tooltip": {
"mode": "single",
"sort": "none"
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
}
},
"links": [
@ -2140,6 +2070,18 @@
"url": "/d/atlas-gitops",
"targetBlank": true
}
],
"description": "Compact GitOps health: readiness percentages plus percent of Flux objects not suspended.",
"transformations": [
{
"id": "sortBy",
"options": {
"fields": [
"Value"
],
"order": "asc"
}
}
]
},
{
@ -2195,7 +2137,7 @@
"overrides": []
},
"options": {
"displayMode": "gradient",
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
@ -2246,12 +2188,12 @@
},
"targets": [
{
"expr": "sum(increase(ariadne_task_runs_total[$__interval])) or on() vector(0)",
"expr": "sum(increase(ariadne_task_runs_total[5m])) or on() vector(0)",
"refId": "A",
"legendFormat": "Attempts"
},
{
"expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[$__interval])) or on() vector(0)",
"expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[5m])) or on() vector(0)",
"refId": "B",
"legendFormat": "Failures"
}
@ -2264,6 +2206,8 @@
"barAlignment": 0,
"lineWidth": 0,
"fillOpacity": 70,
"gradientMode": "none",
"showPoints": "never",
"spanNulls": true
}
},
@ -2278,7 +2222,7 @@
"id": "color",
"value": {
"mode": "fixed",
"fixedColor": "dark-green"
"fixedColor": "dark-blue"
}
}
]
@ -2320,7 +2264,7 @@
{
"id": 46,
"type": "bargauge",
"title": "Platform Gate Health by Suite",
"title": "Gate Checks Passing by Suite",
"datasource": {
"type": "prometheus",
"uid": "atlas-vm"
@ -2356,11 +2300,11 @@
},
{
"color": "dark-orange",
"value": 90
"value": 70
},
{
"color": "dark-yellow",
"value": 93
"value": 85
},
{
"color": "dark-green",
@ -2372,12 +2316,12 @@
}
]
},
"decimals": 1
"decimals": 0
},
"overrides": []
},
"options": {
"displayMode": "gradient",
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
@ -2405,7 +2349,7 @@
}
}
],
"description": "Latest quality-gate health by suite. This mirrors the testing dashboard's current gate health instead of plotting sparse per-run success spikes."
"description": "Percent of current gate dimensions passing per suite. There are seven gate dimensions, so 85.7% means one gate is failing."
},
{
"id": 142,
@ -2673,7 +2617,7 @@
"overrides": []
},
"options": {
"displayMode": "gradient",
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
@ -3632,7 +3576,7 @@
"overrides": []
},
"options": {
"displayMode": "gradient",
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [

View File

@ -479,7 +479,7 @@
"overrides": []
},
"options": {
"displayMode": "gradient",
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [

View File

@ -255,10 +255,43 @@
"barAlignment": 0,
"lineWidth": 0,
"fillOpacity": 70,
"gradientMode": "none",
"showPoints": "never",
"spanNulls": true
}
},
"overrides": []
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Pyrphoros"
},
"properties": [
{
"id": "color",
"value": {
"mode": "fixed",
"fixedColor": "dark-blue"
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "Statera"
},
"properties": [
{
"id": "color",
"value": {
"mode": "fixed",
"fixedColor": "dark-yellow"
}
}
]
}
]
},
"options": {
"legend": {

View File

@ -183,9 +183,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1130,9 +1134,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1202,9 +1210,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1274,9 +1286,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1346,9 +1362,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1418,9 +1438,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1490,9 +1514,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1562,9 +1590,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -2194,9 +2226,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -2376,9 +2412,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -3845,9 +3885,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -3914,9 +3958,13 @@
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1

View File

@ -192,9 +192,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1139,9 +1143,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1211,9 +1219,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1283,9 +1295,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1355,9 +1371,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1427,9 +1447,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1499,9 +1523,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1571,9 +1599,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -2203,9 +2235,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -2385,9 +2421,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -3854,9 +3894,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -3923,9 +3967,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1

View File

@ -1311,10 +1311,43 @@ data:
"barAlignment": 0,
"lineWidth": 0,
"fillOpacity": 70,
"gradientMode": "none",
"showPoints": "never",
"spanNulls": true
}
},
"overrides": []
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Pyrphoros"
},
"properties": [
{
"id": "color",
"value": {
"mode": "fixed",
"fixedColor": "dark-blue"
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "Statera"
},
"properties": [
{
"id": "color",
"value": {
"mode": "fixed",
"fixedColor": "dark-yellow"
}
}
]
}
]
},
"options": {
"legend": {
@ -1898,7 +1931,7 @@ data:
},
{
"id": 140,
"type": "table",
"type": "stat",
"title": "Flux Source",
"datasource": {
"type": "prometheus",
@ -1914,104 +1947,7 @@ data:
{
"expr": "max by (branch, revision) (ananke_gitops_flux_source_info{job=\"ananke-power\",namespace=\"flux-system\",name=\"flux-system\"}) or on() vector(0)",
"refId": "A",
"instant": true,
"format": "table"
}
],
"fieldConfig": {
"defaults": {
"unit": "none",
"custom": {
"filterable": false
}
},
"overrides": []
},
"options": {
"showHeader": true,
"columnFilters": false,
"showColumnFilters": false,
"footer": {
"show": false,
"fields": "",
"calcs": []
}
},
"transformations": [
{
"id": "labelsToFields",
"options": {}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Time": true,
"Value": true,
"namespace": true,
"name": true
}
}
}
],
"description": "Flux GitRepository branch and revision reported by Ananke. Value is hidden here on purpose.",
"links": [
{
"title": "Open atlas-gitops dashboard",
"url": "/d/atlas-gitops",
"targetBlank": true
}
]
},
{
"id": 150,
"type": "stat",
"title": "GitOps Counts",
"datasource": {
"type": "prometheus",
"uid": "atlas-vm"
},
"gridPos": {
"h": 2,
"w": 6,
"x": 18,
"y": 15
},
"targets": [
{
"expr": "sum(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) or on() vector(0)",
"refId": "A",
"legendFormat": "K Ready",
"instant": true
},
{
"expr": "count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) or on() vector(0)",
"refId": "B",
"legendFormat": "K Total",
"instant": true
},
{
"expr": "sum(max by (namespace, name) (ananke_gitops_kustomization_suspended{job=\"ananke-power\"})) or on() vector(0)",
"refId": "C",
"legendFormat": "K Susp",
"instant": true
},
{
"expr": "sum(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) or on() vector(0)",
"refId": "D",
"legendFormat": "H Ready",
"instant": true
},
{
"expr": "count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) or on() vector(0)",
"refId": "E",
"legendFormat": "H Total",
"instant": true
},
{
"expr": "sum(max by (namespace, name) (ananke_gitops_helmrelease_suspended{job=\"ananke-power\"})) or on() vector(0)",
"refId": "F",
"legendFormat": "H Susp",
"legendFormat": "{{branch}} @ {{revision}}",
"instant": true
}
],
@ -2025,11 +1961,11 @@ data:
"mode": "absolute",
"steps": [
{
"color": "rgba(115, 115, 115, 1)",
"color": "dark-red",
"value": null
},
{
"color": "dark-green",
"color": "dark-blue",
"value": 1
}
]
@ -2037,14 +1973,13 @@ data:
"unit": "none",
"custom": {
"displayMode": "auto"
},
"decimals": 0
}
},
"overrides": []
},
"options": {
"colorMode": "value",
"graphMode": "area",
"graphMode": "none",
"justifyMode": "center",
"reduceOptions": {
"calcs": [
@ -2053,9 +1988,9 @@ data:
"fields": "",
"values": false
},
"textMode": "name_and_value",
"textMode": "name",
"text": {
"titleSize": 11,
"titleSize": 13,
"valueSize": 18
}
},
@ -2066,28 +2001,28 @@ data:
"targetBlank": true
}
],
"description": "K = Kustomizations, H = HelmReleases. Ready and total are shown as counts; suspended should stay zero."
"description": "Flux GitRepository branch and revision reported by Ananke. Full object detail lives in Atlas GitOps."
},
{
"id": 151,
"type": "state-timeline",
"title": "GitOps Ready History",
"description": "Compact readiness history. Full object tables live in Atlas GitOps.",
"id": 150,
"type": "bargauge",
"title": "GitOps Health",
"datasource": {
"type": "prometheus",
"uid": "atlas-vm"
},
"gridPos": {
"h": 2,
"h": 4,
"w": 6,
"x": 18,
"y": 17
"y": 15
},
"targets": [
{
"expr": "label_replace(100 * sum(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})), 1), \"kind\", \"Kustomizations\", \"__name__\", \".*\") or label_replace(100 * sum(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})), 1), \"kind\", \"HelmReleases\", \"__name__\", \".*\")",
"expr": "sort(label_replace(100 * sum(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})), 1), \"signal\", \"Kustomizations Ready\", \"__name__\", \".*\") or label_replace(100 * sum(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})), 1), \"signal\", \"HelmReleases Ready\", \"__name__\", \".*\") or label_replace(100 * (1 - ((sum(max by (namespace, name) (ananke_gitops_kustomization_suspended{job=\"ananke-power\"})) or on() vector(0)) + (sum(max by (namespace, name) (ananke_gitops_helmrelease_suspended{job=\"ananke-power\"})) or on() vector(0))) / clamp_min((count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) or on() vector(0)) + (count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) or on() vector(0)), 1)), \"signal\", \"Objects Not Suspended\", \"__name__\", \".*\"))",
"refId": "A",
"legendFormat": "{{kind}}"
"legendFormat": "{{signal}}",
"instant": true
}
],
"fieldConfig": {
@ -2096,6 +2031,8 @@ data:
"mode": "thresholds"
},
"unit": "percent",
"min": 0,
"max": 100,
"thresholds": {
"mode": "absolute",
"steps": [
@ -2105,11 +2042,11 @@ data:
},
{
"color": "dark-orange",
"value": 90
"value": 70
},
{
"color": "dark-yellow",
"value": 93
"value": 85
},
{
"color": "dark-green",
@ -2121,26 +2058,19 @@ data:
}
]
},
"custom": {
"fillOpacity": 70,
"lineWidth": 0,
"spanNulls": true
},
"min": 0,
"max": 100
"decimals": 0
},
"overrides": []
},
"options": {
"mergeValues": true,
"showValue": "never",
"legend": {
"displayMode": "list",
"placement": "bottom"
},
"tooltip": {
"mode": "single",
"sort": "none"
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
}
},
"links": [
@ -2149,6 +2079,18 @@ data:
"url": "/d/atlas-gitops",
"targetBlank": true
}
],
"description": "Compact GitOps health: readiness percentages plus percent of Flux objects not suspended.",
"transformations": [
{
"id": "sortBy",
"options": {
"fields": [
"Value"
],
"order": "asc"
}
}
]
},
{
@ -2204,7 +2146,7 @@ data:
"overrides": []
},
"options": {
"displayMode": "gradient",
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
@ -2255,12 +2197,12 @@ data:
},
"targets": [
{
"expr": "sum(increase(ariadne_task_runs_total[$__interval])) or on() vector(0)",
"expr": "sum(increase(ariadne_task_runs_total[5m])) or on() vector(0)",
"refId": "A",
"legendFormat": "Attempts"
},
{
"expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[$__interval])) or on() vector(0)",
"expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[5m])) or on() vector(0)",
"refId": "B",
"legendFormat": "Failures"
}
@ -2273,6 +2215,8 @@ data:
"barAlignment": 0,
"lineWidth": 0,
"fillOpacity": 70,
"gradientMode": "none",
"showPoints": "never",
"spanNulls": true
}
},
@ -2287,7 +2231,7 @@ data:
"id": "color",
"value": {
"mode": "fixed",
"fixedColor": "dark-green"
"fixedColor": "dark-blue"
}
}
]
@ -2329,7 +2273,7 @@ data:
{
"id": 46,
"type": "bargauge",
"title": "Platform Gate Health by Suite",
"title": "Gate Checks Passing by Suite",
"datasource": {
"type": "prometheus",
"uid": "atlas-vm"
@ -2365,11 +2309,11 @@ data:
},
{
"color": "dark-orange",
"value": 90
"value": 70
},
{
"color": "dark-yellow",
"value": 93
"value": 85
},
{
"color": "dark-green",
@ -2381,12 +2325,12 @@ data:
}
]
},
"decimals": 1
"decimals": 0
},
"overrides": []
},
"options": {
"displayMode": "gradient",
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
@ -2414,7 +2358,7 @@ data:
}
}
],
"description": "Latest quality-gate health by suite. This mirrors the testing dashboard's current gate health instead of plotting sparse per-run success spikes."
"description": "Percent of current gate dimensions passing per suite. There are seven gate dimensions, so 85.7% means one gate is failing."
},
{
"id": 142,
@ -2682,7 +2626,7 @@ data:
"overrides": []
},
"options": {
"displayMode": "gradient",
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
@ -3641,7 +3585,7 @@ data:
"overrides": []
},
"options": {
"displayMode": "gradient",
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [

View File

@ -488,7 +488,7 @@ data:
"overrides": []
},
"options": {
"displayMode": "gradient",
"displayMode": "basic",
"orientation": "horizontal",
"reduceOptions": {
"calcs": [

View File

@ -264,10 +264,43 @@ data:
"barAlignment": 0,
"lineWidth": 0,
"fillOpacity": 70,
"gradientMode": "none",
"showPoints": "never",
"spanNulls": true
}
},
"overrides": []
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Pyrphoros"
},
"properties": [
{
"id": "color",
"value": {
"mode": "fixed",
"fixedColor": "dark-blue"
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "Statera"
},
"properties": [
{
"id": "color",
"value": {
"mode": "fixed",
"fixedColor": "dark-yellow"
}
}
]
}
]
},
"options": {
"legend": {

View File

@ -192,9 +192,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1139,9 +1143,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1211,9 +1219,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1283,9 +1295,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1355,9 +1371,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1427,9 +1447,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1499,9 +1523,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -1571,9 +1599,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -2203,9 +2235,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -2385,9 +2421,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -3854,9 +3894,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1
@ -3923,9 +3967,13 @@ data:
"mode": "absolute",
"steps": [
{
"color": "dark-green",
"color": "dark-blue",
"value": null
},
{
"color": "dark-green",
"value": 0.01
},
{
"color": "dark-yellow",
"value": 1