From 698b2fd96bacc582fe4bf0101c99270a8acce4be Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Wed, 21 Jan 2026 11:29:29 -0300 Subject: [PATCH] monitoring: refresh testing dashboard --- .gitignore | 1 + scripts/dashboards_render_atlas.py | 200 ++-- .../monitoring/dashboards/atlas-testing.json | 896 ++++++++++++------ .../monitoring/grafana-dashboard-testing.yaml | 896 ++++++++++++------ 4 files changed, 1401 insertions(+), 592 deletions(-) diff --git a/.gitignore b/.gitignore index 8d0ab1e..7543bbf 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ __pycache__/ *.py[cod] .pytest_cache .venv +.venv-ci tmp/ diff --git a/scripts/dashboards_render_atlas.py b/scripts/dashboards_render_atlas.py index 509cf49..6eaafb4 100644 --- a/scripts/dashboards_render_atlas.py +++ b/scripts/dashboards_render_atlas.py @@ -339,6 +339,9 @@ GLUE_SUSPENDED_COUNT = f"sum({GLUE_SUSPENDED})" ARIADNE_TASK_ERRORS_24H = 'sum by (task) (increase(ariadne_task_runs_total{status="error"}[24h]))' ARIADNE_TASK_SUCCESS_24H = 'sum by (task) (increase(ariadne_task_runs_total{status="ok"}[24h]))' ARIADNE_TASK_RUNS_BY_STATUS_1H = 'sum by (status) (increase(ariadne_task_runs_total[1h]))' +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_SCHEDULE_LAST_SUCCESS_HOURS = "(time() - ariadne_schedule_last_success_timestamp_seconds) / 3600" ARIADNE_SCHEDULE_LAST_ERROR_HOURS = "(time() - ariadne_schedule_last_error_timestamp_seconds) / 3600" ARIADNE_ACCESS_REQUESTS = "ariadne_access_requests_total" @@ -696,8 +699,10 @@ def bargauge_panel( grid, *, unit="none", + legend=None, links=None, limit=None, + sort_order="desc", thresholds=None, decimals=None, instant=False, @@ -710,7 +715,12 @@ def bargauge_panel( "datasource": PROM_DS, "gridPos": grid, "targets": [ - {"expr": expr, "refId": "A", "legendFormat": "{{node}}", **({"instant": True} if instant else {})} + { + "expr": expr, + "refId": "A", + "legendFormat": legend or "{{node}}", + **({"instant": True} if instant else {}), + } ], "fieldConfig": { "defaults": { @@ -748,7 +758,7 @@ def bargauge_panel( panel["transformations"] = [ { "id": "sortBy", - "options": {"fields": ["Value"], "order": "desc"}, + "options": {"fields": ["Value"], "order": sort_order}, } ] if limit: @@ -2163,7 +2173,24 @@ def build_mail_dashboard(): def build_testing_dashboard(): panels = [] - sort_desc = [{"id": "labelsToFields", "options": {}}, {"id": "sortBy", "options": {"fields": ["Value"], "order": "desc"}}] + age_thresholds = { + "mode": "absolute", + "steps": [ + {"color": "green", "value": None}, + {"color": "yellow", "value": 6}, + {"color": "orange", "value": 24}, + {"color": "red", "value": 48}, + ], + } + recent_error_thresholds = { + "mode": "absolute", + "steps": [ + {"color": "red", "value": None}, + {"color": "orange", "value": 1}, + {"color": "yellow", "value": 6}, + {"color": "green", "value": 24}, + ], + } panels.append( stat_panel( @@ -2184,66 +2211,56 @@ def build_testing_dashboard(): ) ) panels.append( - table_panel( + stat_panel( 2, "Glue Jobs Missing Success", - GLUE_MISSING_ACTIVE, - {"h": 4, "w": 6, "x": 6, "y": 0}, + GLUE_MISSING_COUNT, + {"h": 4, "w": 4, "x": 4, "y": 0}, unit="none", - transformations=sort_desc, - instant=True, ) ) panels.append( - table_panel( + stat_panel( 3, "Glue Jobs Suspended", - GLUE_SUSPENDED, - {"h": 4, "w": 6, "x": 12, "y": 0}, + GLUE_SUSPENDED_COUNT, + {"h": 4, "w": 4, "x": 8, "y": 0}, unit="none", - transformations=sort_desc, - instant=True, ) ) panels.append( - table_panel( + stat_panel( 4, - "Glue Jobs Active Runs", - GLUE_ACTIVE, - {"h": 4, "w": 6, "x": 18, "y": 0}, + "Ariadne Task Errors (1h)", + ARIADNE_TASK_ERRORS_1H_TOTAL, + {"h": 4, "w": 4, "x": 12, "y": 0}, unit="none", - transformations=sort_desc, - instant=True, ) ) panels.append( - table_panel( + stat_panel( 5, - "Glue Jobs Last Success (hours ago)", - GLUE_LAST_SUCCESS_AGE_HOURS, - {"h": 8, "w": 12, "x": 0, "y": 4}, - unit="h", - transformations=sort_desc, - instant=True, + "Ariadne Task Errors (24h)", + ARIADNE_TASK_ERRORS_24H_TOTAL, + {"h": 4, "w": 4, "x": 16, "y": 0}, + unit="none", ) ) panels.append( - table_panel( + stat_panel( 6, - "Glue Jobs Last Schedule (hours ago)", - GLUE_LAST_SCHEDULE_AGE_HOURS, - {"h": 8, "w": 12, "x": 12, "y": 4}, - unit="h", - transformations=sort_desc, - instant=True, + "Ariadne Task Runs (1h)", + ARIADNE_TASK_RUNS_1H_TOTAL, + {"h": 4, "w": 4, "x": 20, "y": 0}, + unit="none", ) ) panels.append( timeseries_panel( - 12, + 7, "Ariadne Task Runs vs Errors (1h)", ARIADNE_TASK_RUNS_BY_STATUS_1H, - {"h": 6, "w": 24, "x": 0, "y": 12}, + {"h": 6, "w": 24, "x": 0, "y": 4}, unit="none", legend="{{status}}", legend_display="table", @@ -2251,55 +2268,110 @@ def build_testing_dashboard(): ) ) panels.append( - table_panel( - 7, + bargauge_panel( + 8, "Ariadne Task Errors (24h)", ARIADNE_TASK_ERRORS_24H, - {"h": 6, "w": 12, "x": 0, "y": 18}, + {"h": 8, "w": 12, "x": 0, "y": 10}, unit="none", - transformations=sort_desc, instant=True, + legend="{{task}}", + thresholds={ + "mode": "absolute", + "steps": [ + {"color": "green", "value": None}, + {"color": "yellow", "value": 1}, + {"color": "orange", "value": 3}, + {"color": "red", "value": 5}, + ], + }, ) ) panels.append( - table_panel( - 8, - "Ariadne Schedule Last Success (hours ago)", - ARIADNE_SCHEDULE_LAST_SUCCESS_HOURS, - {"h": 6, "w": 12, "x": 12, "y": 18}, - unit="h", - transformations=sort_desc, - instant=True, - ) - ) - panels.append( - table_panel( + bargauge_panel( 9, - "Ariadne Access Requests", - ARIADNE_ACCESS_REQUESTS, - {"h": 6, "w": 12, "x": 12, "y": 24}, + "Ariadne Task Success (24h)", + ARIADNE_TASK_SUCCESS_24H, + {"h": 8, "w": 12, "x": 12, "y": 10}, unit="none", - transformations=sort_desc, instant=True, + legend="{{task}}", + thresholds={ + "mode": "absolute", + "steps": [ + {"color": "red", "value": None}, + {"color": "orange", "value": 1}, + {"color": "yellow", "value": 5}, + {"color": "green", "value": 10}, + ], + }, ) ) panels.append( - table_panel( - 13, + bargauge_panel( + 10, "Ariadne Schedule Last Error (hours ago)", ARIADNE_SCHEDULE_LAST_ERROR_HOURS, - {"h": 6, "w": 12, "x": 0, "y": 24}, + {"h": 8, "w": 12, "x": 0, "y": 18}, unit="h", - transformations=sort_desc, instant=True, + legend="{{task}}", + thresholds=recent_error_thresholds, + ) + ) + panels.append( + bargauge_panel( + 11, + "Ariadne Schedule Last Success (hours ago)", + ARIADNE_SCHEDULE_LAST_SUCCESS_HOURS, + {"h": 8, "w": 12, "x": 12, "y": 18}, + unit="h", + instant=True, + legend="{{task}}", + thresholds=age_thresholds, + ) + ) + panels.append( + bargauge_panel( + 12, + "Glue Jobs Last Success (hours ago)", + GLUE_LAST_SUCCESS_AGE_HOURS, + {"h": 8, "w": 12, "x": 0, "y": 26}, + unit="h", + instant=True, + legend="{{namespace}}/{{cronjob}}", + thresholds=age_thresholds, + ) + ) + panels.append( + bargauge_panel( + 13, + "Glue Jobs Last Schedule (hours ago)", + GLUE_LAST_SCHEDULE_AGE_HOURS, + {"h": 8, "w": 12, "x": 12, "y": 26}, + unit="h", + instant=True, + legend="{{namespace}}/{{cronjob}}", + thresholds=age_thresholds, + ) + ) + panels.append( + bargauge_panel( + 14, + "Ariadne Access Requests", + ARIADNE_ACCESS_REQUESTS, + {"h": 6, "w": 8, "x": 0, "y": 34}, + unit="none", + instant=True, + legend="{{status}}", ) ) panels.append( stat_panel( - 10, + 15, "Ariadne CI Coverage (%)", ARIADNE_CI_COVERAGE, - {"h": 4, "w": 6, "x": 0, "y": 30}, + {"h": 6, "w": 4, "x": 8, "y": 34}, unit="percent", decimals=1, instant=True, @@ -2308,12 +2380,12 @@ def build_testing_dashboard(): ) panels.append( table_panel( - 11, + 16, "Ariadne CI Tests (latest)", ARIADNE_CI_TESTS, - {"h": 6, "w": 18, "x": 6, "y": 30}, + {"h": 6, "w": 12, "x": 12, "y": 34}, unit="none", - transformations=sort_desc, + transformations=[{"id": "labelsToFields", "options": {}}, {"id": "sortBy", "options": {"fields": ["Value"], "order": "desc"}}], instant=True, ) ) diff --git a/services/monitoring/dashboards/atlas-testing.json b/services/monitoring/dashboards/atlas-testing.json index 207077e..420abf2 100644 --- a/services/monitoring/dashboards/atlas-testing.json +++ b/services/monitoring/dashboards/atlas-testing.json @@ -74,7 +74,7 @@ }, { "id": 2, - "type": "table", + "type": "stat", "title": "Glue Jobs Missing Success", "datasource": { "type": "prometheus", @@ -82,49 +82,59 @@ }, "gridPos": { "h": 4, - "w": 6, - "x": 6, + "w": 4, + "x": 4, "y": 0 }, "targets": [ { - "expr": "((kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"} unless on(namespace,cronjob) kube_cronjob_status_last_successful_time) unless on(namespace,cronjob) (kube_cronjob_spec_suspend and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}) == 1)", - "refId": "A", - "instant": true + "expr": "count(((kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"} unless on(namespace,cronjob) kube_cronjob_status_last_successful_time) unless on(namespace,cronjob) (kube_cronjob_spec_suspend and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}) == 1))", + "refId": "A" } ], "fieldConfig": { "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, "unit": "none", "custom": { - "filterable": true + "displayMode": "auto" } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] + "textMode": "value" + } }, { "id": 3, - "type": "table", + "type": "stat", "title": "Glue Jobs Suspended", "datasource": { "type": "prometheus", @@ -132,198 +142,238 @@ }, "gridPos": { "h": 4, - "w": 6, - "x": 12, + "w": 4, + "x": 8, "y": 0 }, "targets": [ { - "expr": "(kube_cronjob_spec_suspend and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}) == 1", - "refId": "A", - "instant": true + "expr": "sum((kube_cronjob_spec_suspend and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}) == 1)", + "refId": "A" } ], "fieldConfig": { "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, "unit": "none", "custom": { - "filterable": true + "displayMode": "auto" } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] + "textMode": "value" + } }, { "id": 4, - "type": "table", - "title": "Glue Jobs Active Runs", + "type": "stat", + "title": "Ariadne Task Errors (1h)", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { "h": 4, - "w": 6, - "x": 18, + "w": 4, + "x": 12, "y": 0 }, "targets": [ { - "expr": "(kube_cronjob_status_active and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"})", - "refId": "A", - "instant": true + "expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[1h]))", + "refId": "A" } ], "fieldConfig": { "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, "unit": "none", "custom": { - "filterable": true + "displayMode": "auto" } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] + "textMode": "value" + } }, { "id": 5, - "type": "table", - "title": "Glue Jobs Last Success (hours ago)", + "type": "stat", + "title": "Ariadne Task Errors (24h)", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 4 + "h": 4, + "w": 4, + "x": 16, + "y": 0 }, "targets": [ { - "expr": "((time() - (kube_cronjob_status_last_successful_time and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}))) / 3600", - "refId": "A", - "instant": true + "expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[24h]))", + "refId": "A" } ], "fieldConfig": { "defaults": { - "unit": "h", + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, + "unit": "none", "custom": { - "filterable": true + "displayMode": "auto" } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] + "textMode": "value" + } }, { "id": 6, - "type": "table", - "title": "Glue Jobs Last Schedule (hours ago)", + "type": "stat", + "title": "Ariadne Task Runs (1h)", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 4 + "h": 4, + "w": 4, + "x": 20, + "y": 0 }, "targets": [ { - "expr": "((time() - (kube_cronjob_status_last_schedule_time and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}))) / 3600", - "refId": "A", - "instant": true + "expr": "sum(increase(ariadne_task_runs_total[1h]))", + "refId": "A" } ], "fieldConfig": { "defaults": { - "unit": "h", + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, + "unit": "none", "custom": { - "filterable": true + "displayMode": "auto" } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] + "textMode": "value" + } }, { - "id": 12, + "id": 7, "type": "timeseries", "title": "Ariadne Task Runs vs Errors (1h)", "datasource": { @@ -334,7 +384,7 @@ "h": 6, "w": 24, "x": 0, - "y": 12 + "y": 4 }, "targets": [ { @@ -360,94 +410,68 @@ } }, { - "id": 7, - "type": "table", + "id": 8, + "type": "bargauge", "title": "Ariadne Task Errors (24h)", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 6, + "h": 8, "w": 12, "x": 0, - "y": 18 + "y": 10 }, "targets": [ { "expr": "sum by (task) (increase(ariadne_task_runs_total{status=\"error\"}[24h]))", "refId": "A", + "legendFormat": "{{task}}", "instant": true } ], "fieldConfig": { "defaults": { "unit": "none", - "custom": { - "filterable": true + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 1 + }, + { + "color": "orange", + "value": 3 + }, + { + "color": "red", + "value": 5 + } + ] } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } }, "transformations": [ - { - "id": "labelsToFields", - "options": {} - }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] - }, - { - "id": 8, - "type": "table", - "title": "Ariadne Schedule Last Success (hours ago)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 12, - "x": 12, - "y": 18 - }, - "targets": [ - { - "expr": "(time() - ariadne_schedule_last_success_timestamp_seconds) / 3600", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "unit": "h", - "custom": { - "filterable": true - } - }, - "overrides": [] - }, - "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} - }, { "id": "sortBy", "options": { @@ -461,93 +485,67 @@ }, { "id": 9, - "type": "table", - "title": "Ariadne Access Requests", + "type": "bargauge", + "title": "Ariadne Task Success (24h)", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 6, + "h": 8, "w": 12, "x": 12, - "y": 24 + "y": 10 }, "targets": [ { - "expr": "ariadne_access_requests_total", + "expr": "sum by (task) (increase(ariadne_task_runs_total{status=\"ok\"}[24h]))", "refId": "A", + "legendFormat": "{{task}}", "instant": true } ], "fieldConfig": { "defaults": { "unit": "none", - "custom": { - "filterable": true + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 1 + }, + { + "color": "yellow", + "value": 5 + }, + { + "color": "green", + "value": 10 + } + ] } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } }, "transformations": [ - { - "id": "labelsToFields", - "options": {} - }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] - }, - { - "id": 13, - "type": "table", - "title": "Ariadne Schedule Last Error (hours ago)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 12, - "x": 0, - "y": 24 - }, - "targets": [ - { - "expr": "(time() - ariadne_schedule_last_error_timestamp_seconds) / 3600", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "unit": "h", - "custom": { - "filterable": true - } - }, - "overrides": [] - }, - "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} - }, { "id": "sortBy", "options": { @@ -561,6 +559,376 @@ }, { "id": 10, + "type": "bargauge", + "title": "Ariadne Schedule Last Error (hours ago)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 18 + }, + "targets": [ + { + "expr": "(time() - ariadne_schedule_last_error_timestamp_seconds) / 3600", + "refId": "A", + "legendFormat": "{{task}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 1 + }, + { + "color": "yellow", + "value": 6 + }, + { + "color": "green", + "value": 24 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, + { + "id": 11, + "type": "bargauge", + "title": "Ariadne Schedule Last Success (hours ago)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 18 + }, + "targets": [ + { + "expr": "(time() - ariadne_schedule_last_success_timestamp_seconds) / 3600", + "refId": "A", + "legendFormat": "{{task}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 6 + }, + { + "color": "orange", + "value": 24 + }, + { + "color": "red", + "value": 48 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, + { + "id": 12, + "type": "bargauge", + "title": "Glue Jobs Last Success (hours ago)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 26 + }, + "targets": [ + { + "expr": "((time() - (kube_cronjob_status_last_successful_time and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}))) / 3600", + "refId": "A", + "legendFormat": "{{namespace}}/{{cronjob}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 6 + }, + { + "color": "orange", + "value": 24 + }, + { + "color": "red", + "value": 48 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, + { + "id": 13, + "type": "bargauge", + "title": "Glue Jobs Last Schedule (hours ago)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 26 + }, + "targets": [ + { + "expr": "((time() - (kube_cronjob_status_last_schedule_time and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}))) / 3600", + "refId": "A", + "legendFormat": "{{namespace}}/{{cronjob}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 6 + }, + { + "color": "orange", + "value": 24 + }, + { + "color": "red", + "value": 48 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, + { + "id": 14, + "type": "bargauge", + "title": "Ariadne Access Requests", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 34 + }, + "targets": [ + { + "expr": "ariadne_access_requests_total", + "refId": "A", + "legendFormat": "{{status}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "none", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 50 + }, + { + "color": "orange", + "value": 70 + }, + { + "color": "red", + "value": 85 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, + { + "id": 15, "type": "stat", "title": "Ariadne CI Coverage (%)", "datasource": { @@ -568,10 +936,10 @@ "uid": "atlas-vm" }, "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 30 + "h": 6, + "w": 4, + "x": 8, + "y": 34 }, "targets": [ { @@ -623,7 +991,7 @@ } }, { - "id": 11, + "id": 16, "type": "table", "title": "Ariadne CI Tests (latest)", "datasource": { @@ -632,9 +1000,9 @@ }, "gridPos": { "h": 6, - "w": 18, - "x": 6, - "y": 30 + "w": 12, + "x": 12, + "y": 34 }, "targets": [ { diff --git a/services/monitoring/grafana-dashboard-testing.yaml b/services/monitoring/grafana-dashboard-testing.yaml index 362751b..52b2836 100644 --- a/services/monitoring/grafana-dashboard-testing.yaml +++ b/services/monitoring/grafana-dashboard-testing.yaml @@ -83,7 +83,7 @@ data: }, { "id": 2, - "type": "table", + "type": "stat", "title": "Glue Jobs Missing Success", "datasource": { "type": "prometheus", @@ -91,49 +91,59 @@ data: }, "gridPos": { "h": 4, - "w": 6, - "x": 6, + "w": 4, + "x": 4, "y": 0 }, "targets": [ { - "expr": "((kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"} unless on(namespace,cronjob) kube_cronjob_status_last_successful_time) unless on(namespace,cronjob) (kube_cronjob_spec_suspend and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}) == 1)", - "refId": "A", - "instant": true + "expr": "count(((kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"} unless on(namespace,cronjob) kube_cronjob_status_last_successful_time) unless on(namespace,cronjob) (kube_cronjob_spec_suspend and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}) == 1))", + "refId": "A" } ], "fieldConfig": { "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, "unit": "none", "custom": { - "filterable": true + "displayMode": "auto" } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] + "textMode": "value" + } }, { "id": 3, - "type": "table", + "type": "stat", "title": "Glue Jobs Suspended", "datasource": { "type": "prometheus", @@ -141,198 +151,238 @@ data: }, "gridPos": { "h": 4, - "w": 6, - "x": 12, + "w": 4, + "x": 8, "y": 0 }, "targets": [ { - "expr": "(kube_cronjob_spec_suspend and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}) == 1", - "refId": "A", - "instant": true + "expr": "sum((kube_cronjob_spec_suspend and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}) == 1)", + "refId": "A" } ], "fieldConfig": { "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, "unit": "none", "custom": { - "filterable": true + "displayMode": "auto" } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] + "textMode": "value" + } }, { "id": 4, - "type": "table", - "title": "Glue Jobs Active Runs", + "type": "stat", + "title": "Ariadne Task Errors (1h)", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { "h": 4, - "w": 6, - "x": 18, + "w": 4, + "x": 12, "y": 0 }, "targets": [ { - "expr": "(kube_cronjob_status_active and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"})", - "refId": "A", - "instant": true + "expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[1h]))", + "refId": "A" } ], "fieldConfig": { "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, "unit": "none", "custom": { - "filterable": true + "displayMode": "auto" } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] + "textMode": "value" + } }, { "id": 5, - "type": "table", - "title": "Glue Jobs Last Success (hours ago)", + "type": "stat", + "title": "Ariadne Task Errors (24h)", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 4 + "h": 4, + "w": 4, + "x": 16, + "y": 0 }, "targets": [ { - "expr": "((time() - (kube_cronjob_status_last_successful_time and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}))) / 3600", - "refId": "A", - "instant": true + "expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[24h]))", + "refId": "A" } ], "fieldConfig": { "defaults": { - "unit": "h", + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, + "unit": "none", "custom": { - "filterable": true + "displayMode": "auto" } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] + "textMode": "value" + } }, { "id": 6, - "type": "table", - "title": "Glue Jobs Last Schedule (hours ago)", + "type": "stat", + "title": "Ariadne Task Runs (1h)", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 4 + "h": 4, + "w": 4, + "x": 20, + "y": 0 }, "targets": [ { - "expr": "((time() - (kube_cronjob_status_last_schedule_time and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}))) / 3600", - "refId": "A", - "instant": true + "expr": "sum(increase(ariadne_task_runs_total[1h]))", + "refId": "A" } ], "fieldConfig": { "defaults": { - "unit": "h", + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, + "unit": "none", "custom": { - "filterable": true + "displayMode": "auto" } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] + "textMode": "value" + } }, { - "id": 12, + "id": 7, "type": "timeseries", "title": "Ariadne Task Runs vs Errors (1h)", "datasource": { @@ -343,7 +393,7 @@ data: "h": 6, "w": 24, "x": 0, - "y": 12 + "y": 4 }, "targets": [ { @@ -369,94 +419,68 @@ data: } }, { - "id": 7, - "type": "table", + "id": 8, + "type": "bargauge", "title": "Ariadne Task Errors (24h)", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 6, + "h": 8, "w": 12, "x": 0, - "y": 18 + "y": 10 }, "targets": [ { "expr": "sum by (task) (increase(ariadne_task_runs_total{status=\"error\"}[24h]))", "refId": "A", + "legendFormat": "{{task}}", "instant": true } ], "fieldConfig": { "defaults": { "unit": "none", - "custom": { - "filterable": true + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 1 + }, + { + "color": "orange", + "value": 3 + }, + { + "color": "red", + "value": 5 + } + ] } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } }, "transformations": [ - { - "id": "labelsToFields", - "options": {} - }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] - }, - { - "id": 8, - "type": "table", - "title": "Ariadne Schedule Last Success (hours ago)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 12, - "x": 12, - "y": 18 - }, - "targets": [ - { - "expr": "(time() - ariadne_schedule_last_success_timestamp_seconds) / 3600", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "unit": "h", - "custom": { - "filterable": true - } - }, - "overrides": [] - }, - "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} - }, { "id": "sortBy", "options": { @@ -470,93 +494,67 @@ data: }, { "id": 9, - "type": "table", - "title": "Ariadne Access Requests", + "type": "bargauge", + "title": "Ariadne Task Success (24h)", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 6, + "h": 8, "w": 12, "x": 12, - "y": 24 + "y": 10 }, "targets": [ { - "expr": "ariadne_access_requests_total", + "expr": "sum by (task) (increase(ariadne_task_runs_total{status=\"ok\"}[24h]))", "refId": "A", + "legendFormat": "{{task}}", "instant": true } ], "fieldConfig": { "defaults": { "unit": "none", - "custom": { - "filterable": true + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 1 + }, + { + "color": "yellow", + "value": 5 + }, + { + "color": "green", + "value": 10 + } + ] } }, "overrides": [] }, "options": { - "showHeader": true, - "columnFilters": false + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } }, "transformations": [ - { - "id": "labelsToFields", - "options": {} - }, - { - "id": "sortBy", - "options": { - "fields": [ - "Value" - ], - "order": "desc" - } - } - ] - }, - { - "id": 13, - "type": "table", - "title": "Ariadne Schedule Last Error (hours ago)", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 6, - "w": 12, - "x": 0, - "y": 24 - }, - "targets": [ - { - "expr": "(time() - ariadne_schedule_last_error_timestamp_seconds) / 3600", - "refId": "A", - "instant": true - } - ], - "fieldConfig": { - "defaults": { - "unit": "h", - "custom": { - "filterable": true - } - }, - "overrides": [] - }, - "options": { - "showHeader": true, - "columnFilters": false - }, - "transformations": [ - { - "id": "labelsToFields", - "options": {} - }, { "id": "sortBy", "options": { @@ -570,6 +568,376 @@ data: }, { "id": 10, + "type": "bargauge", + "title": "Ariadne Schedule Last Error (hours ago)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 18 + }, + "targets": [ + { + "expr": "(time() - ariadne_schedule_last_error_timestamp_seconds) / 3600", + "refId": "A", + "legendFormat": "{{task}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 1 + }, + { + "color": "yellow", + "value": 6 + }, + { + "color": "green", + "value": 24 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, + { + "id": 11, + "type": "bargauge", + "title": "Ariadne Schedule Last Success (hours ago)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 18 + }, + "targets": [ + { + "expr": "(time() - ariadne_schedule_last_success_timestamp_seconds) / 3600", + "refId": "A", + "legendFormat": "{{task}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 6 + }, + { + "color": "orange", + "value": 24 + }, + { + "color": "red", + "value": 48 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, + { + "id": 12, + "type": "bargauge", + "title": "Glue Jobs Last Success (hours ago)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 26 + }, + "targets": [ + { + "expr": "((time() - (kube_cronjob_status_last_successful_time and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}))) / 3600", + "refId": "A", + "legendFormat": "{{namespace}}/{{cronjob}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 6 + }, + { + "color": "orange", + "value": 24 + }, + { + "color": "red", + "value": 48 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, + { + "id": 13, + "type": "bargauge", + "title": "Glue Jobs Last Schedule (hours ago)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 26 + }, + "targets": [ + { + "expr": "((time() - (kube_cronjob_status_last_schedule_time and on(namespace,cronjob) kube_cronjob_labels{label_atlas_bstein_dev_glue=\"true\"}))) / 3600", + "refId": "A", + "legendFormat": "{{namespace}}/{{cronjob}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 6 + }, + { + "color": "orange", + "value": 24 + }, + { + "color": "red", + "value": 48 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, + { + "id": 14, + "type": "bargauge", + "title": "Ariadne Access Requests", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 34 + }, + "targets": [ + { + "expr": "ariadne_access_requests_total", + "refId": "A", + "legendFormat": "{{status}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "none", + "min": 0, + "max": null, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 50 + }, + { + "color": "orange", + "value": 70 + }, + { + "color": "red", + "value": 85 + } + ] + } + }, + "overrides": [] + }, + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "desc" + } + } + ] + }, + { + "id": 15, "type": "stat", "title": "Ariadne CI Coverage (%)", "datasource": { @@ -577,10 +945,10 @@ data: "uid": "atlas-vm" }, "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 30 + "h": 6, + "w": 4, + "x": 8, + "y": 34 }, "targets": [ { @@ -632,7 +1000,7 @@ data: } }, { - "id": 11, + "id": 16, "type": "table", "title": "Ariadne CI Tests (latest)", "datasource": { @@ -641,9 +1009,9 @@ data: }, "gridPos": { "h": 6, - "w": 18, - "x": 6, - "y": 30 + "w": 12, + "x": 12, + "y": 34 }, "targets": [ {