From db9cff8e2d1c478bc0415fd188af0fcda4d1b978 Mon Sep 17 00:00:00 2001 From: Dominik Prokop Date: Tue, 2 Dec 2025 19:43:25 +0100 Subject: [PATCH] Revert "v1 to v2 conversion: Fix issue when Grafana datasource wouldn't be resolved correctly (#114555)" This reverts commit ac62070ac706b441526af80967e2561350b6b98e. --- ...eta1.panel-datasource-type-datasource.json | 234 --------- ...l-datasource-type-datasource.v0alpha1.json | 217 -------- ...l-datasource-type-datasource.v2alpha1.json | 455 ----------------- ...el-datasource-type-datasource.v2beta1.json | 475 ------------------ .../conversion/v1beta1_to_v2alpha1.go | 91 +--- .../conversion/v1beta1_to_v2alpha1_test.go | 228 --------- go.work.sum | 15 +- 7 files changed, 20 insertions(+), 1695 deletions(-) delete mode 100644 apps/dashboard/pkg/migration/conversion/testdata/input/v1beta1.panel-datasource-type-datasource.json delete mode 100644 apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v0alpha1.json delete mode 100644 apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v2alpha1.json delete mode 100644 apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v2beta1.json delete mode 100644 apps/dashboard/pkg/migration/conversion/v1beta1_to_v2alpha1_test.go diff --git a/apps/dashboard/pkg/migration/conversion/testdata/input/v1beta1.panel-datasource-type-datasource.json b/apps/dashboard/pkg/migration/conversion/testdata/input/v1beta1.panel-datasource-type-datasource.json deleted file mode 100644 index 2ed8151a549..00000000000 --- a/apps/dashboard/pkg/migration/conversion/testdata/input/v1beta1.panel-datasource-type-datasource.json +++ /dev/null @@ -1,234 +0,0 @@ -{ - "kind": "DashboardWithAccessInfo", - "apiVersion": "dashboard.grafana.app/v1beta1", - "metadata": { - "name": "ad6phhg", - "namespace": "default", - "uid": "spsmxIXYXdgxtY972XX7j3dj3ijM3IZXDmsCfjygSP8X", - "resourceVersion": "2", - "generation": 2, - "creationTimestamp": "2025-11-27T12:31:46Z", - "labels": { - "grafana.app/deprecatedInternalID": "283" - }, - "annotations": { - "grafana.app/createdBy": "user:eex2ofwuj0agwd", - "grafana.app/updatedBy": "user:eex2ofwuj0agwd", - "grafana.app/updatedTimestamp": "2025-11-27T12:32:09Z" - } - }, - "spec": { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations \u0026 Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "links": [], - "panels": [ - { - "datasource": { - "type": "datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": 0 - }, - { - "color": "yellow", - "value": 50 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 15, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 4, - "options": { - "displayMode": "gradient", - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "maxVizHeight": 300, - "minVizHeight": 16, - "minVizWidth": 8, - "namePlacement": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "sizing": "auto", - "valueMode": "color" - }, - "pluginVersion": "12.4.0-pre", - "targets": [ - { - "datasource": {}, - "refId": "A", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "B", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "C", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "D", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "E", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "F", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "G", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "labels": "", - "refId": "H", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "I", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "J", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "K", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "L", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "M", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "N", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "labels": "", - "refId": "O", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "P", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "Q", - "scenarioId": "random_walk" - } - ], - "title": "Panel Title", - "type": "bargauge" - } - ], - "preload": false, - "refresh": "", - "schemaVersion": 42, - "tags": [], - "templating": { - "list": [] - }, - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Bar Gauge Demo Unfilled Copy v1", - "weekStart": "" - }, - "status": {}, - "access": { - "slug": "bar-gauge-demo-unfilled-copy-v1", - "url": "/d/ad6phhg/bar-gauge-demo-unfilled-copy-v1", - "isPublic": false, - "canSave": true, - "canEdit": true, - "canAdmin": true, - "canStar": true, - "canDelete": true, - "annotationsPermissions": { - "dashboard": { - "canAdd": true, - "canEdit": true, - "canDelete": true - }, - "organization": { - "canAdd": true, - "canEdit": true, - "canDelete": true - } - } - } -} diff --git a/apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v0alpha1.json b/apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v0alpha1.json deleted file mode 100644 index 7c089035f26..00000000000 --- a/apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v0alpha1.json +++ /dev/null @@ -1,217 +0,0 @@ -{ - "kind": "DashboardWithAccessInfo", - "apiVersion": "dashboard.grafana.app/v0alpha1", - "metadata": { - "name": "ad6phhg", - "namespace": "default", - "uid": "spsmxIXYXdgxtY972XX7j3dj3ijM3IZXDmsCfjygSP8X", - "resourceVersion": "2", - "generation": 2, - "creationTimestamp": "2025-11-27T12:31:46Z", - "labels": { - "grafana.app/deprecatedInternalID": "283" - }, - "annotations": { - "grafana.app/createdBy": "user:eex2ofwuj0agwd", - "grafana.app/updatedBy": "user:eex2ofwuj0agwd", - "grafana.app/updatedTimestamp": "2025-11-27T12:32:09Z" - } - }, - "spec": { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations \u0026 Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "links": [], - "panels": [ - { - "datasource": { - "type": "datasource" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": 0 - }, - { - "color": "yellow", - "value": 50 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 15, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 4, - "options": { - "displayMode": "gradient", - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "maxVizHeight": 300, - "minVizHeight": 16, - "minVizWidth": 8, - "namePlacement": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "sizing": "auto", - "valueMode": "color" - }, - "pluginVersion": "12.4.0-pre", - "targets": [ - { - "datasource": {}, - "refId": "A", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "B", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "C", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "D", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "E", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "F", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "G", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "labels": "", - "refId": "H", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "I", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "J", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "K", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "L", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "M", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "N", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "labels": "", - "refId": "O", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "P", - "scenarioId": "random_walk" - }, - { - "datasource": {}, - "refId": "Q", - "scenarioId": "random_walk" - } - ], - "title": "Panel Title", - "type": "bargauge" - } - ], - "preload": false, - "refresh": "", - "schemaVersion": 42, - "tags": [], - "templating": { - "list": [] - }, - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Bar Gauge Demo Unfilled Copy v1", - "weekStart": "" - }, - "status": { - "conversion": { - "failed": false, - "storedVersion": "v1beta1" - } - } -} \ No newline at end of file diff --git a/apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v2alpha1.json b/apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v2alpha1.json deleted file mode 100644 index 037136e9e4f..00000000000 --- a/apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v2alpha1.json +++ /dev/null @@ -1,455 +0,0 @@ -{ - "kind": "DashboardWithAccessInfo", - "apiVersion": "dashboard.grafana.app/v2alpha1", - "metadata": { - "name": "ad6phhg", - "namespace": "default", - "uid": "spsmxIXYXdgxtY972XX7j3dj3ijM3IZXDmsCfjygSP8X", - "resourceVersion": "2", - "generation": 2, - "creationTimestamp": "2025-11-27T12:31:46Z", - "labels": { - "grafana.app/deprecatedInternalID": "283" - }, - "annotations": { - "grafana.app/createdBy": "user:eex2ofwuj0agwd", - "grafana.app/updatedBy": "user:eex2ofwuj0agwd", - "grafana.app/updatedTimestamp": "2025-11-27T12:32:09Z" - } - }, - "spec": { - "annotations": [ - { - "kind": "AnnotationQuery", - "spec": { - "query": { - "kind": "", - "spec": {} - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations \u0026 Alerts", - "builtIn": true, - "legacyOptions": { - "type": "dashboard" - } - } - } - ], - "cursorSync": "Off", - "editable": true, - "elements": { - "panel-4": { - "kind": "Panel", - "spec": { - "id": 4, - "title": "Panel Title", - "description": "", - "links": [], - "data": { - "kind": "QueryGroup", - "spec": { - "queries": [ - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "A", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "B", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "C", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "D", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "E", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "F", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "G", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "labels": "", - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "H", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "I", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "J", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "K", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "L", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "M", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "N", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "labels": "", - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "O", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "P", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "datasource", - "spec": { - "scenarioId": "random_walk" - } - }, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "refId": "Q", - "hidden": false - } - } - ], - "transformations": [], - "queryOptions": {} - } - }, - "vizConfig": { - "kind": "bargauge", - "spec": { - "pluginVersion": "12.4.0-pre", - "options": { - "displayMode": "gradient", - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "maxVizHeight": 300, - "minVizHeight": 16, - "minVizWidth": 8, - "namePlacement": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "sizing": "auto", - "valueMode": "color" - }, - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 0, - "max": 100, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "value": 0, - "color": "red" - }, - { - "value": 50, - "color": "yellow" - } - ] - }, - "color": { - "mode": "thresholds" - } - }, - "overrides": [] - } - } - } - } - } - }, - "layout": { - "kind": "GridLayout", - "spec": { - "items": [ - { - "kind": "GridLayoutItem", - "spec": { - "x": 0, - "y": 0, - "width": 24, - "height": 15, - "element": { - "kind": "ElementReference", - "name": "panel-4" - } - } - } - ] - } - }, - "links": [], - "liveNow": false, - "preload": false, - "tags": [], - "timeSettings": { - "timezone": "", - "from": "now-6h", - "to": "now", - "autoRefresh": "", - "autoRefreshIntervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "hideTimepicker": false, - "fiscalYearStartMonth": 0 - }, - "title": "Bar Gauge Demo Unfilled Copy v1", - "variables": [] - }, - "status": {} -} \ No newline at end of file diff --git a/apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v2beta1.json b/apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v2beta1.json deleted file mode 100644 index 5a357b52534..00000000000 --- a/apps/dashboard/pkg/migration/conversion/testdata/output/v1beta1.panel-datasource-type-datasource.v2beta1.json +++ /dev/null @@ -1,475 +0,0 @@ -{ - "kind": "DashboardWithAccessInfo", - "apiVersion": "dashboard.grafana.app/v2beta1", - "metadata": { - "name": "ad6phhg", - "namespace": "default", - "uid": "spsmxIXYXdgxtY972XX7j3dj3ijM3IZXDmsCfjygSP8X", - "resourceVersion": "2", - "generation": 2, - "creationTimestamp": "2025-11-27T12:31:46Z", - "labels": { - "grafana.app/deprecatedInternalID": "283" - }, - "annotations": { - "grafana.app/createdBy": "user:eex2ofwuj0agwd", - "grafana.app/updatedBy": "user:eex2ofwuj0agwd", - "grafana.app/updatedTimestamp": "2025-11-27T12:32:09Z" - } - }, - "spec": { - "annotations": [ - { - "kind": "AnnotationQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "", - "version": "v0", - "spec": {} - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations \u0026 Alerts", - "builtIn": true, - "legacyOptions": { - "type": "dashboard" - } - } - } - ], - "cursorSync": "Off", - "editable": true, - "elements": { - "panel-4": { - "kind": "Panel", - "spec": { - "id": 4, - "title": "Panel Title", - "description": "", - "links": [], - "data": { - "kind": "QueryGroup", - "spec": { - "queries": [ - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "A", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "B", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "C", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "D", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "E", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "F", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "G", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "labels": "", - "scenarioId": "random_walk" - } - }, - "refId": "H", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "I", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "J", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "K", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "L", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "M", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "N", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "labels": "", - "scenarioId": "random_walk" - } - }, - "refId": "O", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "P", - "hidden": false - } - }, - { - "kind": "PanelQuery", - "spec": { - "query": { - "kind": "DataQuery", - "group": "datasource", - "version": "v0", - "datasource": { - "name": "grafana" - }, - "spec": { - "scenarioId": "random_walk" - } - }, - "refId": "Q", - "hidden": false - } - } - ], - "transformations": [], - "queryOptions": {} - } - }, - "vizConfig": { - "kind": "VizConfig", - "group": "bargauge", - "version": "12.4.0-pre", - "spec": { - "options": { - "displayMode": "gradient", - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "maxVizHeight": 300, - "minVizHeight": 16, - "minVizWidth": 8, - "namePlacement": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "sizing": "auto", - "valueMode": "color" - }, - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 0, - "max": 100, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "value": 0, - "color": "red" - }, - { - "value": 50, - "color": "yellow" - } - ] - }, - "color": { - "mode": "thresholds" - } - }, - "overrides": [] - } - } - } - } - } - }, - "layout": { - "kind": "GridLayout", - "spec": { - "items": [ - { - "kind": "GridLayoutItem", - "spec": { - "x": 0, - "y": 0, - "width": 24, - "height": 15, - "element": { - "kind": "ElementReference", - "name": "panel-4" - } - } - } - ] - } - }, - "links": [], - "liveNow": false, - "preload": false, - "tags": [], - "timeSettings": { - "timezone": "", - "from": "now-6h", - "to": "now", - "autoRefresh": "", - "autoRefreshIntervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "hideTimepicker": false, - "fiscalYearStartMonth": 0 - }, - "title": "Bar Gauge Demo Unfilled Copy v1", - "variables": [] - }, - "status": {} -} \ No newline at end of file diff --git a/apps/dashboard/pkg/migration/conversion/v1beta1_to_v2alpha1.go b/apps/dashboard/pkg/migration/conversion/v1beta1_to_v2alpha1.go index 58089d12c54..9efd0b68f23 100644 --- a/apps/dashboard/pkg/migration/conversion/v1beta1_to_v2alpha1.go +++ b/apps/dashboard/pkg/migration/conversion/v1beta1_to_v2alpha1.go @@ -16,7 +16,6 @@ import ( dashv2alpha1 "github.com/grafana/grafana/apps/dashboard/pkg/apis/dashboard/v2alpha1" schemaversion "github.com/grafana/grafana/apps/dashboard/pkg/migration/schemaversion" "github.com/grafana/grafana/pkg/apimachinery/identity" - "github.com/grafana/grafana/pkg/tsdb/grafanads" ) // getDefaultDatasourceType gets the default datasource type using the datasource provider @@ -53,16 +52,6 @@ func getDatasourceTypeByUID(ctx context.Context, uid string, provider schemavers return getDefaultDatasourceType(ctx, provider) } -// resolveGrafanaDatasourceUID resolves the Grafana datasource UID when type is "datasource" and UID is empty. -// The Grafana datasource has type "datasource" and UID "grafana". When a v1beta1 dashboard has -// datasource: { type: "datasource" } with no UID, it should resolve to uid: "grafana". -func resolveGrafanaDatasourceUID(dsType, dsUID string) string { - if dsType == "datasource" && dsUID == "" { - return grafanads.DatasourceUID - } - return dsUID -} - // prepareV1beta1ConversionContext sets up the context with namespace and service identity // for v1beta1 dashboard conversions. This context is needed to retrieve datasources for // converting dashboard datasource references. @@ -1685,9 +1674,6 @@ func buildGroupByVariable(ctx context.Context, varMap map[string]interface{}, co // If no UID and no type, use default datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider) } - - // Resolve Grafana datasource UID when type is "datasource" and UID is empty - datasourceUID = resolveGrafanaDatasourceUID(datasourceType, datasourceUID) } else { datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider) } @@ -1890,45 +1876,22 @@ func transformPanelQueries(ctx context.Context, panelMap map[string]interface{}, // Get panel datasource var panelDatasource *dashv2alpha1.DashboardDataSourceRef - ds, dsExists := panelMap["datasource"] + if ds, ok := panelMap["datasource"].(map[string]interface{}); ok { + dsUID := schemaversion.GetStringValue(ds, "uid") + dsType := schemaversion.GetStringValue(ds, "type") - if dsExists && ds != nil { - if dsMap, ok := ds.(map[string]interface{}); ok { - // Handle panel datasource as object - dsUID := schemaversion.GetStringValue(dsMap, "uid") - dsType := schemaversion.GetStringValue(dsMap, "type") + // If we have a UID, use it to get the correct type from the datasource service + // BUT: Don't try to resolve types for template variables + if dsUID != "" && dsType == "" && !isTemplateVariable(dsUID) { + dsType = getDatasourceTypeByUID(ctx, dsUID, dsIndexProvider) + } else if dsUID == "" && dsType == "" { + // If no UID and no type, use default + dsType = getDefaultDatasourceType(ctx, dsIndexProvider) + } - // Check if datasource object is effectively empty (no uid and no type) - // Empty objects {} should be preserved as empty, not converted to defaults - isEmpty := dsUID == "" && dsType == "" - - // If we have a UID, use it to get the correct type from the datasource service - // BUT: Don't try to resolve types for template variables - if dsUID != "" && dsType == "" && !isTemplateVariable(dsUID) { - dsType = getDatasourceTypeByUID(ctx, dsUID, dsIndexProvider) - } else if !isEmpty && dsUID == "" && dsType == "" { - // Only set default if datasource is missing (not empty object) - // Empty objects {} should remain empty - dsType = getDefaultDatasourceType(ctx, dsIndexProvider) - } - - // Resolve Grafana datasource UID when type is "datasource" and UID is empty - // Only resolve if we have a type (not for empty objects) - if !isEmpty { - dsUID = resolveGrafanaDatasourceUID(dsType, dsUID) - } - - // Only create panelDatasource if it's not empty after resolution - // Empty objects {} should result in nil panelDatasource - // After resolution, check if we have a type or UID (not just the original isEmpty) - // This ensures that type: "datasource" with empty UID gets resolved to uid: "grafana" - // and panelDatasource is created - if dsType != "" || dsUID != "" { - panelDatasource = &dashv2alpha1.DashboardDataSourceRef{ - Type: &dsType, - Uid: &dsUID, - } - } + panelDatasource = &dashv2alpha1.DashboardDataSourceRef{ + Type: &dsType, + Uid: &dsUID, } } @@ -1955,24 +1918,12 @@ func transformSingleQuery(ctx context.Context, targetMap map[string]interface{}, queryDatasourceUID = schemaversion.GetStringValue(ds, "uid") queryDatasourceType = schemaversion.GetStringValue(ds, "type") - // If target datasource is empty object {} (no uid and no type), treat it as missing - // and fall through to use panel datasource (matches frontend behavior in v36 migration) - if queryDatasourceUID == "" && queryDatasourceType == "" { - // Empty datasource object - will use panel datasource below - } else { - // If we have a UID, use it to get the correct type from the datasource service - // BUT: Don't try to resolve types for template variables - if queryDatasourceUID != "" && queryDatasourceType == "" && !isTemplateVariable(queryDatasourceUID) { - queryDatasourceType = getDatasourceTypeByUID(ctx, queryDatasourceUID, dsIndexProvider) - } - - // Resolve Grafana datasource UID when type is "datasource" and UID is empty - queryDatasourceUID = resolveGrafanaDatasourceUID(queryDatasourceType, queryDatasourceUID) + // If we have a UID, use it to get the correct type from the datasource service + // BUT: Don't try to resolve types for template variables + if queryDatasourceUID != "" && queryDatasourceType == "" && !isTemplateVariable(queryDatasourceUID) { + queryDatasourceType = getDatasourceTypeByUID(ctx, queryDatasourceUID, dsIndexProvider) } - } - - // Use panel datasource if target datasource is missing or empty - if queryDatasourceUID == "" && queryDatasourceType == "" && panelDatasource != nil { + } else if panelDatasource != nil { // Only use panel datasource if it's not a mixed datasource // Mixed datasources should not be propagated to individual queries if panelDatasource.Uid != nil && *panelDatasource.Uid != "-- Mixed --" { @@ -1980,10 +1931,6 @@ func transformSingleQuery(ctx context.Context, targetMap map[string]interface{}, queryDatasourceType = *panelDatasource.Type } queryDatasourceUID = *panelDatasource.Uid - } else if panelDatasource.Type != nil && *panelDatasource.Type == "datasource" { - // Handle case where panel datasource has type "datasource" but no UID - queryDatasourceType = *panelDatasource.Type - queryDatasourceUID = resolveGrafanaDatasourceUID(*panelDatasource.Type, "") } } diff --git a/apps/dashboard/pkg/migration/conversion/v1beta1_to_v2alpha1_test.go b/apps/dashboard/pkg/migration/conversion/v1beta1_to_v2alpha1_test.go deleted file mode 100644 index 6bbdf1ca214..00000000000 --- a/apps/dashboard/pkg/migration/conversion/v1beta1_to_v2alpha1_test.go +++ /dev/null @@ -1,228 +0,0 @@ -package conversion - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "k8s.io/apimachinery/pkg/runtime" - - dashv1 "github.com/grafana/grafana/apps/dashboard/pkg/apis/dashboard/v1beta1" - dashv2alpha1 "github.com/grafana/grafana/apps/dashboard/pkg/apis/dashboard/v2alpha1" - "github.com/grafana/grafana/apps/dashboard/pkg/migration" - migrationtestutil "github.com/grafana/grafana/apps/dashboard/pkg/migration/testutil" - "github.com/grafana/grafana/pkg/tsdb/grafanads" -) - -// TestV1beta1ToV2alpha1 tests conversion from v1beta1 to v2alpha1 with various datasource scenarios -func TestV1beta1ToV2alpha1(t *testing.T) { - // Initialize the migrator with test providers - dsProvider := migrationtestutil.NewDataSourceProvider(migrationtestutil.StandardTestConfig) - leProvider := migrationtestutil.NewLibraryElementProvider() - migration.Initialize(dsProvider, leProvider) - - // Set up conversion scheme - scheme := runtime.NewScheme() - err := RegisterConversions(scheme, dsProvider, leProvider) - require.NoError(t, err) - - testCases := []struct { - name string - createV1beta1 func() *dashv1.Dashboard - validateV2alpha1 func(t *testing.T, v2alpha1 *dashv2alpha1.Dashboard) - }{ - { - name: "panel datasource type datasource with no UID - resolves to grafana UID", - createV1beta1: func() *dashv1.Dashboard { - return &dashv1.Dashboard{ - Spec: dashv1.DashboardSpec{ - Object: map[string]interface{}{ - "title": "Test Dashboard", - "panels": []interface{}{ - map[string]interface{}{ - "id": 1, - "type": "bargauge", - // Panel datasource has type: "datasource" but no UID - "datasource": map[string]interface{}{ - "type": "datasource", - // No "uid" field - }, - "targets": []interface{}{ - map[string]interface{}{ - "refId": "A", - "scenarioId": "random_walk", - // Target datasource is empty object {} - "datasource": map[string]interface{}{}, - }, - }, - }, - }, - }, - }, - } - }, - validateV2alpha1: func(t *testing.T, v2alpha1 *dashv2alpha1.Dashboard) { - require.NotNil(t, v2alpha1.Spec.Elements["panel-1"]) - panel := v2alpha1.Spec.Elements["panel-1"].PanelKind - require.NotNil(t, panel) - - // Verify queries have datasource with UID resolved to "grafana" - require.Len(t, panel.Spec.Data.Spec.Queries, 1) - query := panel.Spec.Data.Spec.Queries[0] - require.NotNil(t, query.Spec.Datasource, "Query should have datasource") - - // Verify datasource type is "datasource" - assert.NotNil(t, query.Spec.Datasource.Type) - assert.Equal(t, "datasource", *query.Spec.Datasource.Type) - - // Verify datasource UID is resolved to "grafana" - assert.NotNil(t, query.Spec.Datasource.Uid) - assert.Equal(t, grafanads.DatasourceUID, *query.Spec.Datasource.Uid, "type: 'datasource' with no UID should resolve to uid: 'grafana'") - - // Verify query kind matches datasource type - assert.Equal(t, "datasource", query.Spec.Query.Kind) - }, - }, - { - name: "empty target datasource objects inherit from panel datasource", - createV1beta1: func() *dashv1.Dashboard { - return &dashv1.Dashboard{ - Spec: dashv1.DashboardSpec{ - Object: map[string]interface{}{ - "title": "Test Dashboard", - "panels": []interface{}{ - map[string]interface{}{ - "id": 1, - "type": "bargauge", - // Panel datasource is set - "datasource": map[string]interface{}{ - "type": "prometheus", - "uid": "prometheus-uid", - }, - "targets": []interface{}{ - map[string]interface{}{ - "refId": "A", - "scenarioId": "random_walk", - // Target datasource is empty object {} - should inherit from panel - "datasource": map[string]interface{}{}, - }, - map[string]interface{}{ - "refId": "B", - "scenarioId": "random_walk", - "datasource": map[string]interface{}{}, - }, - }, - }, - }, - }, - }, - } - }, - validateV2alpha1: func(t *testing.T, v2alpha1 *dashv2alpha1.Dashboard) { - require.NotNil(t, v2alpha1.Spec.Elements["panel-1"]) - panel := v2alpha1.Spec.Elements["panel-1"].PanelKind - require.NotNil(t, panel) - - // Verify queries inherit panel datasource - require.Len(t, panel.Spec.Data.Spec.Queries, 2) - for _, query := range panel.Spec.Data.Spec.Queries { - require.NotNil(t, query.Spec.Datasource, "Query should inherit datasource from panel when target datasource is empty") - assert.Equal(t, "prometheus", *query.Spec.Datasource.Type) - assert.Equal(t, "prometheus-uid", *query.Spec.Datasource.Uid) - assert.Equal(t, "prometheus", query.Spec.Query.Kind) - } - }, - }, - { - name: "panel datasource null without empty target datasource objects - no default set", - createV1beta1: func() *dashv1.Dashboard { - return &dashv1.Dashboard{ - Spec: dashv1.DashboardSpec{ - Object: map[string]interface{}{ - "title": "Test Dashboard", - "panels": []interface{}{ - map[string]interface{}{ - "id": 1, - "type": "bargauge", - // Panel datasource is null - "datasource": nil, - "targets": []interface{}{ - map[string]interface{}{ - "refId": "A", - "scenarioId": "random_walk", - // Target has no datasource field at all (not even empty object) - }, - }, - }, - }, - }, - }, - } - }, - validateV2alpha1: func(t *testing.T, v2alpha1 *dashv2alpha1.Dashboard) { - require.NotNil(t, v2alpha1.Spec.Elements["panel-1"]) - panel := v2alpha1.Spec.Elements["panel-1"].PanelKind - require.NotNil(t, panel) - - // Verify queries don't have datasource when panel is null and targets don't have empty datasource objects - require.Len(t, panel.Spec.Data.Spec.Queries, 1) - query := panel.Spec.Data.Spec.Queries[0] - // Query should not have datasource when panel datasource is null and target doesn't have empty datasource object - assert.Nil(t, query.Spec.Datasource, "Query should not have datasource when panel datasource is null and target has no empty datasource object") - }, - }, - { - name: "empty panel datasource object preserved as empty", - createV1beta1: func() *dashv1.Dashboard { - return &dashv1.Dashboard{ - Spec: dashv1.DashboardSpec{ - Object: map[string]interface{}{ - "title": "Test Dashboard", - "panels": []interface{}{ - map[string]interface{}{ - "id": 1, - "type": "bargauge", - // Panel datasource is empty object {} - should be preserved as empty - "datasource": map[string]interface{}{}, - "targets": []interface{}{ - map[string]interface{}{ - "refId": "A", - "scenarioId": "random_walk", - "datasource": map[string]interface{}{}, - }, - }, - }, - }, - }, - }, - } - }, - validateV2alpha1: func(t *testing.T, v2alpha1 *dashv2alpha1.Dashboard) { - require.NotNil(t, v2alpha1.Spec.Elements["panel-1"]) - panel := v2alpha1.Spec.Elements["panel-1"].PanelKind - require.NotNil(t, panel) - - // Verify queries don't have datasource when panel datasource is empty object {} - require.Len(t, panel.Spec.Data.Spec.Queries, 1) - query := panel.Spec.Data.Spec.Queries[0] - // Empty objects {} should be preserved as empty, not converted to defaults - assert.Nil(t, query.Spec.Datasource, "Query should not have datasource when panel datasource is empty object {}") - assert.Equal(t, "", query.Spec.Query.Kind, "Query kind should be empty when datasource is empty object {}") - }, - }, - } - - for _, tt := range testCases { - t.Run(tt.name, func(t *testing.T) { - v1beta1Dash := tt.createV1beta1() - - // Convert to v2alpha1 - var v2alpha1Dash dashv2alpha1.Dashboard - err := scheme.Convert(v1beta1Dash, &v2alpha1Dash, nil) - require.NoError(t, err) - - // Validate the conversion result - tt.validateV2alpha1(t, &v2alpha1Dash) - }) - } -} diff --git a/go.work.sum b/go.work.sum index c588f44718e..7cec67c61e5 100644 --- a/go.work.sum +++ b/go.work.sum @@ -72,7 +72,6 @@ cloud.google.com/go/cloudtasks v1.13.6/go.mod h1:/IDaQqGKMixD+ayM43CfsvWF2k36Geo cloud.google.com/go/compute v1.40.0 h1:dlEzKo/BtyEGNc+SflXwwoBh52dNl/A5BaSYurT0k0k= cloud.google.com/go/compute v1.40.0/go.mod h1:P1doTJnlwurJDzIQFMp4mgU+vyCe9HU2NWTlqTfq3MY= cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= -cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= cloud.google.com/go/compute/metadata v0.8.0/go.mod h1:sYOGTp851OV9bOFJ9CH7elVvyzopvWQFNNghtDQ/Biw= cloud.google.com/go/contactcenterinsights v1.17.3 h1:lenyU3uzHwKDveCwmpfNxHYvLS3uEBWdn+O7+rSxy+Q= cloud.google.com/go/contactcenterinsights v1.17.3/go.mod h1:7Uu2CpxS3f6XxhRdlEzYAkrChpR5P5QfcdGAFEdHOG8= @@ -309,7 +308,6 @@ github.com/GoogleCloudPlatform/cloudsql-proxy v1.37.8/go.mod h1:exon/I6I+5u/ab7A github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.3 h1:2afWGsMzkIcN8Qm4mgPJKZWyroE5QBszMiDMYEBrnfw= github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.3/go.mod h1:dppbR7CwXD4pgtV9t3wD1812RaLDcBjtblcDF5f1vI0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0/go.mod h1:BnBReJLvVYx2CS/UHOgVz2BXKXD9wsQPxZug20nZhd0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.29.0 h1:YVtMlmfRUTaWs3+1acwMBp7rBUo6zrxl6Kn13/R9YW4= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.29.0/go.mod h1:rKOFVIPbNs2wZeh7ZeQ0D9p/XLgbNiTr5m7x6KuAshk= @@ -549,7 +547,6 @@ github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nC github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= -github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c h1:2zRrJWIt/f9c9HhNHAgrRgq0San5gRRUJTBXLkchal0= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= @@ -705,9 +702,7 @@ github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRr github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/proto v1.10.0/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A= -github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= github.com/envoyproxy/go-control-plane/envoy v1.32.3/go.mod h1:F6hWupPfh75TBXGKA++MCT/CZHFq5r9/uwt/kQYkZfE= -github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -754,7 +749,6 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA= -github.com/go-jose/go-jose/v4 v4.1.2/go.mod h1:22cg9HWM1pOlnRiY+9cQYJ9XHmya1bYW8OeDM6Ku6Oo= github.com/go-json-experiment/json v0.0.0-20250211171154-1ae217ad3535 h1:yE7argOs92u+sSCRgqqe6eF+cDaVhSPlioy1UkA0p/w= github.com/go-json-experiment/json v0.0.0-20250211171154-1ae217ad3535/go.mod h1:BWmvoE1Xia34f3l/ibJweyhrT+aROb/FQ6d+37F0e2s= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= @@ -872,7 +866,6 @@ github.com/grafana/grafana-app-sdk v0.41.0 h1:SYHN3U7B1myRKY3UZZDkFsue9TDmAOap0U github.com/grafana/grafana-app-sdk v0.41.0/go.mod h1:Wg/3vEZfok1hhIWiHaaJm+FwkosfO98o8KbeLFEnZpY= github.com/grafana/grafana-app-sdk v0.46.0/go.mod h1:LCTrqR1SwBS13XGVYveBmM7giJDDjzuXK+M9VzPuPWc= github.com/grafana/grafana-app-sdk v0.47.0/go.mod h1:kywXmkppq0oReUMzkjTW8Fq2EBzyN7v914jttTWnWxA= -github.com/grafana/grafana-app-sdk v0.48.2/go.mod h1:LDOvQ7OOyHLcXdSa0InATCa5OMoYAd6E1+rGLrMgHuk= github.com/grafana/grafana-app-sdk/logging v0.38.0/go.mod h1:Y/bvbDhBiV/tkIle9RW49pgfSPIPSON8Q4qjx3pyqDk= github.com/grafana/grafana-app-sdk/logging v0.39.0 h1:3GgN5+dUZYqq74Q+GT9/ET+yo+V54zWQk/Q2/JsJQB4= github.com/grafana/grafana-app-sdk/logging v0.39.0/go.mod h1:WhDENSnaGHtyVVwZGVnAR7YLvh2xlLDYR3D7E6h7XVk= @@ -886,7 +879,6 @@ github.com/grafana/grafana-app-sdk/logging v0.45.0/go.mod h1:Gh/nBWnspK3oDNWtiM5 github.com/grafana/grafana-app-sdk/logging v0.46.0/go.mod h1:Gh/nBWnspK3oDNWtiM5qUF/fardHzOIEez+SPI3JeHA= github.com/grafana/grafana-app-sdk/logging v0.48.0 h1:xolkQxBlA2LQF4hprKIAeu+zUem1DigYZ6XC1TOhFJE= github.com/grafana/grafana-app-sdk/logging v0.48.0/go.mod h1:Gh/nBWnspK3oDNWtiM5qUF/fardHzOIEez+SPI3JeHA= -github.com/grafana/grafana-app-sdk/logging v0.48.1/go.mod h1:Gh/nBWnspK3oDNWtiM5qUF/fardHzOIEez+SPI3JeHA= github.com/grafana/grafana-app-sdk/logging v0.48.2 h1:tI+a9slUvxKUgweXDzUqkca2LWV3g1UdaSvwt8nQNHg= github.com/grafana/grafana-app-sdk/logging v0.48.2/go.mod h1:Gh/nBWnspK3oDNWtiM5qUF/fardHzOIEez+SPI3JeHA= github.com/grafana/grafana-app-sdk/plugin v0.41.0 h1:ShUvGpAVzM3UxcsfwS6l/lwW4ytDeTbCQXf8w2P8Yp8= @@ -1436,7 +1428,6 @@ github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmq github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= -github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad h1:fiWzISvDn0Csy5H0iwgAuJGQTUpVfEMJJd4nRFXogbc= github.com/stefanberger/go-pkcs11uri v0.0.0-20230803200340-78284954bff6/go.mod h1:39R/xuhNgVhi+K0/zst4TLrJrVmbm6LVgl4A0+ZFS5M= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= @@ -1792,7 +1783,6 @@ go.opentelemetry.io/contrib/config v0.14.0/go.mod h1:77rDmFPqBae5jtQ2C78RuDTHz4P go.opentelemetry.io/contrib/detectors/aws/ec2 v1.37.0 h1:BJnWw8+FULhuuF/6R6B/JYqAlCTCy9E4J8qmLpo/7KU= go.opentelemetry.io/contrib/detectors/aws/ec2 v1.37.0/go.mod h1:gs3y8jvJscW5D+FzrZvJZEsGj+xlMCF0S1x4R6ktiNo= go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k= -go.opentelemetry.io/contrib/detectors/gcp v1.37.0/go.mod h1:K5zQ3TT7p2ru9Qkzk0bKtCql0RGkPj9pRjpXgZJZ+rU= go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho v0.59.0 h1:I8k9HW4yl8SRYNmECKKtjhcOvq9lAP9riqYPixBU3qw= go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho v0.59.0/go.mod h1:/vTiuiSKBQAerQeMB3CsVJbXd+cvTbhcdOk5AV5Z5R0= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.45.0/go.mod h1:vsh3ySueQCiKPxFLvjWC4Z135gIa34TQ/NSqkDTZYUM= @@ -2080,7 +2070,6 @@ google.golang.org/genproto/googleapis/api v0.0.0-20250728155136-f173205681a0/go. google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:oDOGiMSXHL4sDTJvFvIB9nRQCGdLP1o/iVaqQK8zB+M= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE= -google.golang.org/genproto/googleapis/api v0.0.0-20250908214217-97024824d090/go.mod h1:U8EXRNSd8sUYyDfs/It7KVWodQr+Hf9xtxyxWudSwEw= google.golang.org/genproto/googleapis/api v0.0.0-20250929231259-57b25ae835d4/go.mod h1:NnuHhy+bxcg30o7FnVAZbXsPHUDQ9qKWAQKCD7VxFtk= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250603155806-513f23925822 h1:zWFRixYR5QlotL+Uv3YfsPRENIrQFXiGs+iwqel6fOQ= google.golang.org/genproto/googleapis/bytestream v0.0.0-20250603155806-513f23925822/go.mod h1:h6yxum/C2qRb4txaZRLDHK8RyS0H/o2oEDeKY4onY/Y= @@ -2110,7 +2099,6 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go. google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1/go.mod h1:GmFNa4BdJZ2a8G+wCe9Bg3wwThLrJun751XstdJt5Og= google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090/go.mod h1:GmFNa4BdJZ2a8G+wCe9Bg3wwThLrJun751XstdJt5Og= google.golang.org/genproto/googleapis/rpc v0.0.0-20250929231259-57b25ae835d4/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20251014184007-4626949a642f/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= @@ -2131,7 +2119,6 @@ google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7E google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= -google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20 h1:MLBCGN1O7GzIx+cBiwfYPwtmZ41U3Mn/cotLJciaArI= google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20/go.mod h1:Nr5H8+MlGWr5+xX/STzdoEqJrO+YteqFbMyCsrb6mH0= @@ -2252,4 +2239,4 @@ sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= sigs.k8s.io/yaml v1.5.0/go.mod h1:wZs27Rbxoai4C0f8/9urLZtZtF3avA3gKvGyPdDqTO4= tags.cncf.io/container-device-interface v0.7.2/go.mod h1:Xb1PvXv2BhfNb3tla4r9JL129ck1Lxv9KuU6eVOfKto= tags.cncf.io/container-device-interface/specs-go v0.7.0/go.mod h1:hMAwAbMZyBLdmYqWgYcKH0F/yctNpV3P35f+/088A80= -xorm.io/builder v0.3.6/go.mod h1:LEFAPISnRzG+zxaxj2vPicRwz67BdhFreKg8yv8/TgU= +xorm.io/builder v0.3.6/go.mod h1:LEFAPISnRzG+zxaxj2vPicRwz67BdhFreKg8yv8/TgU= \ No newline at end of file