Compare commits
2 Commits
njvrzm/err
...
fast
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f209249f68 | ||
|
|
199cbe0e18 |
1
.github/actions/change-detection/action.yml
vendored
1
.github/actions/change-detection/action.yml
vendored
@@ -95,6 +95,7 @@ runs:
|
|||||||
- 'nx.json'
|
- 'nx.json'
|
||||||
- 'tsconfig.json'
|
- 'tsconfig.json'
|
||||||
- '.yarn/**'
|
- '.yarn/**'
|
||||||
|
- 'apps/dashboard/pkg/migration/**'
|
||||||
- '${{ inputs.self }}'
|
- '${{ inputs.self }}'
|
||||||
e2e:
|
e2e:
|
||||||
- 'e2e/**'
|
- 'e2e/**'
|
||||||
|
|||||||
@@ -300,15 +300,9 @@
|
|||||||
"y": 0
|
"y": 0
|
||||||
},
|
},
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"options": {
|
"options": {},
|
||||||
"code": {
|
"content": "# Graph panel \u003e\u003e Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
||||||
"language": "plaintext",
|
"mode": "markdown",
|
||||||
"showLineNumbers": false,
|
|
||||||
"showMiniMap": false
|
|
||||||
},
|
|
||||||
"content": "# Graph panel \u003e\u003e Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
|
||||||
"mode": "markdown"
|
|
||||||
},
|
|
||||||
"pluginVersion": "11.0.0-pre",
|
"pluginVersion": "11.0.0-pre",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
|
|||||||
156
apps/dashboard/pkg/migration/conversion/testdata/input/v1beta1.panel-target-missing-refid.json
vendored
Normal file
156
apps/dashboard/pkg/migration/conversion/testdata/input/v1beta1.panel-target-missing-refid.json
vendored
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
{
|
||||||
|
"apiVersion": "dashboard.grafana.app/v1beta1",
|
||||||
|
"kind": "Dashboard",
|
||||||
|
"metadata": {
|
||||||
|
"name": "ad5vfcn",
|
||||||
|
"namespace": "default",
|
||||||
|
"uid": "dlMZZl6GndU8gJLUQSmgZxXBPCNXyXhNBeQJhHXl0r4X",
|
||||||
|
"resourceVersion": "2",
|
||||||
|
"generation": 2,
|
||||||
|
"creationTimestamp": "2025-11-28T10:14:21Z",
|
||||||
|
"labels": {
|
||||||
|
"grafana.app/deprecatedInternalID": "288"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"grafana.app/createdBy": "user:eex2ofwuj0agwd",
|
||||||
|
"grafana.app/updatedBy": "user:eex2ofwuj0agwd",
|
||||||
|
"grafana.app/updatedTimestamp": "2025-11-28T10:15:06Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"annotations": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"builtIn": 1,
|
||||||
|
"datasource": {
|
||||||
|
"type": "grafana",
|
||||||
|
"uid": "-- Grafana --"
|
||||||
|
},
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations & Alerts",
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"editable": true,
|
||||||
|
"fiscalYearStartMonth": 0,
|
||||||
|
"graphTooltip": 0,
|
||||||
|
"id": 288,
|
||||||
|
"links": [],
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "gdev-testdata"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisBorderShow": false,
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"barWidthFactor": 0.6,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 0,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"insertNulls": false,
|
||||||
|
"lineInterpolation": "linear",
|
||||||
|
"lineWidth": 1,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "auto",
|
||||||
|
"showValues": false,
|
||||||
|
"spanNulls": false,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "none"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 1,
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "12.4.0-pre",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {},
|
||||||
|
"queryType": "randomWalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {},
|
||||||
|
"queryType": "randomWalk"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "New panel",
|
||||||
|
"type": "timeseries"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"preload": false,
|
||||||
|
"schemaVersion": 42,
|
||||||
|
"tags": [],
|
||||||
|
"templating": {
|
||||||
|
"list": []
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"from": "now-6h",
|
||||||
|
"to": "now"
|
||||||
|
},
|
||||||
|
"timepicker": {},
|
||||||
|
"timezone": "browser",
|
||||||
|
"title": "Panel ds inheritance ",
|
||||||
|
"uid": "ad5vfcn",
|
||||||
|
"version": 2
|
||||||
|
},
|
||||||
|
"status": {}
|
||||||
|
}
|
||||||
864
apps/dashboard/pkg/migration/conversion/testdata/input/v2beta1.value-mapping-and-overrides.json
vendored
Normal file
864
apps/dashboard/pkg/migration/conversion/testdata/input/v2beta1.value-mapping-and-overrides.json
vendored
Normal file
@@ -0,0 +1,864 @@
|
|||||||
|
{
|
||||||
|
"kind": "DashboardWithAccessInfo",
|
||||||
|
"apiVersion": "dashboard.grafana.app/v2beta1",
|
||||||
|
"metadata": {
|
||||||
|
"name": "value-mapping-test",
|
||||||
|
"namespace": "default",
|
||||||
|
"uid": "value-mapping-test",
|
||||||
|
"resourceVersion": "1765384157199094",
|
||||||
|
"generation": 2,
|
||||||
|
"creationTimestamp": "2025-11-19T20:09:28Z",
|
||||||
|
"labels": {
|
||||||
|
"grafana.app/deprecatedInternalID": "646372978987008"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"annotations": [
|
||||||
|
{
|
||||||
|
"kind": "AnnotationQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "DataQuery",
|
||||||
|
"group": "grafana",
|
||||||
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "-- Grafana --"
|
||||||
|
},
|
||||||
|
"spec": {}
|
||||||
|
},
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations \u0026 Alerts",
|
||||||
|
"builtIn": true,
|
||||||
|
"legacyOptions": {
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cursorSync": "Off",
|
||||||
|
"description": "Test dashboard for all value mapping types and override matcher types",
|
||||||
|
"editable": true,
|
||||||
|
"elements": {
|
||||||
|
"panel-1": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 1,
|
||||||
|
"title": "ValueMap Example",
|
||||||
|
"description": "Panel with ValueMap mapping type - maps specific text values to colors and display text",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "DataQuery",
|
||||||
|
"group": "prometheus",
|
||||||
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"expr": "up"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "VizConfig",
|
||||||
|
"group": "stat",
|
||||||
|
"version": "",
|
||||||
|
"spec": {
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"type": "value",
|
||||||
|
"options": {
|
||||||
|
"critical": {
|
||||||
|
"text": "Critical!",
|
||||||
|
"color": "red",
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
"ok": {
|
||||||
|
"text": "OK",
|
||||||
|
"color": "green",
|
||||||
|
"index": 2
|
||||||
|
},
|
||||||
|
"warning": {
|
||||||
|
"text": "Warning",
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "status"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.width",
|
||||||
|
"value": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom.align",
|
||||||
|
"value": "center"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel-2": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 2,
|
||||||
|
"title": "RangeMap Example",
|
||||||
|
"description": "Panel with RangeMap mapping type - maps numerical ranges to colors and display text",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "DataQuery",
|
||||||
|
"group": "prometheus",
|
||||||
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"expr": "cpu_usage_percent"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "VizConfig",
|
||||||
|
"group": "gauge",
|
||||||
|
"version": "",
|
||||||
|
"spec": {
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"type": "range",
|
||||||
|
"options": {
|
||||||
|
"from": 0,
|
||||||
|
"to": 50,
|
||||||
|
"result": {
|
||||||
|
"text": "Low",
|
||||||
|
"color": "green",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "range",
|
||||||
|
"options": {
|
||||||
|
"from": 50,
|
||||||
|
"to": 80,
|
||||||
|
"result": {
|
||||||
|
"text": "Medium",
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "range",
|
||||||
|
"options": {
|
||||||
|
"from": 80,
|
||||||
|
"to": 100,
|
||||||
|
"result": {
|
||||||
|
"text": "High",
|
||||||
|
"color": "red",
|
||||||
|
"index": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byRegexp",
|
||||||
|
"options": "/^cpu_/"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "unit",
|
||||||
|
"value": "percent"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "decimals",
|
||||||
|
"value": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel-3": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 3,
|
||||||
|
"title": "RegexMap Example",
|
||||||
|
"description": "Panel with RegexMap mapping type - maps values matching regex patterns to colors",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "DataQuery",
|
||||||
|
"group": "prometheus",
|
||||||
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"expr": "log_level"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "VizConfig",
|
||||||
|
"group": "stat",
|
||||||
|
"version": "",
|
||||||
|
"spec": {
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"type": "regex",
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^error.*/",
|
||||||
|
"result": {
|
||||||
|
"text": "Error",
|
||||||
|
"color": "red",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "regex",
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^warn.*/",
|
||||||
|
"result": {
|
||||||
|
"text": "Warning",
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "regex",
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^info.*/",
|
||||||
|
"result": {
|
||||||
|
"text": "Info",
|
||||||
|
"color": "blue",
|
||||||
|
"index": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byType",
|
||||||
|
"options": "string"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.cellOptions",
|
||||||
|
"value": {
|
||||||
|
"type": "color-text"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel-4": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 4,
|
||||||
|
"title": "SpecialValueMap Example",
|
||||||
|
"description": "Panel with SpecialValueMap mapping type - maps special values like null, NaN, true, false to display text",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "DataQuery",
|
||||||
|
"group": "prometheus",
|
||||||
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"expr": "some_metric"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "VizConfig",
|
||||||
|
"group": "stat",
|
||||||
|
"version": "",
|
||||||
|
"spec": {
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "null",
|
||||||
|
"result": {
|
||||||
|
"text": "No Data",
|
||||||
|
"color": "gray",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "nan",
|
||||||
|
"result": {
|
||||||
|
"text": "Not a Number",
|
||||||
|
"color": "gray",
|
||||||
|
"index": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "null+nan",
|
||||||
|
"result": {
|
||||||
|
"text": "N/A",
|
||||||
|
"color": "gray",
|
||||||
|
"index": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "true",
|
||||||
|
"result": {
|
||||||
|
"text": "Yes",
|
||||||
|
"color": "green",
|
||||||
|
"index": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "false",
|
||||||
|
"result": {
|
||||||
|
"text": "No",
|
||||||
|
"color": "red",
|
||||||
|
"index": 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "empty",
|
||||||
|
"result": {
|
||||||
|
"text": "Empty",
|
||||||
|
"color": "gray",
|
||||||
|
"index": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byFrameRefID",
|
||||||
|
"options": "A"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "color",
|
||||||
|
"value": {
|
||||||
|
"fixedColor": "blue",
|
||||||
|
"mode": "fixed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel-6": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 6,
|
||||||
|
"title": "Empty Properties Override Example",
|
||||||
|
"description": "Panel with override that has empty properties array - tests conversion of overrides without any property modifications",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "DataQuery",
|
||||||
|
"group": "prometheus",
|
||||||
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"expr": "empty_override_metric"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "VizConfig",
|
||||||
|
"group": "stat",
|
||||||
|
"version": "",
|
||||||
|
"spec": {
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "field_with_empty_override"
|
||||||
|
},
|
||||||
|
"properties": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel-5": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 5,
|
||||||
|
"title": "Combined Mappings and Overrides Example",
|
||||||
|
"description": "Panel with all mapping types combined - demonstrates mixing different mapping types and multiple override matchers",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "DataQuery",
|
||||||
|
"group": "prometheus",
|
||||||
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"expr": "combined_metric"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "DataQuery",
|
||||||
|
"group": "prometheus",
|
||||||
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"expr": "secondary_metric"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"refId": "B",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "VizConfig",
|
||||||
|
"group": "table",
|
||||||
|
"version": "",
|
||||||
|
"spec": {
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"type": "value",
|
||||||
|
"options": {
|
||||||
|
"failure": {
|
||||||
|
"text": "Failure",
|
||||||
|
"color": "red",
|
||||||
|
"index": 1
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"text": "Success",
|
||||||
|
"color": "green",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "range",
|
||||||
|
"options": {
|
||||||
|
"from": 0,
|
||||||
|
"to": 100,
|
||||||
|
"result": {
|
||||||
|
"text": "In Range",
|
||||||
|
"color": "blue",
|
||||||
|
"index": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "regex",
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^[A-Z]{3}-\\d+$/",
|
||||||
|
"result": {
|
||||||
|
"text": "ID Format",
|
||||||
|
"color": "purple",
|
||||||
|
"index": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "null",
|
||||||
|
"result": {
|
||||||
|
"text": "Missing",
|
||||||
|
"color": "gray",
|
||||||
|
"index": 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "status"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.width",
|
||||||
|
"value": 120
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom.cellOptions",
|
||||||
|
"value": {
|
||||||
|
"type": "color-background"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byRegexp",
|
||||||
|
"options": "/^value_/"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "unit",
|
||||||
|
"value": "short"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "min",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "max",
|
||||||
|
"value": 100
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byType",
|
||||||
|
"options": "number"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "decimals",
|
||||||
|
"value": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "thresholds",
|
||||||
|
"value": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "yellow",
|
||||||
|
"value": 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byFrameRefID",
|
||||||
|
"options": "B"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "displayName",
|
||||||
|
"value": "Secondary Query"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byValue",
|
||||||
|
"options": {
|
||||||
|
"op": "gte",
|
||||||
|
"reducer": "allIsNull",
|
||||||
|
"value": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.hidden",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"layout": {
|
||||||
|
"kind": "GridLayout",
|
||||||
|
"spec": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 12,
|
||||||
|
"y": 0,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 12,
|
||||||
|
"y": 8,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"width": 24,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-5"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-6"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": [],
|
||||||
|
"liveNow": false,
|
||||||
|
"preload": false,
|
||||||
|
"tags": [
|
||||||
|
"value-mapping",
|
||||||
|
"overrides",
|
||||||
|
"test"
|
||||||
|
],
|
||||||
|
"timeSettings": {
|
||||||
|
"timezone": "browser",
|
||||||
|
"from": "now-6h",
|
||||||
|
"to": "now",
|
||||||
|
"autoRefresh": "",
|
||||||
|
"autoRefreshIntervals": [
|
||||||
|
"5s",
|
||||||
|
"10s",
|
||||||
|
"30s",
|
||||||
|
"1m",
|
||||||
|
"5m",
|
||||||
|
"15m",
|
||||||
|
"30m",
|
||||||
|
"1h",
|
||||||
|
"2h",
|
||||||
|
"1d"
|
||||||
|
],
|
||||||
|
"hideTimepicker": false,
|
||||||
|
"fiscalYearStartMonth": 0
|
||||||
|
},
|
||||||
|
"title": "Value Mapping and Overrides Test",
|
||||||
|
"variables": []
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"conversion": {
|
||||||
|
"failed": false,
|
||||||
|
"storedVersion": "v1beta1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -743,7 +743,9 @@
|
|||||||
"text": "prod",
|
"text": "prod",
|
||||||
"value": "prod"
|
"value": "prod"
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": {
|
||||||
|
"uid": "$datasource"
|
||||||
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": true,
|
"includeAll": true,
|
||||||
"label": "cluster",
|
"label": "cluster",
|
||||||
@@ -764,7 +766,9 @@
|
|||||||
"text": "prod",
|
"text": "prod",
|
||||||
"value": "prod"
|
"value": "prod"
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": {
|
||||||
|
"uid": "$datasource"
|
||||||
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "namespace",
|
"label": "namespace",
|
||||||
|
|||||||
@@ -961,8 +961,12 @@
|
|||||||
"hide": "dontHide",
|
"hide": "dontHide",
|
||||||
"refresh": "onDashboardLoad",
|
"refresh": "onDashboardLoad",
|
||||||
"skipUrlSync": false,
|
"skipUrlSync": false,
|
||||||
|
"datasource": {
|
||||||
|
"type": "",
|
||||||
|
"uid": "$datasource"
|
||||||
|
},
|
||||||
"query": {
|
"query": {
|
||||||
"kind": "prometheus",
|
"kind": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"__legacyStringValue": "label_values(up, job)"
|
"__legacyStringValue": "label_values(up, job)"
|
||||||
}
|
}
|
||||||
@@ -988,8 +992,12 @@
|
|||||||
"hide": "dontHide",
|
"hide": "dontHide",
|
||||||
"refresh": "onDashboardLoad",
|
"refresh": "onDashboardLoad",
|
||||||
"skipUrlSync": false,
|
"skipUrlSync": false,
|
||||||
|
"datasource": {
|
||||||
|
"type": "",
|
||||||
|
"uid": "$datasource"
|
||||||
|
},
|
||||||
"query": {
|
"query": {
|
||||||
"kind": "prometheus",
|
"kind": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"__legacyStringValue": "label_values(up{job=~\"$cluster\"}, instance)"
|
"__legacyStringValue": "label_values(up{job=~\"$cluster\"}, instance)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -978,8 +978,11 @@
|
|||||||
"skipUrlSync": false,
|
"skipUrlSync": false,
|
||||||
"query": {
|
"query": {
|
||||||
"kind": "DataQuery",
|
"kind": "DataQuery",
|
||||||
"group": "prometheus",
|
"group": "",
|
||||||
"version": "v0",
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "$datasource"
|
||||||
|
},
|
||||||
"spec": {
|
"spec": {
|
||||||
"__legacyStringValue": "label_values(up, job)"
|
"__legacyStringValue": "label_values(up, job)"
|
||||||
}
|
}
|
||||||
@@ -1007,8 +1010,11 @@
|
|||||||
"skipUrlSync": false,
|
"skipUrlSync": false,
|
||||||
"query": {
|
"query": {
|
||||||
"kind": "DataQuery",
|
"kind": "DataQuery",
|
||||||
"group": "prometheus",
|
"group": "",
|
||||||
"version": "v0",
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "$datasource"
|
||||||
|
},
|
||||||
"spec": {
|
"spec": {
|
||||||
"__legacyStringValue": "label_values(up{job=~\"$cluster\"}, instance)"
|
"__legacyStringValue": "label_values(up{job=~\"$cluster\"}, instance)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,7 +115,14 @@
|
|||||||
"kind": "logs",
|
"kind": "logs",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "logs",
|
||||||
|
"originalOptions": {
|
||||||
|
"height": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -120,7 +120,14 @@
|
|||||||
"group": "logs",
|
"group": "logs",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "logs",
|
||||||
|
"originalOptions": {
|
||||||
|
"height": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -182,7 +182,20 @@
|
|||||||
"kind": "table",
|
"kind": "table",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "table",
|
||||||
|
"originalOptions": {
|
||||||
|
"grid": {
|
||||||
|
"max": 100,
|
||||||
|
"min": 0
|
||||||
|
},
|
||||||
|
"legend": true,
|
||||||
|
"y2_format": "bytes",
|
||||||
|
"y_format": "short"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -189,7 +189,20 @@
|
|||||||
"group": "table",
|
"group": "table",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "table",
|
||||||
|
"originalOptions": {
|
||||||
|
"grid": {
|
||||||
|
"max": 100,
|
||||||
|
"min": 0
|
||||||
|
},
|
||||||
|
"legend": true,
|
||||||
|
"y2_format": "bytes",
|
||||||
|
"y_format": "short"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -435,7 +435,29 @@
|
|||||||
"kind": "table",
|
"kind": "table",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "table",
|
||||||
|
"originalOptions": {
|
||||||
|
"styles": [
|
||||||
|
{
|
||||||
|
"colors": [
|
||||||
|
"red",
|
||||||
|
"yellow",
|
||||||
|
"green"
|
||||||
|
],
|
||||||
|
"pattern": "/.*/",
|
||||||
|
"thresholds": [
|
||||||
|
"10",
|
||||||
|
"20"
|
||||||
|
],
|
||||||
|
"unit": "short"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"table": "table2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -449,7 +449,29 @@
|
|||||||
"group": "table",
|
"group": "table",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "table",
|
||||||
|
"originalOptions": {
|
||||||
|
"styles": [
|
||||||
|
{
|
||||||
|
"colors": [
|
||||||
|
"red",
|
||||||
|
"yellow",
|
||||||
|
"green"
|
||||||
|
],
|
||||||
|
"pattern": "/.*/",
|
||||||
|
"thresholds": [
|
||||||
|
"10",
|
||||||
|
"20"
|
||||||
|
],
|
||||||
|
"unit": "short"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"table": "table2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -110,7 +110,15 @@
|
|||||||
"kind": "text",
|
"kind": "text",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "# Angular Text Panel\n# $constant\n\nFor markdown syntax help: [commonmark.org/help](https://commonmark.org/help/)\n\n## $text\n\n",
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -115,7 +115,15 @@
|
|||||||
"group": "text",
|
"group": "text",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "# Angular Text Panel\n# $constant\n\nFor markdown syntax help: [commonmark.org/help](https://commonmark.org/help/)\n\n## $text\n\n",
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -361,7 +361,15 @@
|
|||||||
"kind": "text",
|
"kind": "text",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "## Data link variables overview\n\nThis dashboard presents variables that one can use when creating *data links*. All links redirect to this dashboard and this panel represents the values that were interpolated in the link that was clicked.\n\n\n#### Series variables\n1. **Name:** \u003cspan style=\"color: orange;\"\u003e$seriesName\u003c/span\u003e\n2. **label.datacenter:** \u003cspan style=\"color: orange;\"\u003e$labelDatacenter\u003c/span\u003e\n3. **label.datacenter.region:** \u003cspan style=\"color: orange;\"\u003e$labelDatacenterRegion\u003c/span\u003e\n\n#### Field variables\n1. **Name:** \u003cspan style=\"color: orange;\"\u003e$fieldName\u003c/span\u003e\n\n#### Value variables\n1. **Time:** \u003cspan style=\"color: orange;\"\u003e$valueTime\u003c/span\u003e\n2. **Numeric:** \u003cspan style=\"color: orange;\"\u003e$valueNumeric\u003c/span\u003e\n3. **Text:** \u003cspan style=\"color: orange;\"\u003e$valueText\u003c/span\u003e\n4. **Calc:** \u003cspan style=\"color: orange;\"\u003e$valueCalc\u003c/span\u003e\n\n",
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -372,7 +372,15 @@
|
|||||||
"group": "text",
|
"group": "text",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "## Data link variables overview\n\nThis dashboard presents variables that one can use when creating *data links*. All links redirect to this dashboard and this panel represents the values that were interpolated in the link that was clicked.\n\n\n#### Series variables\n1. **Name:** \u003cspan style=\"color: orange;\"\u003e$seriesName\u003c/span\u003e\n2. **label.datacenter:** \u003cspan style=\"color: orange;\"\u003e$labelDatacenter\u003c/span\u003e\n3. **label.datacenter.region:** \u003cspan style=\"color: orange;\"\u003e$labelDatacenterRegion\u003c/span\u003e\n\n#### Field variables\n1. **Name:** \u003cspan style=\"color: orange;\"\u003e$fieldName\u003c/span\u003e\n\n#### Value variables\n1. **Time:** \u003cspan style=\"color: orange;\"\u003e$valueTime\u003c/span\u003e\n2. **Numeric:** \u003cspan style=\"color: orange;\"\u003e$valueNumeric\u003c/span\u003e\n3. **Text:** \u003cspan style=\"color: orange;\"\u003e$valueText\u003c/span\u003e\n4. **Calc:** \u003cspan style=\"color: orange;\"\u003e$valueCalc\u003c/span\u003e\n\n",
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -167,7 +167,15 @@
|
|||||||
"kind": "text",
|
"kind": "text",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "## Data center = $datacenter\n\n### server = $server\n\n#### pod = $pod",
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -174,7 +174,15 @@
|
|||||||
"group": "text",
|
"group": "text",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "## Data center = $datacenter\n\n### server = $server\n\n#### pod = $pod",
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -273,7 +273,15 @@
|
|||||||
"kind": "text",
|
"kind": "text",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "## Data center = $datacenter\n\n### server = $server\n\n#### pod = $pod",
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -282,7 +282,15 @@
|
|||||||
"group": "text",
|
"group": "text",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "## Data center = $datacenter\n\n### server = $server\n\n#### pod = $pod",
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -296,6 +296,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"content": "# Graph panel \u003e\u003e Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"type": "grafana-testdata-datasource"
|
"type": "grafana-testdata-datasource"
|
||||||
},
|
},
|
||||||
@@ -306,15 +307,7 @@
|
|||||||
"y": 0
|
"y": 0
|
||||||
},
|
},
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"options": {
|
"mode": "markdown",
|
||||||
"code": {
|
|
||||||
"language": "plaintext",
|
|
||||||
"showLineNumbers": false,
|
|
||||||
"showMiniMap": false
|
|
||||||
},
|
|
||||||
"content": "# Graph panel \u003e\u003e Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
|
||||||
"mode": "markdown"
|
|
||||||
},
|
|
||||||
"pluginVersion": "11.0.0-pre",
|
"pluginVersion": "11.0.0-pre",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1256,13 +1256,13 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "11.0.0-pre",
|
"pluginVersion": "11.0.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
"code": {
|
"__angularMigration": {
|
||||||
"language": "plaintext",
|
"autoMigrateFrom": "text",
|
||||||
"showLineNumbers": false,
|
"originalOptions": {
|
||||||
"showMiniMap": false
|
"content": "# Graph panel \u003e\u003e Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
||||||
},
|
"mode": "markdown"
|
||||||
"content": "# Graph panel \u003e\u003e Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
}
|
||||||
"mode": "markdown"
|
}
|
||||||
},
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
|
|||||||
@@ -1301,13 +1301,13 @@
|
|||||||
"version": "11.0.0-pre",
|
"version": "11.0.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
"code": {
|
"__angularMigration": {
|
||||||
"language": "plaintext",
|
"autoMigrateFrom": "text",
|
||||||
"showLineNumbers": false,
|
"originalOptions": {
|
||||||
"showMiniMap": false
|
"content": "# Graph panel \u003e\u003e Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
||||||
},
|
"mode": "markdown"
|
||||||
"content": "# Graph panel \u003e\u003e Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
}
|
||||||
"mode": "markdown"
|
}
|
||||||
},
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
|
|||||||
@@ -62,6 +62,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -151,6 +157,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -241,6 +253,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -320,6 +338,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -401,6 +425,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -480,6 +510,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -559,6 +595,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -639,6 +681,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -730,6 +778,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -927,6 +981,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -1006,6 +1066,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -1085,6 +1151,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "7.4.0-pre",
|
"pluginVersion": "7.4.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
|
|||||||
@@ -67,6 +67,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -159,6 +165,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -252,6 +264,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -334,6 +352,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -418,6 +442,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -500,6 +530,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -582,6 +618,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -665,6 +707,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -759,6 +807,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -961,6 +1015,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -1043,6 +1103,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
@@ -1125,6 +1191,12 @@
|
|||||||
"version": "7.4.0-pre",
|
"version": "7.4.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "gauge",
|
||||||
|
"originalOptions": {
|
||||||
|
"nullPointMode": "null"
|
||||||
|
}
|
||||||
|
},
|
||||||
"baseColor": "#299c46",
|
"baseColor": "#299c46",
|
||||||
"reduceOptions": {
|
"reduceOptions": {
|
||||||
"calcs": [
|
"calcs": [
|
||||||
|
|||||||
@@ -412,7 +412,17 @@
|
|||||||
"kind": "text",
|
"kind": "text",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Should be a long line connecting the null region in the `connected` mode, and in zero it should just be a line with zero value at the null points. ",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -456,7 +466,17 @@
|
|||||||
"kind": "text",
|
"kind": "text",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Stacking values on top of nulls, should treat the null values as zero. ",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -500,7 +520,17 @@
|
|||||||
"kind": "text",
|
"kind": "text",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Stacking when all values are null should leave a gap in the graph",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -1681,7 +1711,17 @@
|
|||||||
"kind": "text",
|
"kind": "text",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Left is showing null between values for a normal line graph and staircase graph. Orphaned data points should be rendered as points",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -2061,7 +2101,17 @@
|
|||||||
"kind": "text",
|
"kind": "text",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Just verify that the tooltip time has millisecond resolution ",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -2105,7 +2155,17 @@
|
|||||||
"kind": "text",
|
"kind": "text",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Verify that axis labels look ok",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -429,7 +429,17 @@
|
|||||||
"group": "text",
|
"group": "text",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Should be a long line connecting the null region in the `connected` mode, and in zero it should just be a line with zero value at the null points. ",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -475,7 +485,17 @@
|
|||||||
"group": "text",
|
"group": "text",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Stacking values on top of nulls, should treat the null values as zero. ",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -521,7 +541,17 @@
|
|||||||
"group": "text",
|
"group": "text",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Stacking when all values are null should leave a gap in the graph",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -1779,7 +1809,17 @@
|
|||||||
"group": "text",
|
"group": "text",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Left is showing null between values for a normal line graph and staircase graph. Orphaned data points should be rendered as points",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -2172,7 +2212,17 @@
|
|||||||
"group": "text",
|
"group": "text",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Just verify that the tooltip time has millisecond resolution ",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -2218,7 +2268,17 @@
|
|||||||
"group": "text",
|
"group": "text",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "text",
|
||||||
|
"originalOptions": {
|
||||||
|
"content": "Verify that axis labels look ok",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"mode": "markdown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -74,7 +74,44 @@
|
|||||||
"kind": "heatmap",
|
"kind": "heatmap",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#b4ff00",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateViridis",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "spectrum"
|
||||||
|
},
|
||||||
|
"dataFormat": "timeseries",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": false,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": true
|
||||||
|
},
|
||||||
|
"tooltipDecimals": 4,
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yAxis": {
|
||||||
|
"decimals": 2,
|
||||||
|
"format": "areaM2",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -116,7 +153,46 @@
|
|||||||
"kind": "heatmap",
|
"kind": "heatmap",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {
|
||||||
|
"cardRound": 50
|
||||||
|
},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#1F60C4",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateOranges",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "opacity"
|
||||||
|
},
|
||||||
|
"dataFormat": "tsbuckets",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": false,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": false
|
||||||
|
},
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yAxis": {
|
||||||
|
"decimals": 1,
|
||||||
|
"format": "kwatt",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": true,
|
||||||
|
"width": "100"
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -158,7 +234,44 @@
|
|||||||
"kind": "heatmap",
|
"kind": "heatmap",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#1F60C4",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateOranges",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "opacity"
|
||||||
|
},
|
||||||
|
"dataFormat": "tsbuckets",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": false,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": true,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": false
|
||||||
|
},
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yAxis": {
|
||||||
|
"decimals": 1,
|
||||||
|
"format": "kwatt",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": true,
|
||||||
|
"width": "100"
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -204,7 +317,46 @@
|
|||||||
"kind": "heatmap",
|
"kind": "heatmap",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#b4ff00",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateViridis",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "spectrum"
|
||||||
|
},
|
||||||
|
"dataFormat": "timeseries",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": false,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": true
|
||||||
|
},
|
||||||
|
"tooltipDecimals": 4,
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yAxis": {
|
||||||
|
"decimals": 2,
|
||||||
|
"format": "areaM2",
|
||||||
|
"logBase": 1,
|
||||||
|
"max": "50",
|
||||||
|
"min": "20",
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -246,7 +398,44 @@
|
|||||||
"kind": "heatmap",
|
"kind": "heatmap",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#b4ff00",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateBuGn",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "spectrum"
|
||||||
|
},
|
||||||
|
"dataFormat": "timeseries",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": true,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": true
|
||||||
|
},
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"xBucketNumber": 10,
|
||||||
|
"yAxis": {
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 2,
|
||||||
|
"show": true,
|
||||||
|
"splitFactor": 2
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -288,7 +477,44 @@
|
|||||||
"kind": "heatmap",
|
"kind": "heatmap",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#b4ff00",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateBuGn",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "spectrum"
|
||||||
|
},
|
||||||
|
"dataFormat": "timeseries",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": true,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": true
|
||||||
|
},
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"xBucketNumber": 10,
|
||||||
|
"yAxis": {
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 10,
|
||||||
|
"show": true,
|
||||||
|
"splitFactor": 5
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -78,7 +78,44 @@
|
|||||||
"group": "heatmap",
|
"group": "heatmap",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#b4ff00",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateViridis",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "spectrum"
|
||||||
|
},
|
||||||
|
"dataFormat": "timeseries",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": false,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": true
|
||||||
|
},
|
||||||
|
"tooltipDecimals": 4,
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yAxis": {
|
||||||
|
"decimals": 2,
|
||||||
|
"format": "areaM2",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -123,7 +160,46 @@
|
|||||||
"group": "heatmap",
|
"group": "heatmap",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {
|
||||||
|
"cardRound": 50
|
||||||
|
},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#1F60C4",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateOranges",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "opacity"
|
||||||
|
},
|
||||||
|
"dataFormat": "tsbuckets",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": false,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": false
|
||||||
|
},
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yAxis": {
|
||||||
|
"decimals": 1,
|
||||||
|
"format": "kwatt",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": true,
|
||||||
|
"width": "100"
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -168,7 +244,44 @@
|
|||||||
"group": "heatmap",
|
"group": "heatmap",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#1F60C4",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateOranges",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "opacity"
|
||||||
|
},
|
||||||
|
"dataFormat": "tsbuckets",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": false,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": true,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": false
|
||||||
|
},
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yAxis": {
|
||||||
|
"decimals": 1,
|
||||||
|
"format": "kwatt",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": true,
|
||||||
|
"width": "100"
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -216,7 +329,46 @@
|
|||||||
"group": "heatmap",
|
"group": "heatmap",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#b4ff00",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateViridis",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "spectrum"
|
||||||
|
},
|
||||||
|
"dataFormat": "timeseries",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": false,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": true
|
||||||
|
},
|
||||||
|
"tooltipDecimals": 4,
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yAxis": {
|
||||||
|
"decimals": 2,
|
||||||
|
"format": "areaM2",
|
||||||
|
"logBase": 1,
|
||||||
|
"max": "50",
|
||||||
|
"min": "20",
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -261,7 +413,44 @@
|
|||||||
"group": "heatmap",
|
"group": "heatmap",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#b4ff00",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateBuGn",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "spectrum"
|
||||||
|
},
|
||||||
|
"dataFormat": "timeseries",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": true,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": true
|
||||||
|
},
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"xBucketNumber": 10,
|
||||||
|
"yAxis": {
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 2,
|
||||||
|
"show": true,
|
||||||
|
"splitFactor": 2
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
@@ -306,7 +495,44 @@
|
|||||||
"group": "heatmap",
|
"group": "heatmap",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#b4ff00",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateBuGn",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "spectrum"
|
||||||
|
},
|
||||||
|
"dataFormat": "timeseries",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": true,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": true
|
||||||
|
},
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"xBucketNumber": 10,
|
||||||
|
"yAxis": {
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 10,
|
||||||
|
"show": true,
|
||||||
|
"splitFactor": 5
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -665,7 +665,42 @@
|
|||||||
"kind": "heatmap",
|
"kind": "heatmap",
|
||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "",
|
"pluginVersion": "",
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#b4ff00",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateOranges",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "spectrum"
|
||||||
|
},
|
||||||
|
"dataFormat": "timeseries",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": false,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": false
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": false
|
||||||
|
},
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yAxis": {
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -691,7 +691,42 @@
|
|||||||
"group": "heatmap",
|
"group": "heatmap",
|
||||||
"version": "",
|
"version": "",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {},
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "heatmap",
|
||||||
|
"originalOptions": {
|
||||||
|
"cards": {},
|
||||||
|
"color": {
|
||||||
|
"cardColor": "#b4ff00",
|
||||||
|
"colorScale": "sqrt",
|
||||||
|
"colorScheme": "interpolateOranges",
|
||||||
|
"exponent": 0.5,
|
||||||
|
"mode": "spectrum"
|
||||||
|
},
|
||||||
|
"dataFormat": "timeseries",
|
||||||
|
"heatmap": {},
|
||||||
|
"hideZeroBuckets": false,
|
||||||
|
"highlightCards": true,
|
||||||
|
"legend": {
|
||||||
|
"show": false
|
||||||
|
},
|
||||||
|
"reverseYBuckets": false,
|
||||||
|
"tooltip": {
|
||||||
|
"show": true,
|
||||||
|
"showHistogram": false
|
||||||
|
},
|
||||||
|
"xAxis": {
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yAxis": {
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
"yBucketBound": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fieldConfig": {
|
"fieldConfig": {
|
||||||
"defaults": {},
|
"defaults": {},
|
||||||
"overrides": []
|
"overrides": []
|
||||||
|
|||||||
@@ -56,6 +56,14 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "9.0.0-pre",
|
"pluginVersion": "9.0.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": [
|
||||||
|
"panel-tests"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 1000,
|
"maxItems": 1000,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": false,
|
"showHeadings": false,
|
||||||
@@ -94,6 +102,15 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "9.0.0-pre",
|
"pluginVersion": "9.0.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": [
|
||||||
|
"gdev",
|
||||||
|
"demo"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 1000,
|
"maxItems": 1000,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": false,
|
"showHeadings": false,
|
||||||
@@ -133,6 +150,15 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "9.0.0-pre",
|
"pluginVersion": "9.0.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": [
|
||||||
|
"templating",
|
||||||
|
"gdev"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 1000,
|
"maxItems": 1000,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": false,
|
"showHeadings": false,
|
||||||
@@ -172,6 +198,15 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "9.0.0-pre",
|
"pluginVersion": "9.0.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": [
|
||||||
|
"gdev",
|
||||||
|
"datasource-test"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 1000,
|
"maxItems": 1000,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": false,
|
"showHeadings": false,
|
||||||
@@ -211,6 +246,12 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "9.0.0-pre",
|
"pluginVersion": "9.0.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": []
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 100,
|
"maxItems": 100,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": true,
|
"showHeadings": true,
|
||||||
@@ -247,6 +288,15 @@
|
|||||||
"spec": {
|
"spec": {
|
||||||
"pluginVersion": "9.0.0-pre",
|
"pluginVersion": "9.0.0-pre",
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": [
|
||||||
|
"gdev",
|
||||||
|
"demo"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 1000,
|
"maxItems": 1000,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": false,
|
"showHeadings": false,
|
||||||
|
|||||||
@@ -58,6 +58,14 @@
|
|||||||
"version": "9.0.0-pre",
|
"version": "9.0.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": [
|
||||||
|
"panel-tests"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 1000,
|
"maxItems": 1000,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": false,
|
"showHeadings": false,
|
||||||
@@ -97,6 +105,15 @@
|
|||||||
"version": "9.0.0-pre",
|
"version": "9.0.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": [
|
||||||
|
"gdev",
|
||||||
|
"demo"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 1000,
|
"maxItems": 1000,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": false,
|
"showHeadings": false,
|
||||||
@@ -137,6 +154,15 @@
|
|||||||
"version": "9.0.0-pre",
|
"version": "9.0.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": [
|
||||||
|
"templating",
|
||||||
|
"gdev"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 1000,
|
"maxItems": 1000,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": false,
|
"showHeadings": false,
|
||||||
@@ -177,6 +203,15 @@
|
|||||||
"version": "9.0.0-pre",
|
"version": "9.0.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": [
|
||||||
|
"gdev",
|
||||||
|
"datasource-test"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 1000,
|
"maxItems": 1000,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": false,
|
"showHeadings": false,
|
||||||
@@ -217,6 +252,12 @@
|
|||||||
"version": "9.0.0-pre",
|
"version": "9.0.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": []
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 100,
|
"maxItems": 100,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": true,
|
"showHeadings": true,
|
||||||
@@ -254,6 +295,15 @@
|
|||||||
"version": "9.0.0-pre",
|
"version": "9.0.0-pre",
|
||||||
"spec": {
|
"spec": {
|
||||||
"options": {
|
"options": {
|
||||||
|
"__angularMigration": {
|
||||||
|
"autoMigrateFrom": "dashlist",
|
||||||
|
"originalOptions": {
|
||||||
|
"tags": [
|
||||||
|
"gdev",
|
||||||
|
"demo"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"maxItems": 1000,
|
"maxItems": 1000,
|
||||||
"query": "",
|
"query": "",
|
||||||
"showHeadings": false,
|
"showHeadings": false,
|
||||||
|
|||||||
@@ -0,0 +1,161 @@
|
|||||||
|
{
|
||||||
|
"kind": "Dashboard",
|
||||||
|
"apiVersion": "dashboard.grafana.app/v0alpha1",
|
||||||
|
"metadata": {
|
||||||
|
"name": "ad5vfcn",
|
||||||
|
"namespace": "default",
|
||||||
|
"uid": "dlMZZl6GndU8gJLUQSmgZxXBPCNXyXhNBeQJhHXl0r4X",
|
||||||
|
"resourceVersion": "2",
|
||||||
|
"generation": 2,
|
||||||
|
"creationTimestamp": "2025-11-28T10:14:21Z",
|
||||||
|
"labels": {
|
||||||
|
"grafana.app/deprecatedInternalID": "288"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"grafana.app/createdBy": "user:eex2ofwuj0agwd",
|
||||||
|
"grafana.app/updatedBy": "user:eex2ofwuj0agwd",
|
||||||
|
"grafana.app/updatedTimestamp": "2025-11-28T10:15:06Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"annotations": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"builtIn": 1,
|
||||||
|
"datasource": {
|
||||||
|
"type": "grafana",
|
||||||
|
"uid": "-- Grafana --"
|
||||||
|
},
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations \u0026 Alerts",
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"editable": true,
|
||||||
|
"fiscalYearStartMonth": 0,
|
||||||
|
"graphTooltip": 0,
|
||||||
|
"id": 288,
|
||||||
|
"links": [],
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "gdev-testdata"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisBorderShow": false,
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"barWidthFactor": 0.6,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 0,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"insertNulls": false,
|
||||||
|
"lineInterpolation": "linear",
|
||||||
|
"lineWidth": 1,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "auto",
|
||||||
|
"showValues": false,
|
||||||
|
"spanNulls": false,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "none"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 1,
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "12.4.0-pre",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {},
|
||||||
|
"queryType": "randomWalk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {},
|
||||||
|
"queryType": "randomWalk"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "New panel",
|
||||||
|
"type": "timeseries"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"preload": false,
|
||||||
|
"schemaVersion": 42,
|
||||||
|
"tags": [],
|
||||||
|
"templating": {
|
||||||
|
"list": []
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"from": "now-6h",
|
||||||
|
"to": "now"
|
||||||
|
},
|
||||||
|
"timepicker": {},
|
||||||
|
"timezone": "browser",
|
||||||
|
"title": "Panel ds inheritance ",
|
||||||
|
"uid": "ad5vfcn",
|
||||||
|
"version": 2
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"conversion": {
|
||||||
|
"failed": false,
|
||||||
|
"storedVersion": "v1beta1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,227 @@
|
|||||||
|
{
|
||||||
|
"kind": "Dashboard",
|
||||||
|
"apiVersion": "dashboard.grafana.app/v2alpha1",
|
||||||
|
"metadata": {
|
||||||
|
"name": "ad5vfcn",
|
||||||
|
"namespace": "default",
|
||||||
|
"uid": "dlMZZl6GndU8gJLUQSmgZxXBPCNXyXhNBeQJhHXl0r4X",
|
||||||
|
"resourceVersion": "2",
|
||||||
|
"generation": 2,
|
||||||
|
"creationTimestamp": "2025-11-28T10:14:21Z",
|
||||||
|
"labels": {
|
||||||
|
"grafana.app/deprecatedInternalID": "288"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"grafana.app/createdBy": "user:eex2ofwuj0agwd",
|
||||||
|
"grafana.app/updatedBy": "user:eex2ofwuj0agwd",
|
||||||
|
"grafana.app/updatedTimestamp": "2025-11-28T10:15:06Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"annotations": [
|
||||||
|
{
|
||||||
|
"kind": "AnnotationQuery",
|
||||||
|
"spec": {
|
||||||
|
"datasource": {
|
||||||
|
"type": "grafana",
|
||||||
|
"uid": "-- Grafana --"
|
||||||
|
},
|
||||||
|
"query": {
|
||||||
|
"kind": "grafana",
|
||||||
|
"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-1": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 1,
|
||||||
|
"title": "New panel",
|
||||||
|
"description": "",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "testdata",
|
||||||
|
"spec": {
|
||||||
|
"queryType": "randomWalk"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "gdev-testdata"
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "testdata",
|
||||||
|
"spec": {
|
||||||
|
"queryType": "randomWalk"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "gdev-testdata"
|
||||||
|
},
|
||||||
|
"refId": "B",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "timeseries",
|
||||||
|
"spec": {
|
||||||
|
"pluginVersion": "12.4.0-pre",
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"value": 0,
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": 80,
|
||||||
|
"color": "red"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisBorderShow": false,
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"barWidthFactor": 0.6,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 0,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"insertNulls": false,
|
||||||
|
"lineInterpolation": "linear",
|
||||||
|
"lineWidth": 1,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "auto",
|
||||||
|
"showValues": false,
|
||||||
|
"spanNulls": false,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "none"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"layout": {
|
||||||
|
"kind": "GridLayout",
|
||||||
|
"spec": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": [],
|
||||||
|
"liveNow": false,
|
||||||
|
"preload": false,
|
||||||
|
"tags": [],
|
||||||
|
"timeSettings": {
|
||||||
|
"timezone": "browser",
|
||||||
|
"from": "now-6h",
|
||||||
|
"to": "now",
|
||||||
|
"autoRefresh": "",
|
||||||
|
"autoRefreshIntervals": [
|
||||||
|
"5s",
|
||||||
|
"10s",
|
||||||
|
"30s",
|
||||||
|
"1m",
|
||||||
|
"5m",
|
||||||
|
"15m",
|
||||||
|
"30m",
|
||||||
|
"1h",
|
||||||
|
"2h",
|
||||||
|
"1d"
|
||||||
|
],
|
||||||
|
"hideTimepicker": false,
|
||||||
|
"fiscalYearStartMonth": 0
|
||||||
|
},
|
||||||
|
"title": "Panel ds inheritance ",
|
||||||
|
"variables": []
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"conversion": {
|
||||||
|
"failed": false,
|
||||||
|
"storedVersion": "v1beta1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,231 @@
|
|||||||
|
{
|
||||||
|
"kind": "Dashboard",
|
||||||
|
"apiVersion": "dashboard.grafana.app/v2beta1",
|
||||||
|
"metadata": {
|
||||||
|
"name": "ad5vfcn",
|
||||||
|
"namespace": "default",
|
||||||
|
"uid": "dlMZZl6GndU8gJLUQSmgZxXBPCNXyXhNBeQJhHXl0r4X",
|
||||||
|
"resourceVersion": "2",
|
||||||
|
"generation": 2,
|
||||||
|
"creationTimestamp": "2025-11-28T10:14:21Z",
|
||||||
|
"labels": {
|
||||||
|
"grafana.app/deprecatedInternalID": "288"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"grafana.app/createdBy": "user:eex2ofwuj0agwd",
|
||||||
|
"grafana.app/updatedBy": "user:eex2ofwuj0agwd",
|
||||||
|
"grafana.app/updatedTimestamp": "2025-11-28T10:15:06Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"annotations": [
|
||||||
|
{
|
||||||
|
"kind": "AnnotationQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "DataQuery",
|
||||||
|
"group": "grafana",
|
||||||
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "-- Grafana --"
|
||||||
|
},
|
||||||
|
"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-1": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 1,
|
||||||
|
"title": "New panel",
|
||||||
|
"description": "",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "DataQuery",
|
||||||
|
"group": "testdata",
|
||||||
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "gdev-testdata"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"queryType": "randomWalk"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "DataQuery",
|
||||||
|
"group": "testdata",
|
||||||
|
"version": "v0",
|
||||||
|
"datasource": {
|
||||||
|
"name": "gdev-testdata"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"queryType": "randomWalk"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"refId": "B",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "VizConfig",
|
||||||
|
"group": "timeseries",
|
||||||
|
"version": "12.4.0-pre",
|
||||||
|
"spec": {
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"value": 0,
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": 80,
|
||||||
|
"color": "red"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisBorderShow": false,
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"barWidthFactor": 0.6,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 0,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"insertNulls": false,
|
||||||
|
"lineInterpolation": "linear",
|
||||||
|
"lineWidth": 1,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "auto",
|
||||||
|
"showValues": false,
|
||||||
|
"spanNulls": false,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "none"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"layout": {
|
||||||
|
"kind": "GridLayout",
|
||||||
|
"spec": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": [],
|
||||||
|
"liveNow": false,
|
||||||
|
"preload": false,
|
||||||
|
"tags": [],
|
||||||
|
"timeSettings": {
|
||||||
|
"timezone": "browser",
|
||||||
|
"from": "now-6h",
|
||||||
|
"to": "now",
|
||||||
|
"autoRefresh": "",
|
||||||
|
"autoRefreshIntervals": [
|
||||||
|
"5s",
|
||||||
|
"10s",
|
||||||
|
"30s",
|
||||||
|
"1m",
|
||||||
|
"5m",
|
||||||
|
"15m",
|
||||||
|
"30m",
|
||||||
|
"1h",
|
||||||
|
"2h",
|
||||||
|
"1d"
|
||||||
|
],
|
||||||
|
"hideTimepicker": false,
|
||||||
|
"fiscalYearStartMonth": 0
|
||||||
|
},
|
||||||
|
"title": "Panel ds inheritance ",
|
||||||
|
"variables": []
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"conversion": {
|
||||||
|
"failed": false,
|
||||||
|
"storedVersion": "v1beta1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,640 @@
|
|||||||
|
{
|
||||||
|
"kind": "DashboardWithAccessInfo",
|
||||||
|
"apiVersion": "dashboard.grafana.app/v0alpha1",
|
||||||
|
"metadata": {
|
||||||
|
"name": "value-mapping-test",
|
||||||
|
"namespace": "default",
|
||||||
|
"uid": "value-mapping-test",
|
||||||
|
"resourceVersion": "1765384157199094",
|
||||||
|
"generation": 2,
|
||||||
|
"creationTimestamp": "2025-11-19T20:09:28Z",
|
||||||
|
"labels": {
|
||||||
|
"grafana.app/deprecatedInternalID": "646372978987008"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"annotations": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"builtIn": 1,
|
||||||
|
"datasource": {
|
||||||
|
"type": "grafana",
|
||||||
|
"uid": "-- Grafana --"
|
||||||
|
},
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations \u0026 Alerts",
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"description": "Test dashboard for all value mapping types and override matcher types",
|
||||||
|
"editable": true,
|
||||||
|
"fiscalYearStartMonth": 0,
|
||||||
|
"graphTooltip": 0,
|
||||||
|
"liveNow": false,
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"description": "Panel with ValueMap mapping type - maps specific text values to colors and display text",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"critical": {
|
||||||
|
"color": "red",
|
||||||
|
"index": 0,
|
||||||
|
"text": "Critical!"
|
||||||
|
},
|
||||||
|
"ok": {
|
||||||
|
"color": "green",
|
||||||
|
"index": 2,
|
||||||
|
"text": "OK"
|
||||||
|
},
|
||||||
|
"warning": {
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1,
|
||||||
|
"text": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "value"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "status"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.width",
|
||||||
|
"value": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom.align",
|
||||||
|
"value": "center"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 1,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "up",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "ValueMap Example",
|
||||||
|
"type": "stat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Panel with RangeMap mapping type - maps numerical ranges to colors and display text",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"from": 0,
|
||||||
|
"result": {
|
||||||
|
"color": "green",
|
||||||
|
"index": 0,
|
||||||
|
"text": "Low"
|
||||||
|
},
|
||||||
|
"to": 50
|
||||||
|
},
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"from": 50,
|
||||||
|
"result": {
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1,
|
||||||
|
"text": "Medium"
|
||||||
|
},
|
||||||
|
"to": 80
|
||||||
|
},
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"from": 80,
|
||||||
|
"result": {
|
||||||
|
"color": "red",
|
||||||
|
"index": 2,
|
||||||
|
"text": "High"
|
||||||
|
},
|
||||||
|
"to": 100
|
||||||
|
},
|
||||||
|
"type": "range"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byRegexp",
|
||||||
|
"options": "/^cpu_/"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "unit",
|
||||||
|
"value": "percent"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "decimals",
|
||||||
|
"value": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 2,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "cpu_usage_percent",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "RangeMap Example",
|
||||||
|
"type": "gauge"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Panel with RegexMap mapping type - maps values matching regex patterns to colors",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^error.*/",
|
||||||
|
"result": {
|
||||||
|
"color": "red",
|
||||||
|
"index": 0,
|
||||||
|
"text": "Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "regex"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^warn.*/",
|
||||||
|
"result": {
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1,
|
||||||
|
"text": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "regex"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^info.*/",
|
||||||
|
"result": {
|
||||||
|
"color": "blue",
|
||||||
|
"index": 2,
|
||||||
|
"text": "Info"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "regex"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byType",
|
||||||
|
"options": "string"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.cellOptions",
|
||||||
|
"value": {
|
||||||
|
"type": "color-text"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 8
|
||||||
|
},
|
||||||
|
"id": 3,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "log_level",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "RegexMap Example",
|
||||||
|
"type": "stat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Panel with SpecialValueMap mapping type - maps special values like null, NaN, true, false to display text",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "null",
|
||||||
|
"result": {
|
||||||
|
"color": "gray",
|
||||||
|
"index": 0,
|
||||||
|
"text": "No Data"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "nan",
|
||||||
|
"result": {
|
||||||
|
"color": "gray",
|
||||||
|
"index": 1,
|
||||||
|
"text": "Not a Number"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "null+nan",
|
||||||
|
"result": {
|
||||||
|
"color": "gray",
|
||||||
|
"index": 2,
|
||||||
|
"text": "N/A"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "true",
|
||||||
|
"result": {
|
||||||
|
"color": "green",
|
||||||
|
"index": 3,
|
||||||
|
"text": "Yes"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "false",
|
||||||
|
"result": {
|
||||||
|
"color": "red",
|
||||||
|
"index": 4,
|
||||||
|
"text": "No"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "empty",
|
||||||
|
"result": {
|
||||||
|
"color": "gray",
|
||||||
|
"index": 5,
|
||||||
|
"text": "Empty"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byFrameRefID",
|
||||||
|
"options": "A"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "color",
|
||||||
|
"value": {
|
||||||
|
"fixedColor": "blue",
|
||||||
|
"mode": "fixed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 8
|
||||||
|
},
|
||||||
|
"id": 4,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "some_metric",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "SpecialValueMap Example",
|
||||||
|
"type": "stat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Panel with all mapping types combined - demonstrates mixing different mapping types and multiple override matchers",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"failure": {
|
||||||
|
"color": "red",
|
||||||
|
"index": 1,
|
||||||
|
"text": "Failure"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"color": "green",
|
||||||
|
"index": 0,
|
||||||
|
"text": "Success"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "value"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"from": 0,
|
||||||
|
"result": {
|
||||||
|
"color": "blue",
|
||||||
|
"index": 2,
|
||||||
|
"text": "In Range"
|
||||||
|
},
|
||||||
|
"to": 100
|
||||||
|
},
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^[A-Z]{3}-\\d+$/",
|
||||||
|
"result": {
|
||||||
|
"color": "purple",
|
||||||
|
"index": 3,
|
||||||
|
"text": "ID Format"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "regex"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "null",
|
||||||
|
"result": {
|
||||||
|
"color": "gray",
|
||||||
|
"index": 4,
|
||||||
|
"text": "Missing"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "status"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.width",
|
||||||
|
"value": 120
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom.cellOptions",
|
||||||
|
"value": {
|
||||||
|
"type": "color-background"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byRegexp",
|
||||||
|
"options": "/^value_/"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "unit",
|
||||||
|
"value": "short"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "min",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "max",
|
||||||
|
"value": 100
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byType",
|
||||||
|
"options": "number"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "decimals",
|
||||||
|
"value": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "thresholds",
|
||||||
|
"value": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "yellow",
|
||||||
|
"value": 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byFrameRefID",
|
||||||
|
"options": "B"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "displayName",
|
||||||
|
"value": "Secondary Query"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byValue",
|
||||||
|
"options": {
|
||||||
|
"op": "gte",
|
||||||
|
"reducer": "allIsNull",
|
||||||
|
"value": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.hidden",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 24,
|
||||||
|
"x": 0,
|
||||||
|
"y": 16
|
||||||
|
},
|
||||||
|
"id": 5,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "combined_metric",
|
||||||
|
"refId": "A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "secondary_metric",
|
||||||
|
"refId": "B"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Combined Mappings and Overrides Example",
|
||||||
|
"type": "table"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Panel with override that has empty properties array - tests conversion of overrides without any property modifications",
|
||||||
|
"fieldConfig": {
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "field_with_empty_override"
|
||||||
|
},
|
||||||
|
"properties": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 24
|
||||||
|
},
|
||||||
|
"id": 6,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "empty_override_metric",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Empty Properties Override Example",
|
||||||
|
"type": "stat"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"preload": false,
|
||||||
|
"refresh": "",
|
||||||
|
"schemaVersion": 42,
|
||||||
|
"tags": [
|
||||||
|
"value-mapping",
|
||||||
|
"overrides",
|
||||||
|
"test"
|
||||||
|
],
|
||||||
|
"time": {
|
||||||
|
"from": "now-6h",
|
||||||
|
"to": "now"
|
||||||
|
},
|
||||||
|
"timepicker": {
|
||||||
|
"refresh_intervals": [
|
||||||
|
"5s",
|
||||||
|
"10s",
|
||||||
|
"30s",
|
||||||
|
"1m",
|
||||||
|
"5m",
|
||||||
|
"15m",
|
||||||
|
"30m",
|
||||||
|
"1h",
|
||||||
|
"2h",
|
||||||
|
"1d"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"timezone": "browser",
|
||||||
|
"title": "Value Mapping and Overrides Test"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"conversion": {
|
||||||
|
"failed": false,
|
||||||
|
"storedVersion": "v2beta1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,640 @@
|
|||||||
|
{
|
||||||
|
"kind": "DashboardWithAccessInfo",
|
||||||
|
"apiVersion": "dashboard.grafana.app/v1beta1",
|
||||||
|
"metadata": {
|
||||||
|
"name": "value-mapping-test",
|
||||||
|
"namespace": "default",
|
||||||
|
"uid": "value-mapping-test",
|
||||||
|
"resourceVersion": "1765384157199094",
|
||||||
|
"generation": 2,
|
||||||
|
"creationTimestamp": "2025-11-19T20:09:28Z",
|
||||||
|
"labels": {
|
||||||
|
"grafana.app/deprecatedInternalID": "646372978987008"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"annotations": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"builtIn": 1,
|
||||||
|
"datasource": {
|
||||||
|
"type": "grafana",
|
||||||
|
"uid": "-- Grafana --"
|
||||||
|
},
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations \u0026 Alerts",
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"description": "Test dashboard for all value mapping types and override matcher types",
|
||||||
|
"editable": true,
|
||||||
|
"fiscalYearStartMonth": 0,
|
||||||
|
"graphTooltip": 0,
|
||||||
|
"liveNow": false,
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"description": "Panel with ValueMap mapping type - maps specific text values to colors and display text",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"critical": {
|
||||||
|
"color": "red",
|
||||||
|
"index": 0,
|
||||||
|
"text": "Critical!"
|
||||||
|
},
|
||||||
|
"ok": {
|
||||||
|
"color": "green",
|
||||||
|
"index": 2,
|
||||||
|
"text": "OK"
|
||||||
|
},
|
||||||
|
"warning": {
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1,
|
||||||
|
"text": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "value"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "status"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.width",
|
||||||
|
"value": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom.align",
|
||||||
|
"value": "center"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 1,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "up",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "ValueMap Example",
|
||||||
|
"type": "stat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Panel with RangeMap mapping type - maps numerical ranges to colors and display text",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"from": 0,
|
||||||
|
"result": {
|
||||||
|
"color": "green",
|
||||||
|
"index": 0,
|
||||||
|
"text": "Low"
|
||||||
|
},
|
||||||
|
"to": 50
|
||||||
|
},
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"from": 50,
|
||||||
|
"result": {
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1,
|
||||||
|
"text": "Medium"
|
||||||
|
},
|
||||||
|
"to": 80
|
||||||
|
},
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"from": 80,
|
||||||
|
"result": {
|
||||||
|
"color": "red",
|
||||||
|
"index": 2,
|
||||||
|
"text": "High"
|
||||||
|
},
|
||||||
|
"to": 100
|
||||||
|
},
|
||||||
|
"type": "range"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byRegexp",
|
||||||
|
"options": "/^cpu_/"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "unit",
|
||||||
|
"value": "percent"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "decimals",
|
||||||
|
"value": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 2,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "cpu_usage_percent",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "RangeMap Example",
|
||||||
|
"type": "gauge"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Panel with RegexMap mapping type - maps values matching regex patterns to colors",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^error.*/",
|
||||||
|
"result": {
|
||||||
|
"color": "red",
|
||||||
|
"index": 0,
|
||||||
|
"text": "Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "regex"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^warn.*/",
|
||||||
|
"result": {
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1,
|
||||||
|
"text": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "regex"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^info.*/",
|
||||||
|
"result": {
|
||||||
|
"color": "blue",
|
||||||
|
"index": 2,
|
||||||
|
"text": "Info"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "regex"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byType",
|
||||||
|
"options": "string"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.cellOptions",
|
||||||
|
"value": {
|
||||||
|
"type": "color-text"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 8
|
||||||
|
},
|
||||||
|
"id": 3,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "log_level",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "RegexMap Example",
|
||||||
|
"type": "stat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Panel with SpecialValueMap mapping type - maps special values like null, NaN, true, false to display text",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "null",
|
||||||
|
"result": {
|
||||||
|
"color": "gray",
|
||||||
|
"index": 0,
|
||||||
|
"text": "No Data"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "nan",
|
||||||
|
"result": {
|
||||||
|
"color": "gray",
|
||||||
|
"index": 1,
|
||||||
|
"text": "Not a Number"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "null+nan",
|
||||||
|
"result": {
|
||||||
|
"color": "gray",
|
||||||
|
"index": 2,
|
||||||
|
"text": "N/A"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "true",
|
||||||
|
"result": {
|
||||||
|
"color": "green",
|
||||||
|
"index": 3,
|
||||||
|
"text": "Yes"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "false",
|
||||||
|
"result": {
|
||||||
|
"color": "red",
|
||||||
|
"index": 4,
|
||||||
|
"text": "No"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "empty",
|
||||||
|
"result": {
|
||||||
|
"color": "gray",
|
||||||
|
"index": 5,
|
||||||
|
"text": "Empty"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byFrameRefID",
|
||||||
|
"options": "A"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "color",
|
||||||
|
"value": {
|
||||||
|
"fixedColor": "blue",
|
||||||
|
"mode": "fixed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 8
|
||||||
|
},
|
||||||
|
"id": 4,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "some_metric",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "SpecialValueMap Example",
|
||||||
|
"type": "stat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Panel with all mapping types combined - demonstrates mixing different mapping types and multiple override matchers",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"failure": {
|
||||||
|
"color": "red",
|
||||||
|
"index": 1,
|
||||||
|
"text": "Failure"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"color": "green",
|
||||||
|
"index": 0,
|
||||||
|
"text": "Success"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "value"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"from": 0,
|
||||||
|
"result": {
|
||||||
|
"color": "blue",
|
||||||
|
"index": 2,
|
||||||
|
"text": "In Range"
|
||||||
|
},
|
||||||
|
"to": 100
|
||||||
|
},
|
||||||
|
"type": "range"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^[A-Z]{3}-\\d+$/",
|
||||||
|
"result": {
|
||||||
|
"color": "purple",
|
||||||
|
"index": 3,
|
||||||
|
"text": "ID Format"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "regex"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "null",
|
||||||
|
"result": {
|
||||||
|
"color": "gray",
|
||||||
|
"index": 4,
|
||||||
|
"text": "Missing"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "status"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.width",
|
||||||
|
"value": 120
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom.cellOptions",
|
||||||
|
"value": {
|
||||||
|
"type": "color-background"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byRegexp",
|
||||||
|
"options": "/^value_/"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "unit",
|
||||||
|
"value": "short"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "min",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "max",
|
||||||
|
"value": 100
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byType",
|
||||||
|
"options": "number"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "decimals",
|
||||||
|
"value": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "thresholds",
|
||||||
|
"value": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "yellow",
|
||||||
|
"value": 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byFrameRefID",
|
||||||
|
"options": "B"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "displayName",
|
||||||
|
"value": "Secondary Query"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byValue",
|
||||||
|
"options": {
|
||||||
|
"op": "gte",
|
||||||
|
"reducer": "allIsNull",
|
||||||
|
"value": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.hidden",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 24,
|
||||||
|
"x": 0,
|
||||||
|
"y": 16
|
||||||
|
},
|
||||||
|
"id": 5,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "combined_metric",
|
||||||
|
"refId": "A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "secondary_metric",
|
||||||
|
"refId": "B"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Combined Mappings and Overrides Example",
|
||||||
|
"type": "table"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Panel with override that has empty properties array - tests conversion of overrides without any property modifications",
|
||||||
|
"fieldConfig": {
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "field_with_empty_override"
|
||||||
|
},
|
||||||
|
"properties": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 24
|
||||||
|
},
|
||||||
|
"id": 6,
|
||||||
|
"options": {},
|
||||||
|
"pluginVersion": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"expr": "empty_override_metric",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Empty Properties Override Example",
|
||||||
|
"type": "stat"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"preload": false,
|
||||||
|
"refresh": "",
|
||||||
|
"schemaVersion": 42,
|
||||||
|
"tags": [
|
||||||
|
"value-mapping",
|
||||||
|
"overrides",
|
||||||
|
"test"
|
||||||
|
],
|
||||||
|
"time": {
|
||||||
|
"from": "now-6h",
|
||||||
|
"to": "now"
|
||||||
|
},
|
||||||
|
"timepicker": {
|
||||||
|
"refresh_intervals": [
|
||||||
|
"5s",
|
||||||
|
"10s",
|
||||||
|
"30s",
|
||||||
|
"1m",
|
||||||
|
"5m",
|
||||||
|
"15m",
|
||||||
|
"30m",
|
||||||
|
"1h",
|
||||||
|
"2h",
|
||||||
|
"1d"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"timezone": "browser",
|
||||||
|
"title": "Value Mapping and Overrides Test"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"conversion": {
|
||||||
|
"failed": false,
|
||||||
|
"storedVersion": "v2beta1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,850 @@
|
|||||||
|
{
|
||||||
|
"kind": "DashboardWithAccessInfo",
|
||||||
|
"apiVersion": "dashboard.grafana.app/v2alpha1",
|
||||||
|
"metadata": {
|
||||||
|
"name": "value-mapping-test",
|
||||||
|
"namespace": "default",
|
||||||
|
"uid": "value-mapping-test",
|
||||||
|
"resourceVersion": "1765384157199094",
|
||||||
|
"generation": 2,
|
||||||
|
"creationTimestamp": "2025-11-19T20:09:28Z",
|
||||||
|
"labels": {
|
||||||
|
"grafana.app/deprecatedInternalID": "646372978987008"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"annotations": [
|
||||||
|
{
|
||||||
|
"kind": "AnnotationQuery",
|
||||||
|
"spec": {
|
||||||
|
"datasource": {
|
||||||
|
"type": "grafana",
|
||||||
|
"uid": "-- Grafana --"
|
||||||
|
},
|
||||||
|
"query": {
|
||||||
|
"kind": "grafana",
|
||||||
|
"spec": {}
|
||||||
|
},
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations \u0026 Alerts",
|
||||||
|
"builtIn": true,
|
||||||
|
"legacyOptions": {
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cursorSync": "Off",
|
||||||
|
"description": "Test dashboard for all value mapping types and override matcher types",
|
||||||
|
"editable": true,
|
||||||
|
"elements": {
|
||||||
|
"panel-1": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 1,
|
||||||
|
"title": "ValueMap Example",
|
||||||
|
"description": "Panel with ValueMap mapping type - maps specific text values to colors and display text",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "prometheus",
|
||||||
|
"spec": {
|
||||||
|
"expr": "up"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "stat",
|
||||||
|
"spec": {
|
||||||
|
"pluginVersion": "",
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"type": "value",
|
||||||
|
"options": {
|
||||||
|
"critical": {
|
||||||
|
"text": "Critical!",
|
||||||
|
"color": "red",
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
"ok": {
|
||||||
|
"text": "OK",
|
||||||
|
"color": "green",
|
||||||
|
"index": 2
|
||||||
|
},
|
||||||
|
"warning": {
|
||||||
|
"text": "Warning",
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "status"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.width",
|
||||||
|
"value": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom.align",
|
||||||
|
"value": "center"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel-2": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 2,
|
||||||
|
"title": "RangeMap Example",
|
||||||
|
"description": "Panel with RangeMap mapping type - maps numerical ranges to colors and display text",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "prometheus",
|
||||||
|
"spec": {
|
||||||
|
"expr": "cpu_usage_percent"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "gauge",
|
||||||
|
"spec": {
|
||||||
|
"pluginVersion": "",
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"type": "range",
|
||||||
|
"options": {
|
||||||
|
"from": 0,
|
||||||
|
"to": 50,
|
||||||
|
"result": {
|
||||||
|
"text": "Low",
|
||||||
|
"color": "green",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "range",
|
||||||
|
"options": {
|
||||||
|
"from": 50,
|
||||||
|
"to": 80,
|
||||||
|
"result": {
|
||||||
|
"text": "Medium",
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "range",
|
||||||
|
"options": {
|
||||||
|
"from": 80,
|
||||||
|
"to": 100,
|
||||||
|
"result": {
|
||||||
|
"text": "High",
|
||||||
|
"color": "red",
|
||||||
|
"index": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byRegexp",
|
||||||
|
"options": "/^cpu_/"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "unit",
|
||||||
|
"value": "percent"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "decimals",
|
||||||
|
"value": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel-3": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 3,
|
||||||
|
"title": "RegexMap Example",
|
||||||
|
"description": "Panel with RegexMap mapping type - maps values matching regex patterns to colors",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "prometheus",
|
||||||
|
"spec": {
|
||||||
|
"expr": "log_level"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "stat",
|
||||||
|
"spec": {
|
||||||
|
"pluginVersion": "",
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"type": "regex",
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^error.*/",
|
||||||
|
"result": {
|
||||||
|
"text": "Error",
|
||||||
|
"color": "red",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "regex",
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^warn.*/",
|
||||||
|
"result": {
|
||||||
|
"text": "Warning",
|
||||||
|
"color": "orange",
|
||||||
|
"index": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "regex",
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^info.*/",
|
||||||
|
"result": {
|
||||||
|
"text": "Info",
|
||||||
|
"color": "blue",
|
||||||
|
"index": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byType",
|
||||||
|
"options": "string"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.cellOptions",
|
||||||
|
"value": {
|
||||||
|
"type": "color-text"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel-4": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 4,
|
||||||
|
"title": "SpecialValueMap Example",
|
||||||
|
"description": "Panel with SpecialValueMap mapping type - maps special values like null, NaN, true, false to display text",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "prometheus",
|
||||||
|
"spec": {
|
||||||
|
"expr": "some_metric"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "stat",
|
||||||
|
"spec": {
|
||||||
|
"pluginVersion": "",
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "null",
|
||||||
|
"result": {
|
||||||
|
"text": "No Data",
|
||||||
|
"color": "gray",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "nan",
|
||||||
|
"result": {
|
||||||
|
"text": "Not a Number",
|
||||||
|
"color": "gray",
|
||||||
|
"index": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "null+nan",
|
||||||
|
"result": {
|
||||||
|
"text": "N/A",
|
||||||
|
"color": "gray",
|
||||||
|
"index": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "true",
|
||||||
|
"result": {
|
||||||
|
"text": "Yes",
|
||||||
|
"color": "green",
|
||||||
|
"index": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "false",
|
||||||
|
"result": {
|
||||||
|
"text": "No",
|
||||||
|
"color": "red",
|
||||||
|
"index": 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "empty",
|
||||||
|
"result": {
|
||||||
|
"text": "Empty",
|
||||||
|
"color": "gray",
|
||||||
|
"index": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byFrameRefID",
|
||||||
|
"options": "A"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "color",
|
||||||
|
"value": {
|
||||||
|
"fixedColor": "blue",
|
||||||
|
"mode": "fixed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel-5": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 5,
|
||||||
|
"title": "Combined Mappings and Overrides Example",
|
||||||
|
"description": "Panel with all mapping types combined - demonstrates mixing different mapping types and multiple override matchers",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "prometheus",
|
||||||
|
"spec": {
|
||||||
|
"expr": "combined_metric"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "prometheus",
|
||||||
|
"spec": {
|
||||||
|
"expr": "secondary_metric"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"refId": "B",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "table",
|
||||||
|
"spec": {
|
||||||
|
"pluginVersion": "",
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"type": "value",
|
||||||
|
"options": {
|
||||||
|
"failure": {
|
||||||
|
"text": "Failure",
|
||||||
|
"color": "red",
|
||||||
|
"index": 1
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"text": "Success",
|
||||||
|
"color": "green",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "range",
|
||||||
|
"options": {
|
||||||
|
"from": 0,
|
||||||
|
"to": 100,
|
||||||
|
"result": {
|
||||||
|
"text": "In Range",
|
||||||
|
"color": "blue",
|
||||||
|
"index": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "regex",
|
||||||
|
"options": {
|
||||||
|
"pattern": "/^[A-Z]{3}-\\d+$/",
|
||||||
|
"result": {
|
||||||
|
"text": "ID Format",
|
||||||
|
"color": "purple",
|
||||||
|
"index": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "special",
|
||||||
|
"options": {
|
||||||
|
"match": "null",
|
||||||
|
"result": {
|
||||||
|
"text": "Missing",
|
||||||
|
"color": "gray",
|
||||||
|
"index": 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "status"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.width",
|
||||||
|
"value": 120
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom.cellOptions",
|
||||||
|
"value": {
|
||||||
|
"type": "color-background"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byRegexp",
|
||||||
|
"options": "/^value_/"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "unit",
|
||||||
|
"value": "short"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "min",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "max",
|
||||||
|
"value": 100
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byType",
|
||||||
|
"options": "number"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "decimals",
|
||||||
|
"value": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "thresholds",
|
||||||
|
"value": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "yellow",
|
||||||
|
"value": 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byFrameRefID",
|
||||||
|
"options": "B"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "displayName",
|
||||||
|
"value": "Secondary Query"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byValue",
|
||||||
|
"options": {
|
||||||
|
"op": "gte",
|
||||||
|
"reducer": "allIsNull",
|
||||||
|
"value": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.hidden",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panel-6": {
|
||||||
|
"kind": "Panel",
|
||||||
|
"spec": {
|
||||||
|
"id": 6,
|
||||||
|
"title": "Empty Properties Override Example",
|
||||||
|
"description": "Panel with override that has empty properties array - tests conversion of overrides without any property modifications",
|
||||||
|
"links": [],
|
||||||
|
"data": {
|
||||||
|
"kind": "QueryGroup",
|
||||||
|
"spec": {
|
||||||
|
"queries": [
|
||||||
|
{
|
||||||
|
"kind": "PanelQuery",
|
||||||
|
"spec": {
|
||||||
|
"query": {
|
||||||
|
"kind": "prometheus",
|
||||||
|
"spec": {
|
||||||
|
"expr": "empty_override_metric"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "prometheus-uid"
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transformations": [],
|
||||||
|
"queryOptions": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vizConfig": {
|
||||||
|
"kind": "stat",
|
||||||
|
"spec": {
|
||||||
|
"pluginVersion": "",
|
||||||
|
"options": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "field_with_empty_override"
|
||||||
|
},
|
||||||
|
"properties": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"layout": {
|
||||||
|
"kind": "GridLayout",
|
||||||
|
"spec": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 12,
|
||||||
|
"y": 0,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 8,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 12,
|
||||||
|
"y": 8,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 16,
|
||||||
|
"width": 24,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-5"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"kind": "GridLayoutItem",
|
||||||
|
"spec": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 24,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"element": {
|
||||||
|
"kind": "ElementReference",
|
||||||
|
"name": "panel-6"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": [],
|
||||||
|
"liveNow": false,
|
||||||
|
"preload": false,
|
||||||
|
"tags": [
|
||||||
|
"value-mapping",
|
||||||
|
"overrides",
|
||||||
|
"test"
|
||||||
|
],
|
||||||
|
"timeSettings": {
|
||||||
|
"timezone": "browser",
|
||||||
|
"from": "now-6h",
|
||||||
|
"to": "now",
|
||||||
|
"autoRefresh": "",
|
||||||
|
"autoRefreshIntervals": [
|
||||||
|
"5s",
|
||||||
|
"10s",
|
||||||
|
"30s",
|
||||||
|
"1m",
|
||||||
|
"5m",
|
||||||
|
"15m",
|
||||||
|
"30m",
|
||||||
|
"1h",
|
||||||
|
"2h",
|
||||||
|
"1d"
|
||||||
|
],
|
||||||
|
"hideTimepicker": false,
|
||||||
|
"fiscalYearStartMonth": 0
|
||||||
|
},
|
||||||
|
"title": "Value Mapping and Overrides Test",
|
||||||
|
"variables": []
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"conversion": {
|
||||||
|
"failed": false,
|
||||||
|
"storedVersion": "v2beta1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ package conversion
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/conversion"
|
"k8s.io/apimachinery/pkg/conversion"
|
||||||
"k8s.io/apiserver/pkg/endpoints/request"
|
"k8s.io/apiserver/pkg/endpoints/request"
|
||||||
@@ -79,5 +80,57 @@ func ConvertDashboard_V0_to_V1beta1(in *dashv0.Dashboard, out *dashv1.Dashboard,
|
|||||||
return schemaversion.NewMigrationError(err.Error(), schemaversion.GetSchemaVersion(in.Spec.Object), schemaversion.LATEST_VERSION, "Convert_V0_to_V1")
|
return schemaversion.NewMigrationError(err.Error(), schemaversion.GetSchemaVersion(in.Spec.Object), schemaversion.LATEST_VERSION, "Convert_V0_to_V1")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Normalize template variable datasources from string to object format
|
||||||
|
// This handles legacy dashboards where query variables have datasource: "$datasource" (string)
|
||||||
|
// instead of datasource: { uid: "$datasource" } (object)
|
||||||
|
// our migration pipeline in v36 doesn't address because this was not addressed historically
|
||||||
|
// in DashboardMigrator - see public/app/features/dashboard/state/DashboardMigrator.ts#L607
|
||||||
|
// Which means that we have schemaVersion: 42 dashboards where datasource variable references are still strings
|
||||||
|
normalizeTemplateVariableDatasources(out.Spec.Object)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// normalizeTemplateVariableDatasources converts template variable string datasources to object format.
|
||||||
|
// Legacy dashboards may have query variables with datasource: "$datasource" (string).
|
||||||
|
// This normalizes them to datasource: { uid: "$datasource" } for consistent V1→V2 conversion.
|
||||||
|
func normalizeTemplateVariableDatasources(dashboard map[string]interface{}) {
|
||||||
|
templating, ok := dashboard["templating"].(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
list, ok := templating["list"].([]interface{})
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, variable := range list {
|
||||||
|
varMap, ok := variable.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
varType, _ := varMap["type"].(string)
|
||||||
|
if varType != "query" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
ds := varMap["datasource"]
|
||||||
|
if dsStr, ok := ds.(string); ok && isTemplateVariableRef(dsStr) {
|
||||||
|
// Convert string template variable reference to object format
|
||||||
|
varMap["datasource"] = map[string]interface{}{
|
||||||
|
"uid": dsStr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// isTemplateVariableRef checks if a string is a Grafana template variable reference.
|
||||||
|
// Template variables can be in the form: $varname or ${varname}
|
||||||
|
func isTemplateVariableRef(s string) bool {
|
||||||
|
if s == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return strings.HasPrefix(s, "$") || strings.HasPrefix(s, "${")
|
||||||
|
}
|
||||||
|
|||||||
@@ -1185,6 +1185,10 @@ func buildQueryVariable(ctx context.Context, varMap map[string]interface{}, comm
|
|||||||
// If no UID and no type, use default
|
// If no UID and no type, use default
|
||||||
datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider)
|
datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider)
|
||||||
}
|
}
|
||||||
|
} else if dsStr, ok := datasource.(string); ok && isTemplateVariable(dsStr) {
|
||||||
|
// Handle datasource variable reference (e.g., "$datasource")
|
||||||
|
// Only process template variables - other string values are not supported in V2 format
|
||||||
|
datasourceUID = dsStr
|
||||||
} else {
|
} else {
|
||||||
datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider)
|
datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider)
|
||||||
}
|
}
|
||||||
@@ -1532,6 +1536,10 @@ func buildAdhocVariable(ctx context.Context, varMap map[string]interface{}, comm
|
|||||||
// If no UID and no type, use default
|
// If no UID and no type, use default
|
||||||
datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider)
|
datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider)
|
||||||
}
|
}
|
||||||
|
} else if dsStr, ok := datasource.(string); ok && isTemplateVariable(dsStr) {
|
||||||
|
// Handle datasource variable reference (e.g., "$datasource")
|
||||||
|
// Only process template variables - other string values are not supported in V2 format
|
||||||
|
datasourceUID = dsStr
|
||||||
} else {
|
} else {
|
||||||
datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider)
|
datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider)
|
||||||
}
|
}
|
||||||
@@ -1709,6 +1717,10 @@ func buildGroupByVariable(ctx context.Context, varMap map[string]interface{}, co
|
|||||||
|
|
||||||
// Resolve Grafana datasource UID when type is "datasource" and UID is empty
|
// Resolve Grafana datasource UID when type is "datasource" and UID is empty
|
||||||
datasourceUID = resolveGrafanaDatasourceUID(datasourceType, datasourceUID)
|
datasourceUID = resolveGrafanaDatasourceUID(datasourceType, datasourceUID)
|
||||||
|
} else if dsStr, ok := datasource.(string); ok && isTemplateVariable(dsStr) {
|
||||||
|
// Handle datasource variable reference (e.g., "$datasource")
|
||||||
|
// Only process template variables - other string values are not supported in V2 format
|
||||||
|
datasourceUID = dsStr
|
||||||
} else {
|
} else {
|
||||||
datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider)
|
datasourceType = getDefaultDatasourceType(ctx, dsIndexProvider)
|
||||||
}
|
}
|
||||||
@@ -2006,6 +2018,28 @@ func transformPanelQueries(ctx context.Context, panelMap map[string]interface{},
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure each target has a non-empty refId. We only fill missing refIds;
|
||||||
|
existingRefIds := make(map[string]bool)
|
||||||
|
for _, target := range targets {
|
||||||
|
if targetMap, ok := target.(map[string]interface{}); ok {
|
||||||
|
if refId := schemaversion.GetStringValue(targetMap, "refId"); refId != "" {
|
||||||
|
existingRefIds[refId] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, target := range targets {
|
||||||
|
targetMap, ok := target.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
refId := schemaversion.GetStringValue(targetMap, "refId")
|
||||||
|
if refId == "" {
|
||||||
|
refId = nextAvailableRefId(existingRefIds)
|
||||||
|
targetMap["refId"] = refId
|
||||||
|
existingRefIds[refId] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
queries := make([]dashv2alpha1.DashboardPanelQueryKind, 0, len(targets))
|
queries := make([]dashv2alpha1.DashboardPanelQueryKind, 0, len(targets))
|
||||||
|
|
||||||
for _, target := range targets {
|
for _, target := range targets {
|
||||||
@@ -2018,6 +2052,27 @@ func transformPanelQueries(ctx context.Context, panelMap map[string]interface{},
|
|||||||
return queries
|
return queries
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nextAvailableRefId returns the next unused refId using the same sequence as the
|
||||||
|
// frontend helper (A, B, ..., Z, AA, AB, ...).
|
||||||
|
func nextAvailableRefId(existing map[string]bool) string {
|
||||||
|
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
|
||||||
|
var refIdFromIndex func(num int) string
|
||||||
|
refIdFromIndex = func(num int) string {
|
||||||
|
if num < len(letters) {
|
||||||
|
return string(letters[num])
|
||||||
|
}
|
||||||
|
return refIdFromIndex(num/len(letters)-1) + string(letters[num%len(letters)])
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; ; i++ {
|
||||||
|
refId := refIdFromIndex(i)
|
||||||
|
if !existing[refId] {
|
||||||
|
return refId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func transformSingleQuery(ctx context.Context, targetMap map[string]interface{}, panelDatasource *dashv2alpha1.DashboardDataSourceRef, dsIndexProvider schemaversion.DataSourceIndexProvider) dashv2alpha1.DashboardPanelQueryKind {
|
func transformSingleQuery(ctx context.Context, targetMap map[string]interface{}, panelDatasource *dashv2alpha1.DashboardDataSourceRef, dsIndexProvider schemaversion.DataSourceIndexProvider) dashv2alpha1.DashboardPanelQueryKind {
|
||||||
refId := schemaversion.GetStringValue(targetMap, "refId", "A")
|
refId := schemaversion.GetStringValue(targetMap, "refId", "A")
|
||||||
if refId == "" {
|
if refId == "" {
|
||||||
@@ -2253,20 +2308,24 @@ func buildVizConfig(panelMap map[string]interface{}) dashv2alpha1.DashboardVizCo
|
|||||||
// We check two cases:
|
// We check two cases:
|
||||||
// 1. Panel already has autoMigrateFrom set (from v0→v1 migration) - panel type already converted
|
// 1. Panel already has autoMigrateFrom set (from v0→v1 migration) - panel type already converted
|
||||||
// 2. Panel type is a known Angular panel - need to convert type AND set autoMigrateFrom
|
// 2. Panel type is a known Angular panel - need to convert type AND set autoMigrateFrom
|
||||||
|
// 3. Panel has original options - need to set autoMigrateFrom and originalOptions
|
||||||
autoMigrateFrom, hasAutoMigrateFrom := panelMap["autoMigrateFrom"].(string)
|
autoMigrateFrom, hasAutoMigrateFrom := panelMap["autoMigrateFrom"].(string)
|
||||||
|
originalOptions := extractAngularOptions(panelMap)
|
||||||
|
|
||||||
if !hasAutoMigrateFrom || autoMigrateFrom == "" {
|
if !hasAutoMigrateFrom || autoMigrateFrom == "" {
|
||||||
// Check if panel type is an Angular type that needs migration
|
// Check if panel type is an Angular type that needs migration
|
||||||
if newType := getAngularPanelMigration(panelType, panelMap); newType != "" {
|
if newType := getAngularPanelMigration(panelType, panelMap); newType != "" {
|
||||||
autoMigrateFrom = panelType // Original Angular type
|
autoMigrateFrom = panelType // Original Angular type
|
||||||
panelType = newType // New modern type
|
panelType = newType // New modern type
|
||||||
|
} else if len(originalOptions) > 0 {
|
||||||
|
autoMigrateFrom = panelType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if autoMigrateFrom != "" {
|
if autoMigrateFrom != "" {
|
||||||
options["__angularMigration"] = map[string]interface{}{
|
options["__angularMigration"] = map[string]interface{}{
|
||||||
"autoMigrateFrom": autoMigrateFrom,
|
"autoMigrateFrom": autoMigrateFrom,
|
||||||
"originalOptions": extractAngularOptions(panelMap),
|
"originalOptions": originalOptions,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -210,6 +210,48 @@ func TestV1beta1ToV2alpha1(t *testing.T) {
|
|||||||
assert.Equal(t, "", query.Spec.Query.Kind, "Query kind should be empty when datasource is empty object {}")
|
assert.Equal(t, "", query.Spec.Query.Kind, "Query kind should be empty when datasource is empty object {}")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "missing refIds are assigned while existing refIds are preserved",
|
||||||
|
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",
|
||||||
|
"targets": []interface{}{
|
||||||
|
map[string]interface{}{
|
||||||
|
"refId": "",
|
||||||
|
"scenarioId": "random_walk",
|
||||||
|
},
|
||||||
|
map[string]interface{}{
|
||||||
|
"refId": "A",
|
||||||
|
"scenarioId": "random_walk",
|
||||||
|
},
|
||||||
|
map[string]interface{}{
|
||||||
|
"refId": "",
|
||||||
|
"scenarioId": "random_walk",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
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)
|
||||||
|
|
||||||
|
require.Len(t, panel.Spec.Data.Spec.Queries, 3)
|
||||||
|
assert.Equal(t, "B", panel.Spec.Data.Spec.Queries[0].Spec.RefId)
|
||||||
|
assert.Equal(t, "A", panel.Spec.Data.Spec.Queries[1].Spec.RefId)
|
||||||
|
assert.Equal(t, "C", panel.Spec.Data.Spec.Queries[2].Spec.RefId)
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tt := range testCases {
|
for _, tt := range testCases {
|
||||||
|
|||||||
@@ -1973,16 +1973,16 @@ func convertFieldConfigOverridesToV1(overrides []dashv2alpha1.DashboardV2alpha1F
|
|||||||
"options": override.Matcher.Options,
|
"options": override.Matcher.Options,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
properties := make([]map[string]interface{}, 0, len(override.Properties))
|
||||||
if len(override.Properties) > 0 {
|
if len(override.Properties) > 0 {
|
||||||
properties := make([]map[string]interface{}, 0, len(override.Properties))
|
|
||||||
for _, prop := range override.Properties {
|
for _, prop := range override.Properties {
|
||||||
properties = append(properties, map[string]interface{}{
|
properties = append(properties, map[string]interface{}{
|
||||||
"id": prop.Id,
|
"id": prop.Id,
|
||||||
"value": prop.Value,
|
"value": prop.Value,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
overrideMap["properties"] = properties
|
|
||||||
}
|
}
|
||||||
|
overrideMap["properties"] = properties
|
||||||
|
|
||||||
result = append(result, overrideMap)
|
result = append(result, overrideMap)
|
||||||
}
|
}
|
||||||
@@ -2074,11 +2074,9 @@ func convertRegexMapToV1(regexMap *dashv2alpha1.DashboardRegexMap) map[string]in
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
options := []map[string]interface{}{
|
options := map[string]interface{}{
|
||||||
{
|
"pattern": regexMap.Options.Pattern,
|
||||||
"pattern": regexMap.Options.Pattern,
|
"result": convertValueMappingResultToV1(regexMap.Options.Result),
|
||||||
"result": convertValueMappingResultToV1(regexMap.Options.Result),
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return map[string]interface{}{
|
return map[string]interface{}{
|
||||||
|
|||||||
@@ -290,6 +290,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"content": "# Graph panel \u003e\u003e Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"type": "grafana-testdata-datasource"
|
"type": "grafana-testdata-datasource"
|
||||||
},
|
},
|
||||||
@@ -300,15 +301,7 @@
|
|||||||
"y": 0
|
"y": 0
|
||||||
},
|
},
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"options": {
|
"mode": "markdown",
|
||||||
"code": {
|
|
||||||
"language": "plaintext",
|
|
||||||
"showLineNumbers": false,
|
|
||||||
"showMiniMap": false
|
|
||||||
},
|
|
||||||
"content": "# Graph panel \u003e\u003e Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
|
||||||
"mode": "markdown"
|
|
||||||
},
|
|
||||||
"pluginVersion": "11.0.0-pre",
|
"pluginVersion": "11.0.0-pre",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -654,7 +654,9 @@
|
|||||||
"text": "prod",
|
"text": "prod",
|
||||||
"value": "prod"
|
"value": "prod"
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": {
|
||||||
|
"uid": "$datasource"
|
||||||
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": true,
|
"includeAll": true,
|
||||||
"label": "cluster",
|
"label": "cluster",
|
||||||
@@ -677,7 +679,9 @@
|
|||||||
"text": "prod",
|
"text": "prod",
|
||||||
"value": "prod"
|
"value": "prod"
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": {
|
||||||
|
"uid": "$datasource"
|
||||||
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "namespace",
|
"label": "namespace",
|
||||||
|
|||||||
@@ -737,7 +737,9 @@
|
|||||||
"text": "prod",
|
"text": "prod",
|
||||||
"value": "prod"
|
"value": "prod"
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": {
|
||||||
|
"uid": "$datasource"
|
||||||
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": true,
|
"includeAll": true,
|
||||||
"label": "cluster",
|
"label": "cluster",
|
||||||
@@ -758,7 +760,9 @@
|
|||||||
"text": "prod",
|
"text": "prod",
|
||||||
"value": "prod"
|
"value": "prod"
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": {
|
||||||
|
"uid": "$datasource"
|
||||||
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "namespace",
|
"label": "namespace",
|
||||||
|
|||||||
@@ -717,7 +717,9 @@
|
|||||||
"text": "prod",
|
"text": "prod",
|
||||||
"value": "prod"
|
"value": "prod"
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": {
|
||||||
|
"uid": "$datasource"
|
||||||
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": true,
|
"includeAll": true,
|
||||||
"label": "cluster",
|
"label": "cluster",
|
||||||
@@ -739,7 +741,9 @@
|
|||||||
"text": "prod",
|
"text": "prod",
|
||||||
"value": "prod"
|
"value": "prod"
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": {
|
||||||
|
"uid": "$datasource"
|
||||||
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "namespace",
|
"label": "namespace",
|
||||||
|
|||||||
@@ -335,6 +335,9 @@ rudderstack_data_plane_url =
|
|||||||
# Rudderstack SDK url, optional, only valid if rudderstack_write_key and rudderstack_data_plane_url is also set
|
# Rudderstack SDK url, optional, only valid if rudderstack_write_key and rudderstack_data_plane_url is also set
|
||||||
rudderstack_sdk_url =
|
rudderstack_sdk_url =
|
||||||
|
|
||||||
|
# Rudderstack v3 SDK, optional, defaults to false. If set, Rudderstack v3 SDK will be used instead of v1
|
||||||
|
rudderstack_v3_sdk_url =
|
||||||
|
|
||||||
# Rudderstack Config url, optional, used by Rudderstack SDK to fetch source config
|
# Rudderstack Config url, optional, used by Rudderstack SDK to fetch source config
|
||||||
rudderstack_config_url =
|
rudderstack_config_url =
|
||||||
|
|
||||||
|
|||||||
@@ -322,6 +322,9 @@
|
|||||||
# Rudderstack SDK url, optional, only valid if rudderstack_write_key and rudderstack_data_plane_url is also set
|
# Rudderstack SDK url, optional, only valid if rudderstack_write_key and rudderstack_data_plane_url is also set
|
||||||
;rudderstack_sdk_url =
|
;rudderstack_sdk_url =
|
||||||
|
|
||||||
|
# Rudderstack v3 SDK, optional, defaults to false. If set, Rudderstack v3 SDK will be used instead of v1
|
||||||
|
;rudderstack_v3_sdk_url =
|
||||||
|
|
||||||
# Rudderstack Config url, optional, used by Rudderstack SDK to fetch source config
|
# Rudderstack Config url, optional, used by Rudderstack SDK to fetch source config
|
||||||
;rudderstack_config_url =
|
;rudderstack_config_url =
|
||||||
|
|
||||||
|
|||||||
@@ -299,15 +299,9 @@
|
|||||||
"y": 0
|
"y": 0
|
||||||
},
|
},
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"options": {
|
"options": {},
|
||||||
"code": {
|
"content": "# Graph panel >> Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
||||||
"language": "plaintext",
|
"mode": "markdown",
|
||||||
"showLineNumbers": false,
|
|
||||||
"showMiniMap": false
|
|
||||||
},
|
|
||||||
"content": "# Graph panel >> Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions",
|
|
||||||
"mode": "markdown"
|
|
||||||
},
|
|
||||||
"pluginVersion": "11.0.0-pre",
|
"pluginVersion": "11.0.0-pre",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -642,6 +642,12 @@ You must also provide the `rudderstack_write_key` to enable this feature.
|
|||||||
Optional.
|
Optional.
|
||||||
If tracking with RudderStack is enabled, you can provide a custom URL to load the RudderStack SDK.
|
If tracking with RudderStack is enabled, you can provide a custom URL to load the RudderStack SDK.
|
||||||
|
|
||||||
|
#### `rudderstack_v3_sdk_url`
|
||||||
|
|
||||||
|
Optional.
|
||||||
|
This is mirroring the old configuration option, which will be deprecated.
|
||||||
|
If `rudderstack_sdk_url` and `rudderstack_v3_sdk_url` are both set, the feature toggle `rudderstackUpgrade` will control which one is loaded.
|
||||||
|
|
||||||
#### `rudderstack_config_url`
|
#### `rudderstack_config_url`
|
||||||
|
|
||||||
Optional.
|
Optional.
|
||||||
|
|||||||
@@ -1893,11 +1893,6 @@
|
|||||||
"count": 1
|
"count": 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"public/app/features/dashboard-scene/serialization/angularMigration.test.ts": {
|
|
||||||
"@typescript-eslint/no-explicit-any": {
|
|
||||||
"count": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"public/app/features/dashboard-scene/serialization/buildNewDashboardSaveModel.ts": {
|
"public/app/features/dashboard-scene/serialization/buildNewDashboardSaveModel.ts": {
|
||||||
"@typescript-eslint/consistent-type-assertions": {
|
"@typescript-eslint/consistent-type-assertions": {
|
||||||
"count": 1
|
"count": 1
|
||||||
|
|||||||
@@ -289,6 +289,7 @@ export interface GrafanaConfig {
|
|||||||
rudderstackWriteKey: string;
|
rudderstackWriteKey: string;
|
||||||
rudderstackDataPlaneUrl: string;
|
rudderstackDataPlaneUrl: string;
|
||||||
rudderstackSdkUrl: string;
|
rudderstackSdkUrl: string;
|
||||||
|
rudderstackV3SdkUrl: string;
|
||||||
rudderstackConfigUrl: string;
|
rudderstackConfigUrl: string;
|
||||||
rudderstackIntegrationsUrl: string;
|
rudderstackIntegrationsUrl: string;
|
||||||
applicationInsightsConnectionString: string;
|
applicationInsightsConnectionString: string;
|
||||||
|
|||||||
@@ -224,6 +224,7 @@ export class GrafanaBootConfig {
|
|||||||
rudderstackWriteKey?: string;
|
rudderstackWriteKey?: string;
|
||||||
rudderstackDataPlaneUrl?: string;
|
rudderstackDataPlaneUrl?: string;
|
||||||
rudderstackSdkUrl?: string;
|
rudderstackSdkUrl?: string;
|
||||||
|
rudderstackV3SdkUrl?: string;
|
||||||
rudderstackConfigUrl?: string;
|
rudderstackConfigUrl?: string;
|
||||||
rudderstackIntegrationsUrl?: string;
|
rudderstackIntegrationsUrl?: string;
|
||||||
analyticsConsoleReporting = false;
|
analyticsConsoleReporting = false;
|
||||||
|
|||||||
@@ -200,6 +200,7 @@ type FrontendSettingsDTO struct {
|
|||||||
RudderstackWriteKey string `json:"rudderstackWriteKey"`
|
RudderstackWriteKey string `json:"rudderstackWriteKey"`
|
||||||
RudderstackDataPlaneUrl string `json:"rudderstackDataPlaneUrl"`
|
RudderstackDataPlaneUrl string `json:"rudderstackDataPlaneUrl"`
|
||||||
RudderstackSdkUrl string `json:"rudderstackSdkUrl"`
|
RudderstackSdkUrl string `json:"rudderstackSdkUrl"`
|
||||||
|
RudderstackV3SdkUrl string `json:"rudderstackV3SdkUrl"`
|
||||||
RudderstackConfigUrl string `json:"rudderstackConfigUrl"`
|
RudderstackConfigUrl string `json:"rudderstackConfigUrl"`
|
||||||
RudderstackIntegrationsUrl string `json:"rudderstackIntegrationsUrl"`
|
RudderstackIntegrationsUrl string `json:"rudderstackIntegrationsUrl"`
|
||||||
|
|
||||||
|
|||||||
@@ -229,6 +229,7 @@ func (hs *HTTPServer) getFrontendSettings(c *contextmodel.ReqContext) (*dtos.Fro
|
|||||||
RudderstackWriteKey: hs.Cfg.RudderstackWriteKey,
|
RudderstackWriteKey: hs.Cfg.RudderstackWriteKey,
|
||||||
RudderstackDataPlaneUrl: hs.Cfg.RudderstackDataPlaneURL,
|
RudderstackDataPlaneUrl: hs.Cfg.RudderstackDataPlaneURL,
|
||||||
RudderstackSdkUrl: hs.Cfg.RudderstackSDKURL,
|
RudderstackSdkUrl: hs.Cfg.RudderstackSDKURL,
|
||||||
|
RudderstackV3SdkUrl: hs.Cfg.RudderstackV3SDKURL,
|
||||||
RudderstackConfigUrl: hs.Cfg.RudderstackConfigURL,
|
RudderstackConfigUrl: hs.Cfg.RudderstackConfigURL,
|
||||||
RudderstackIntegrationsUrl: hs.Cfg.RudderstackIntegrationsURL,
|
RudderstackIntegrationsUrl: hs.Cfg.RudderstackIntegrationsURL,
|
||||||
AnalyticsConsoleReporting: hs.Cfg.FrontendAnalyticsConsoleReporting,
|
AnalyticsConsoleReporting: hs.Cfg.FrontendAnalyticsConsoleReporting,
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ type FSFrontendSettings struct {
|
|||||||
RudderstackWriteKey string `json:"rudderstackWriteKey,omitempty"`
|
RudderstackWriteKey string `json:"rudderstackWriteKey,omitempty"`
|
||||||
RudderstackDataPlaneUrl string `json:"rudderstackDataPlaneUrl,omitempty"`
|
RudderstackDataPlaneUrl string `json:"rudderstackDataPlaneUrl,omitempty"`
|
||||||
RudderstackSdkUrl string `json:"rudderstackSdkUrl,omitempty"`
|
RudderstackSdkUrl string `json:"rudderstackSdkUrl,omitempty"`
|
||||||
|
RudderstackV3SdkUrl string `json:"rudderstackV3SdkUrl,omitempty"`
|
||||||
RudderstackConfigUrl string `json:"rudderstackConfigUrl,omitempty"`
|
RudderstackConfigUrl string `json:"rudderstackConfigUrl,omitempty"`
|
||||||
RudderstackIntegrationsUrl string `json:"rudderstackIntegrationsUrl,omitempty"`
|
RudderstackIntegrationsUrl string `json:"rudderstackIntegrationsUrl,omitempty"`
|
||||||
|
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ func NewIndexProvider(cfg *setting.Cfg, assetsManifest dtos.EntryPointAssets, li
|
|||||||
RudderstackDataPlaneUrl: cfg.RudderstackDataPlaneURL,
|
RudderstackDataPlaneUrl: cfg.RudderstackDataPlaneURL,
|
||||||
RudderstackIntegrationsUrl: cfg.RudderstackIntegrationsURL,
|
RudderstackIntegrationsUrl: cfg.RudderstackIntegrationsURL,
|
||||||
RudderstackSdkUrl: cfg.RudderstackSDKURL,
|
RudderstackSdkUrl: cfg.RudderstackSDKURL,
|
||||||
|
RudderstackV3SdkUrl: cfg.RudderstackV3SDKURL,
|
||||||
RudderstackWriteKey: cfg.RudderstackWriteKey,
|
RudderstackWriteKey: cfg.RudderstackWriteKey,
|
||||||
TrustedTypesDefaultPolicyEnabled: (cfg.CSPEnabled && strings.Contains(cfg.CSPTemplate, "require-trusted-types-for")) || (cfg.CSPReportOnlyEnabled && strings.Contains(cfg.CSPReportOnlyTemplate, "require-trusted-types-for")),
|
TrustedTypesDefaultPolicyEnabled: (cfg.CSPEnabled && strings.Contains(cfg.CSPTemplate, "require-trusted-types-for")) || (cfg.CSPReportOnlyEnabled && strings.Contains(cfg.CSPReportOnlyTemplate, "require-trusted-types-for")),
|
||||||
VerifyEmailEnabled: cfg.VerifyEmailEnabled,
|
VerifyEmailEnabled: cfg.VerifyEmailEnabled,
|
||||||
|
|||||||
@@ -414,6 +414,7 @@ type Cfg struct {
|
|||||||
RudderstackDataPlaneURL string
|
RudderstackDataPlaneURL string
|
||||||
RudderstackWriteKey string
|
RudderstackWriteKey string
|
||||||
RudderstackSDKURL string
|
RudderstackSDKURL string
|
||||||
|
RudderstackV3SDKURL string
|
||||||
RudderstackConfigURL string
|
RudderstackConfigURL string
|
||||||
RudderstackIntegrationsURL string
|
RudderstackIntegrationsURL string
|
||||||
IntercomSecret string
|
IntercomSecret string
|
||||||
@@ -1278,6 +1279,7 @@ func (cfg *Cfg) parseINIFile(iniFile *ini.File) error {
|
|||||||
cfg.RudderstackWriteKey = analytics.Key("rudderstack_write_key").String()
|
cfg.RudderstackWriteKey = analytics.Key("rudderstack_write_key").String()
|
||||||
cfg.RudderstackDataPlaneURL = analytics.Key("rudderstack_data_plane_url").String()
|
cfg.RudderstackDataPlaneURL = analytics.Key("rudderstack_data_plane_url").String()
|
||||||
cfg.RudderstackSDKURL = analytics.Key("rudderstack_sdk_url").String()
|
cfg.RudderstackSDKURL = analytics.Key("rudderstack_sdk_url").String()
|
||||||
|
cfg.RudderstackV3SDKURL = analytics.Key("rudderstack_v3_sdk_url").String()
|
||||||
cfg.RudderstackConfigURL = analytics.Key("rudderstack_config_url").String()
|
cfg.RudderstackConfigURL = analytics.Key("rudderstack_config_url").String()
|
||||||
cfg.RudderstackIntegrationsURL = analytics.Key("rudderstack_integrations_url").String()
|
cfg.RudderstackIntegrationsURL = analytics.Key("rudderstack_integrations_url").String()
|
||||||
cfg.IntercomSecret = analytics.Key("intercom_secret").String()
|
cfg.IntercomSecret = analytics.Key("intercom_secret").String()
|
||||||
|
|||||||
@@ -146,17 +146,15 @@ async function initRudderstackBackend() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// this will need to be updated when rudderstackSdkV3Url is added
|
// Logic: if only one of the sdk urls is provided, use respective code
|
||||||
// Desired logic: if only one of the sdk urls is provided, use respective code
|
|
||||||
// otherwise defer to the feature toggle.
|
// otherwise defer to the feature toggle.
|
||||||
const fakeConfigRudderstackSdkV3Url: string | undefined = undefined;
|
|
||||||
|
|
||||||
const hasOldSdkUrl = Boolean(config.rudderstackSdkUrl);
|
const hasOldSdkUrl = Boolean(config.rudderstackSdkUrl);
|
||||||
const hasNewSdkUrl = Boolean(fakeConfigRudderstackSdkV3Url);
|
const hasNewSdkUrl = Boolean(config.rudderstackV3SdkUrl);
|
||||||
const onlyOneConfigURLSet = hasOldSdkUrl !== hasNewSdkUrl;
|
const onlyOneSdkUrlSet = hasOldSdkUrl !== hasNewSdkUrl;
|
||||||
const useNewRudderstack = onlyOneConfigURLSet ? hasNewSdkUrl : config.featureToggles.rudderstackUpgrade;
|
const useNewRudderstack = onlyOneSdkUrlSet ? hasNewSdkUrl : config.featureToggles.rudderstackUpgrade;
|
||||||
|
|
||||||
const configUrl = useNewRudderstack ? fakeConfigRudderstackSdkV3Url : config.rudderstackSdkUrl;
|
const sdkUrl = useNewRudderstack ? config.rudderstackV3SdkUrl : config.rudderstackSdkUrl;
|
||||||
|
|
||||||
const modulePromise = useNewRudderstack
|
const modulePromise = useNewRudderstack
|
||||||
? import('./backends/analytics/RudderstackV3Backend')
|
? import('./backends/analytics/RudderstackV3Backend')
|
||||||
@@ -168,8 +166,8 @@ async function initRudderstackBackend() {
|
|||||||
writeKey: config.rudderstackWriteKey,
|
writeKey: config.rudderstackWriteKey,
|
||||||
dataPlaneUrl: config.rudderstackDataPlaneUrl,
|
dataPlaneUrl: config.rudderstackDataPlaneUrl,
|
||||||
user: contextSrv.user,
|
user: contextSrv.user,
|
||||||
sdkUrl: config.rudderstackSdkUrl,
|
sdkUrl,
|
||||||
configUrl: configUrl,
|
configUrl: config.rudderstackConfigUrl,
|
||||||
integrationsUrl: config.rudderstackIntegrationsUrl,
|
integrationsUrl: config.rudderstackIntegrationsUrl,
|
||||||
buildInfo: config.buildInfo,
|
buildInfo: config.buildInfo,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ const newExportButtonSelector = selectors.pages.Dashboard.DashNav.NewExportButto
|
|||||||
|
|
||||||
export function ShareExportDashboardButton({ dashboard }: Props) {
|
export function ShareExportDashboardButton({ dashboard }: Props) {
|
||||||
return (
|
return (
|
||||||
<Dropdown overlay={<ExportMenu dashboard={dashboard} />} placement="left-end">
|
<Dropdown overlay={<ExportMenu dashboard={dashboard} />} placement="left-start">
|
||||||
<Sidebar.Button
|
<Sidebar.Button
|
||||||
icon="download-alt"
|
icon="download-alt"
|
||||||
data-testid={newExportButtonSelector.Menu.container}
|
data-testid={newExportButtonSelector.Menu.container}
|
||||||
|
|||||||
@@ -1,9 +1,22 @@
|
|||||||
import { PanelTypeChangedHandler } from '@grafana/data';
|
import { FieldConfigSource, PanelTypeChangedHandler } from '@grafana/data';
|
||||||
import { getPanelPlugin } from '@grafana/data/test';
|
import { getPanelPlugin } from '@grafana/data/test';
|
||||||
import { PanelModel } from 'app/features/dashboard/state/PanelModel';
|
import { PanelModel } from 'app/features/dashboard/state/PanelModel';
|
||||||
|
|
||||||
import { getV2AngularMigrationHandler, getAngularPanelMigrationHandler } from './angularMigration';
|
import { getV2AngularMigrationHandler, getAngularPanelMigrationHandler } from './angularMigration';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test type for mutable panel model used in migration handler tests.
|
||||||
|
* Allows arbitrary properties to be added during migration.
|
||||||
|
*/
|
||||||
|
interface TestPanelModel {
|
||||||
|
id: number;
|
||||||
|
type: string;
|
||||||
|
options: Record<string, unknown>;
|
||||||
|
fieldConfig: FieldConfigSource;
|
||||||
|
targets?: Array<{ refId: string; [key: string]: unknown }>;
|
||||||
|
[key: string]: unknown;
|
||||||
|
}
|
||||||
|
|
||||||
describe('getAngularPanelMigrationHandler', () => {
|
describe('getAngularPanelMigrationHandler', () => {
|
||||||
describe('Given an old angular panel', () => {
|
describe('Given an old angular panel', () => {
|
||||||
it('Should call migration handler', () => {
|
it('Should call migration handler', () => {
|
||||||
@@ -43,9 +56,11 @@ describe('getAngularPanelMigrationHandler', () => {
|
|||||||
type: 'dashlist',
|
type: 'dashlist',
|
||||||
});
|
});
|
||||||
|
|
||||||
const mutatedModel: any = {
|
const mutatedModel: TestPanelModel = {
|
||||||
|
id: 1,
|
||||||
type: 'dashlist',
|
type: 'dashlist',
|
||||||
options: {},
|
options: {},
|
||||||
|
fieldConfig: { defaults: {}, overrides: [] },
|
||||||
};
|
};
|
||||||
|
|
||||||
getAngularPanelMigrationHandler(oldModel)(mutatedModel, reactPlugin);
|
getAngularPanelMigrationHandler(oldModel)(mutatedModel, reactPlugin);
|
||||||
@@ -80,7 +95,7 @@ describe('getV2AngularMigrationHandler', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const mutatedModel = {
|
const mutatedModel: TestPanelModel = {
|
||||||
id: 1,
|
id: 1,
|
||||||
type: 'stat',
|
type: 'stat',
|
||||||
options: {},
|
options: {},
|
||||||
@@ -89,6 +104,11 @@ describe('getV2AngularMigrationHandler', () => {
|
|||||||
|
|
||||||
getV2AngularMigrationHandler(migrationData)(mutatedModel, reactPlugin);
|
getV2AngularMigrationHandler(migrationData)(mutatedModel, reactPlugin);
|
||||||
|
|
||||||
|
// Verify originalOptions were spread onto the panel (for plugins using setMigrationHandler)
|
||||||
|
expect(mutatedModel['format']).toBe('short');
|
||||||
|
expect(mutatedModel['valueName']).toBe('avg');
|
||||||
|
expect(mutatedModel['orientation']).toBe('horizontal');
|
||||||
|
|
||||||
// Verify handler received correct arguments
|
// Verify handler received correct arguments
|
||||||
expect(receivedPrevPluginId).toBe('singlestat');
|
expect(receivedPrevPluginId).toBe('singlestat');
|
||||||
expect(receivedPrevOptions?.angular).toBeDefined();
|
expect(receivedPrevOptions?.angular).toBeDefined();
|
||||||
@@ -123,7 +143,7 @@ describe('getV2AngularMigrationHandler', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const mutatedModel = {
|
const mutatedModel: TestPanelModel = {
|
||||||
id: 1,
|
id: 1,
|
||||||
type: 'timeseries',
|
type: 'timeseries',
|
||||||
options: {},
|
options: {},
|
||||||
@@ -132,6 +152,10 @@ describe('getV2AngularMigrationHandler', () => {
|
|||||||
|
|
||||||
getV2AngularMigrationHandler(migrationData)(mutatedModel, reactPlugin);
|
getV2AngularMigrationHandler(migrationData)(mutatedModel, reactPlugin);
|
||||||
|
|
||||||
|
// Verify originalOptions were spread onto the panel (for plugins using setMigrationHandler)
|
||||||
|
expect(mutatedModel['bars']).toBe(true);
|
||||||
|
expect(mutatedModel['lines']).toBe(false);
|
||||||
|
|
||||||
// Verify handler received correct arguments
|
// Verify handler received correct arguments
|
||||||
expect(receivedPrevPluginId).toBe('graph');
|
expect(receivedPrevPluginId).toBe('graph');
|
||||||
expect(receivedPrevOptions?.angular).toBeDefined();
|
expect(receivedPrevOptions?.angular).toBeDefined();
|
||||||
@@ -163,7 +187,7 @@ describe('getV2AngularMigrationHandler', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const mutatedModel = {
|
const mutatedModel: TestPanelModel = {
|
||||||
id: 1,
|
id: 1,
|
||||||
type: 'new-panel',
|
type: 'new-panel',
|
||||||
options: {},
|
options: {},
|
||||||
@@ -172,6 +196,9 @@ describe('getV2AngularMigrationHandler', () => {
|
|||||||
|
|
||||||
getV2AngularMigrationHandler(migrationData)(mutatedModel, reactPlugin);
|
getV2AngularMigrationHandler(migrationData)(mutatedModel, reactPlugin);
|
||||||
|
|
||||||
|
// Verify originalOptions were spread onto the panel (for plugins using setMigrationHandler)
|
||||||
|
expect(mutatedModel['oldOption']).toBe('old');
|
||||||
|
|
||||||
// Verify handler received correct arguments (options wrapper, not angular)
|
// Verify handler received correct arguments (options wrapper, not angular)
|
||||||
expect(receivedPrevPluginId).toBe('some-react-panel');
|
expect(receivedPrevPluginId).toBe('some-react-panel');
|
||||||
expect(receivedPrevOptions?.options).toBeDefined();
|
expect(receivedPrevOptions?.options).toBeDefined();
|
||||||
@@ -222,4 +249,118 @@ describe('getV2AngularMigrationHandler', () => {
|
|||||||
warnSpy.mockRestore();
|
warnSpy.mockRestore();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Given v2 migration data for text panel with Angular-style properties', () => {
|
||||||
|
it('Should spread originalOptions onto panel for migration handlers using setMigrationHandler', () => {
|
||||||
|
// Text panel uses setMigrationHandler, not onPanelTypeChanged
|
||||||
|
// The migration handler expects content/mode to be directly on the panel object
|
||||||
|
const reactPlugin = getPanelPlugin({ id: 'text' });
|
||||||
|
|
||||||
|
// This simulates a text panel with Angular-style properties at root level
|
||||||
|
// The backend sets autoMigrateFrom="text" when it detects these properties
|
||||||
|
const migrationData = {
|
||||||
|
autoMigrateFrom: 'text',
|
||||||
|
originalOptions: {
|
||||||
|
content: 'Hello World',
|
||||||
|
mode: 'markdown',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const mutatedModel: TestPanelModel = {
|
||||||
|
id: 1,
|
||||||
|
type: 'text',
|
||||||
|
options: {},
|
||||||
|
fieldConfig: { defaults: {}, overrides: [] },
|
||||||
|
};
|
||||||
|
|
||||||
|
getV2AngularMigrationHandler(migrationData)(mutatedModel, reactPlugin);
|
||||||
|
|
||||||
|
// Verify originalOptions were spread onto the panel
|
||||||
|
// This allows textPanelMigrationHandler to see content/mode via panel.hasOwnProperty()
|
||||||
|
expect(mutatedModel['content']).toBe('Hello World');
|
||||||
|
expect(mutatedModel['mode']).toBe('markdown');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should not overwrite existing panel properties when spreading originalOptions', () => {
|
||||||
|
const reactPlugin = getPanelPlugin({ id: 'text' });
|
||||||
|
|
||||||
|
const migrationData = {
|
||||||
|
autoMigrateFrom: 'text',
|
||||||
|
originalOptions: {
|
||||||
|
content: 'Old content',
|
||||||
|
mode: 'markdown',
|
||||||
|
id: 999, // Should not overwrite existing id
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const mutatedModel: TestPanelModel = {
|
||||||
|
id: 1,
|
||||||
|
type: 'text',
|
||||||
|
options: { existingOption: true },
|
||||||
|
fieldConfig: { defaults: {}, overrides: [] },
|
||||||
|
};
|
||||||
|
|
||||||
|
getV2AngularMigrationHandler(migrationData)(mutatedModel, reactPlugin);
|
||||||
|
|
||||||
|
// defaults() only sets properties that don't already exist
|
||||||
|
expect(mutatedModel['content']).toBe('Old content');
|
||||||
|
expect(mutatedModel['mode']).toBe('markdown');
|
||||||
|
expect(mutatedModel.id).toBe(1); // Should keep original id
|
||||||
|
expect(mutatedModel.options).toEqual({ existingOption: true }); // Should keep existing options
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should work with empty originalOptions', () => {
|
||||||
|
const reactPlugin = getPanelPlugin({ id: 'text' });
|
||||||
|
|
||||||
|
const migrationData = {
|
||||||
|
autoMigrateFrom: 'text',
|
||||||
|
originalOptions: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
const mutatedModel: TestPanelModel = {
|
||||||
|
id: 1,
|
||||||
|
type: 'text',
|
||||||
|
options: {},
|
||||||
|
fieldConfig: { defaults: {}, overrides: [] },
|
||||||
|
};
|
||||||
|
|
||||||
|
// Should not throw
|
||||||
|
expect(() => {
|
||||||
|
getV2AngularMigrationHandler(migrationData)(mutatedModel, reactPlugin);
|
||||||
|
}).not.toThrow();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should spread originalOptions AND call onPanelTypeChanged if plugin has both', () => {
|
||||||
|
let handlerCalled = false;
|
||||||
|
const onPanelTypeChanged: PanelTypeChangedHandler = (panel, prevPluginId, prevOptions) => {
|
||||||
|
handlerCalled = true;
|
||||||
|
// Verify originalOptions were already spread onto panel before handler is called
|
||||||
|
expect((panel as TestPanelModel)['customProp']).toBe('custom value');
|
||||||
|
return { migrated: true };
|
||||||
|
};
|
||||||
|
|
||||||
|
const reactPlugin = getPanelPlugin({ id: 'custom-panel' }).setPanelChangeHandler(onPanelTypeChanged);
|
||||||
|
|
||||||
|
const migrationData = {
|
||||||
|
autoMigrateFrom: 'custom-panel',
|
||||||
|
originalOptions: {
|
||||||
|
customProp: 'custom value',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const mutatedModel: TestPanelModel = {
|
||||||
|
id: 1,
|
||||||
|
type: 'custom-panel',
|
||||||
|
options: {},
|
||||||
|
fieldConfig: { defaults: {}, overrides: [] },
|
||||||
|
};
|
||||||
|
|
||||||
|
getV2AngularMigrationHandler(migrationData)(mutatedModel, reactPlugin);
|
||||||
|
|
||||||
|
// Verify both behaviors occurred
|
||||||
|
expect(mutatedModel['customProp']).toBe('custom value'); // originalOptions spread
|
||||||
|
expect(handlerCalled).toBe(true); // onPanelTypeChanged called
|
||||||
|
expect(mutatedModel.options).toEqual({ migrated: true }); // handler result applied
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -77,6 +77,11 @@ export function getAngularPanelMigrationHandler(oldModel: PanelModel) {
|
|||||||
* 4. Handler calls stat plugin's onPanelTypeChanged with { angular: originalOptions }
|
* 4. Handler calls stat plugin's onPanelTypeChanged with { angular: originalOptions }
|
||||||
* 5. Plugin migrates format/valueName/etc to proper stat options
|
* 5. Plugin migrates format/valueName/etc to proper stat options
|
||||||
*
|
*
|
||||||
|
* For panels where autoMigrateFrom equals the current type (e.g., "text" -> "text"):
|
||||||
|
* - These are panels with Angular-style properties at the root level (content, mode, etc.)
|
||||||
|
* - We spread originalOptions onto the panel so the plugin's migration handler can see them
|
||||||
|
* - This matches the v1 behavior where PanelModel.restoreModel() spreads all properties
|
||||||
|
*
|
||||||
* @param migrationData The __angularMigration data extracted from panel options
|
* @param migrationData The __angularMigration data extracted from panel options
|
||||||
*/
|
*/
|
||||||
export function getV2AngularMigrationHandler(migrationData: AngularMigrationData) {
|
export function getV2AngularMigrationHandler(migrationData: AngularMigrationData) {
|
||||||
@@ -90,19 +95,28 @@ export function getV2AngularMigrationHandler(migrationData: AngularMigrationData
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.onPanelTypeChanged) {
|
// Spread originalOptions onto the panel object.
|
||||||
// Some plugins rely on being able to access targets to set up the fieldConfig when migrating from angular.
|
// This is critical for plugins that use setMigrationHandler (like text panel) which expect
|
||||||
// Proxy the targets property with a deprecation warning.
|
// Angular properties (content, mode, etc.) to be directly on the panel object.
|
||||||
const targetClone = cloneDeep(panel.targets);
|
// This matches the v1 behavior where PanelModel.restoreModel() spreads all JSON properties.
|
||||||
Object.defineProperty(panel, 'targets', {
|
if (originalOptions && Object.keys(originalOptions).length > 0) {
|
||||||
get: function () {
|
defaults(panel, originalOptions);
|
||||||
console.warn(
|
}
|
||||||
'Accessing the targets property when migrating a panel plugin is deprecated. Changes to this property will be ignored.'
|
|
||||||
);
|
|
||||||
return targetClone;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
|
// Some plugins rely on being able to access targets to set up the fieldConfig when migrating from angular.
|
||||||
|
// Proxy the targets property with a deprecation warning.
|
||||||
|
const targetClone = cloneDeep(panel.targets);
|
||||||
|
Object.defineProperty(panel, 'targets', {
|
||||||
|
get: function () {
|
||||||
|
console.warn(
|
||||||
|
'Accessing the targets property when migrating a panel plugin is deprecated. Changes to this property will be ignored.'
|
||||||
|
);
|
||||||
|
return targetClone;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// For panels with onPanelTypeChanged (e.g., singlestat -> stat), call the handler
|
||||||
|
if (plugin.onPanelTypeChanged) {
|
||||||
// For Angular panels, wrap in { angular: ... } to match expected format
|
// For Angular panels, wrap in { angular: ... } to match expected format
|
||||||
// For React panels migrating from other React panels, pass options directly
|
// For React panels migrating from other React panels, pass options directly
|
||||||
const prevOptions = wasAngular ? { angular: originalOptions } : { options: originalOptions };
|
const prevOptions = wasAngular ? { angular: originalOptions } : { options: originalOptions };
|
||||||
|
|||||||
@@ -554,7 +554,7 @@ export function sceneVariablesSetToSchemaV2Variables(
|
|||||||
...validateFiltersOrigin(variable.state.originFilters),
|
...validateFiltersOrigin(variable.state.originFilters),
|
||||||
...validateFiltersOrigin(variable.state.filters),
|
...validateFiltersOrigin(variable.state.filters),
|
||||||
],
|
],
|
||||||
defaultKeys: variable.state.defaultKeys || [], //FIXME what is the default value?
|
defaultKeys: variable.state.defaultKeys || [],
|
||||||
allowCustomValue: variable.state.allowCustomValue ?? true,
|
allowCustomValue: variable.state.allowCustomValue ?? true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1137,7 +1137,13 @@
|
|||||||
"datasource": { "name": "esmce00tbim8" },
|
"datasource": { "name": "esmce00tbim8" },
|
||||||
"group": "opensearch",
|
"group": "opensearch",
|
||||||
"spec": {
|
"spec": {
|
||||||
"allowCustomValue": true
|
"name": "adhocVar",
|
||||||
|
"allowCustomValue": true,
|
||||||
|
"filters": [],
|
||||||
|
"baseFilters": [],
|
||||||
|
"defaultKeys": [],
|
||||||
|
"hide": "dontHide",
|
||||||
|
"skipUrlSync": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -365,6 +365,35 @@ describe('transformSaveModelSchemaV2ToScene', () => {
|
|||||||
expect(getQueryRunnerFor(vizPanels[0])?.state.datasource?.uid).toBe(MIXED_DATASOURCE_NAME);
|
expect(getQueryRunnerFor(vizPanels[0])?.state.datasource?.uid).toBe(MIXED_DATASOURCE_NAME);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('adhoc variables', () => {
|
||||||
|
it('should convert empty defaultKeys array to undefined', () => {
|
||||||
|
const dashboard = cloneDeep(defaultDashboard);
|
||||||
|
const adhocVar = dashboard.spec.variables.find((v) => v.kind === 'AdhocVariable') as AdhocVariableKind;
|
||||||
|
adhocVar.spec.defaultKeys = [];
|
||||||
|
|
||||||
|
const scene = transformSaveModelSchemaV2ToScene(dashboard);
|
||||||
|
|
||||||
|
const adhocVariable = scene.state.$variables?.getByName('adhocVar') as AdHocFiltersVariable;
|
||||||
|
expect(adhocVariable).toBeInstanceOf(AdHocFiltersVariable);
|
||||||
|
|
||||||
|
expect(adhocVariable.state.defaultKeys).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should preserve non-empty defaultKeys array', () => {
|
||||||
|
const dashboard = cloneDeep(defaultDashboard);
|
||||||
|
|
||||||
|
const adhocVar = dashboard.spec.variables.find((v) => v.kind === 'AdhocVariable') as AdhocVariableKind;
|
||||||
|
expect(adhocVar.spec.defaultKeys.length).toBeGreaterThan(0);
|
||||||
|
|
||||||
|
const scene = transformSaveModelSchemaV2ToScene(dashboard);
|
||||||
|
|
||||||
|
const adhocVariable = scene.state.$variables?.getByName('adhocVar') as AdHocFiltersVariable;
|
||||||
|
expect(adhocVariable).toBeInstanceOf(AdHocFiltersVariable);
|
||||||
|
|
||||||
|
expect(adhocVariable.state.defaultKeys).toEqual(adhocVar.spec.defaultKeys);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('When creating a snapshot dashboard scene', () => {
|
describe('When creating a snapshot dashboard scene', () => {
|
||||||
it('should initialize a dashboard scene with SnapshotVariables', () => {
|
it('should initialize a dashboard scene with SnapshotVariables', () => {
|
||||||
const snapshot: DashboardWithAccessInfo<DashboardV2Spec> = {
|
const snapshot: DashboardWithAccessInfo<DashboardV2Spec> = {
|
||||||
@@ -401,6 +430,29 @@ describe('transformSaveModelSchemaV2ToScene', () => {
|
|||||||
expect(intervalSnapshot.state.text).toBe('1m');
|
expect(intervalSnapshot.state.text).toBe('1m');
|
||||||
expect(intervalSnapshot.state.isReadOnly).toBe(true);
|
expect(intervalSnapshot.state.isReadOnly).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should convert empty defaultKeys array to undefined for adhoc variables', () => {
|
||||||
|
const snapshot: DashboardWithAccessInfo<DashboardV2Spec> = cloneDeep({
|
||||||
|
...defaultDashboard,
|
||||||
|
metadata: {
|
||||||
|
...defaultDashboard.metadata,
|
||||||
|
annotations: {
|
||||||
|
...defaultDashboard.metadata.annotations,
|
||||||
|
[AnnoKeyDashboardIsSnapshot]: 'true',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const adhocVar = snapshot.spec.variables.find((v) => v.kind === 'AdhocVariable') as AdhocVariableKind;
|
||||||
|
adhocVar.spec.defaultKeys = [];
|
||||||
|
|
||||||
|
const scene = transformSaveModelSchemaV2ToScene(snapshot);
|
||||||
|
|
||||||
|
const adhocVariable = scene.state.$variables?.getByName('adhocVar') as AdHocFiltersVariable;
|
||||||
|
expect(adhocVariable).toBeInstanceOf(AdHocFiltersVariable);
|
||||||
|
|
||||||
|
expect(adhocVariable.state.defaultKeys).toBeUndefined();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('meta', () => {
|
describe('meta', () => {
|
||||||
|
|||||||
@@ -329,7 +329,7 @@ function createSceneVariableFromVariableModel(variable: TypedVariableModelV2): S
|
|||||||
applyMode: 'auto',
|
applyMode: 'auto',
|
||||||
filters: variable.spec.filters ?? [],
|
filters: variable.spec.filters ?? [],
|
||||||
baseFilters: variable.spec.baseFilters ?? [],
|
baseFilters: variable.spec.baseFilters ?? [],
|
||||||
defaultKeys: variable.spec.defaultKeys,
|
defaultKeys: variable.spec.defaultKeys.length ? variable.spec.defaultKeys : undefined,
|
||||||
useQueriesAsFilterForOptions: true,
|
useQueriesAsFilterForOptions: true,
|
||||||
layout: config.featureToggles.newFiltersUI ? 'combobox' : undefined,
|
layout: config.featureToggles.newFiltersUI ? 'combobox' : undefined,
|
||||||
supportsMultiValueOperators: Boolean(
|
supportsMultiValueOperators: Boolean(
|
||||||
@@ -536,7 +536,7 @@ export function createVariablesForSnapshot(dashboard: DashboardV2Spec): SceneVar
|
|||||||
applyMode: 'auto',
|
applyMode: 'auto',
|
||||||
filters: v.spec.filters ?? [],
|
filters: v.spec.filters ?? [],
|
||||||
baseFilters: v.spec.baseFilters ?? [],
|
baseFilters: v.spec.baseFilters ?? [],
|
||||||
defaultKeys: v.spec.defaultKeys,
|
defaultKeys: v.spec.defaultKeys?.length ? v.spec.defaultKeys : undefined,
|
||||||
useQueriesAsFilterForOptions: true,
|
useQueriesAsFilterForOptions: true,
|
||||||
layout: config.featureToggles.newFiltersUI ? 'combobox' : undefined,
|
layout: config.featureToggles.newFiltersUI ? 'combobox' : undefined,
|
||||||
supportsMultiValueOperators: Boolean(
|
supportsMultiValueOperators: Boolean(
|
||||||
|
|||||||
@@ -609,17 +609,25 @@ export function buildPanelKind(p: Panel): PanelKind {
|
|||||||
|
|
||||||
// Build options with Angular migration data if needed (matches backend behavior)
|
// Build options with Angular migration data if needed (matches backend behavior)
|
||||||
// autoMigrateFrom is set during v0->v1 migration when Angular panels are converted
|
// autoMigrateFrom is set during v0->v1 migration when Angular panels are converted
|
||||||
const { autoMigrateFrom } = p;
|
let { autoMigrateFrom } = p;
|
||||||
let options = p.options ?? {};
|
let options = p.options ?? {};
|
||||||
|
const originalOptions = extractAngularOptions(p);
|
||||||
|
|
||||||
|
// When autoMigrateFrom is present OR when there are Angular-specific properties at root level,
|
||||||
|
// compose __angularMigration with only Angular-specific options.
|
||||||
|
// This filters out known Panel schema properties, passing only the Angular options to migration handlers.
|
||||||
|
// The second condition handles panels like "text" that have Angular-style properties (content, mode)
|
||||||
|
// but don't have autoMigrateFrom set because they don't need a type conversion.
|
||||||
|
if (!autoMigrateFrom && Object.keys(originalOptions).length > 0) {
|
||||||
|
autoMigrateFrom = p.type;
|
||||||
|
}
|
||||||
|
|
||||||
// When autoMigrateFrom is present, compose __angularMigration with only Angular-specific options
|
|
||||||
// This filters out known Panel schema properties, passing only the Angular options to migration handlers
|
|
||||||
if (autoMigrateFrom) {
|
if (autoMigrateFrom) {
|
||||||
options = {
|
options = {
|
||||||
...options,
|
...options,
|
||||||
__angularMigration: {
|
__angularMigration: {
|
||||||
autoMigrateFrom,
|
autoMigrateFrom,
|
||||||
originalOptions: extractAngularOptions(p),
|
originalOptions,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user