-
What Grafana version and what operating system are you using?
Grafana v11.6.8 (c3e34314f7) -
What are you trying to achieve?
Reliably use the “Discard panel changes” button in the panel editor to revert an in-progress panel edit before saving the dashboard. -
How are you trying to achieve it?
- Open a dashboard → edit an existing panel.
- Change the panel’s query/data source (e.g. switch source category, edit query fields) or other panel options.
- Confirm the change visually applied (panel re-renders/re-queries as expected).
- Click “Discard panel changes” to revert, expecting it to be enabled since a real change was made
-
What happened?
“Discard panel changes” remains disabled/greyed out immediately after the edit, even though:- The panel visibly updates and re-queries.
- Opening “Save dashboard” → “Changes” tab correctly shows the diff (observed 51 line changes reflecting the new
dataSourceType,reportObjectType,queryText, etc.), proving the dashboard/panel model itself updated correctly.
Switching to a different browser tab and back to the Grafana tab causes “Discard panel changes” to become enabled — with no additional network/query calls triggered by the tab switch, indicating it’s a stale UI re-render rather than a data/model issue.
-
What did you expect to happen?
“Discard panel changes” should become enabled synchronously with the actual edit, since the panel/dashboard model already reflects the change correctly (as proven by the Save Dashboard diff). -
Can you copy/paste the configuration(s) that you are having problems with?
Reproduced on a standard dashboard panel using both a custom SQL-query-based data source panel and other panel types — not tied to one specific data source or panel plugin config. -
Did you receive any errors in the Grafana UI or in related logs? If so, please tell us exactly what they were.
No errors in the browser console or Grafana server logs related to this specific behavior. -
Did you follow any online instructions? If so, what is the URL?
No. This was found through manual testing/reproduction, then cross-referenced against the existing Grafana issue #126941 “Undo Redo: Add missing undo / redo coverage”
Thanks for the detailed report. I tried to reproduce this on a local Grafana instance using a saved dashboard panel with the built in TestData DB source, following the same sequence you described → created a panel, saved the dashboard, reloaded the page, reopened the saved panel in edit mode, then changed the query (Scenario field).
In my test, the Discard panel changes button was active/enabled immediately after the change — no tab switch was needed to trigger it.
Since I couldn’t reproduce the disabled state behavior with TestData DB, it’s possible this is specific to the data source or panel plugin you’re using your diff mentioning dataSourceType, reportObjectType, and queryText suggests a custom or non-core data source rather than a built in one.
Could you share which specific data source/plugin you’re using, and whether the issue also reproduces with a built-in source like TestData DB or Prometheus on your end? That would help determine whether this is a core Grafana bug or specific to that plugin’s integration.
Hi,
Thanks for checking this.
We are using custom datasource integrations such as ClickHouse, PostgreSQL, and other custom datasource types. The issue does not occur when creating a new panel and editing the same, but only with previously saved panels(Not sure whether imported or manually created) that are reopened in edit mode.
When we modify the query (for example, queryText or other custom fields), the query executes successfully and changes get reflects under Changes tab of Save dashboard, but the Discard panel changes button remains disabled. Observed that the panel is marked as dirty on switching browser tabs and Discard panel changes button get enabled.
Please find the sample import json format:
{
"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": 2,
"id": null,
"links": [],
"liveNow": true,
"panels": [
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"id": 9,
"panels": [],
"title": "Customer Service Summary",
"type": "row"
},
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"description": "No of services available",
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "semi-dark-blue",
"mode": "fixed"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 0,
"y": 1
},
"id": 1,
"options": {
"colorMode": "background_solid",
"graphMode": "area",
"justifyMode": "center",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "value_and_name",
"wideLayout": false
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"editorMode": "code",
"format": "table",
"rawQuery": true,
"rawSql": "SELECT COUNT(*) AS \"Total Services\"\nFROM public.demo_services\nWHERE \"Customer id\" IS NOT NULL;",
"refId": "A",
"sql": {
"columns": [
{
"alias": "\"Up\"",
"name": "COUNT",
"parameters": [
{
"name": "\"ID\"",
"type": "functionParameter"
}
],
"type": "function"
}
],
"groupBy": [
{
"property": {
"type": "string"
},
"type": "groupBy"
}
],
"limit": 50,
"whereString": "1 = 1",
"table": "public.demo_services"
},
"table": "public.demo_services"
}
],
"title": "",
"type": "stat"
},
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "green",
"mode": "fixed"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 4,
"y": 1
},
"id": 15,
"options": {
"colorMode": "background_solid",
"graphMode": "area",
"justifyMode": "center",
"orientation": "horizontal",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "value_and_name",
"wideLayout": false
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"editorMode": "code",
"format": "table",
"rawQuery": true,
"rawSql": "SELECT COUNT(*) AS \"Active Services\"\nFROM public.demo_services\nWHERE \"Status\" = 'Active';",
"refId": "A",
"sql": {
"columns": [
{
"parameters": [],
"type": "function"
}
],
"groupBy": [
{
"property": {
"type": "string"
},
"type": "groupBy"
}
],
"limit": 50,
"table": "public.demo_services",
"whereString": "1 = 1"
}
}
],
"title": "",
"type": "stat"
},
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "red",
"mode": "fixed"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 8,
"y": 1
},
"id": 16,
"options": {
"colorMode": "background_solid",
"graphMode": "area",
"justifyMode": "center",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "/.*/",
"values": true
},
"showPercentChange": false,
"textMode": "value_and_name",
"wideLayout": false
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"editorMode": "code",
"format": "table",
"rawQuery": true,
"rawSql": "SELECT COUNT(*) AS \"Inactive Services\"\nFROM public.demo_services\nWHERE \"Status\" = 'Inactive';",
"refId": "A",
"sql": {
"columns": [
{
"parameters": [],
"type": "function"
}
],
"groupBy": [
{
"property": {
"type": "string"
},
"type": "groupBy"
}
],
"limit": 50,
"table": "public.demo_services",
"whereString": "1 = 1"
}
}
],
"title": "",
"type": "stat"
},
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "dark-orange",
"mode": "fixed"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 12,
"y": 1
},
"id": 17,
"options": {
"colorMode": "background_solid",
"graphMode": "area",
"justifyMode": "center",
"orientation": "vertical",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "/.*/",
"values": true
},
"showPercentChange": false,
"textMode": "value_and_name",
"wideLayout": false
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"editorMode": "code",
"format": "table",
"rawQuery": true,
"rawSql": "SELECT COUNT(*) AS \"Impacted Services\"\nFROM public.demo_services\nWHERE \"Health\" = 'Impacted';",
"refId": "A",
"sql": {
"columns": [
{
"parameters": [],
"type": "function"
}
],
"groupBy": [
{
"property": {
"type": "string"
},
"type": "groupBy"
}
],
"limit": 50,
"table": "public.demo_services",
"whereString": "1 = 1"
}
}
],
"title": "",
"type": "stat"
},
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "light-orange"
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 16,
"y": 1
},
"id": 4,
"options": {
"colorMode": "background",
"graphMode": "area",
"justifyMode": "center",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "value_and_name",
"wideLayout": false
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"editorMode": "builder",
"format": "table",
"rawSql": "SELECT COUNT(*) AS \"Warning Services\"\nFROM public.demo_services\nWHERE \"Severity\" = 'Warning';",
"refId": "A",
"sql": {
"columns": [
{
"alias": "\"Maintenance\"",
"name": "COUNT",
"parameters": [
{
"name": "\"Sequence number\"",
"type": "functionParameter"
}
],
"type": "function"
}
],
"groupBy": [
{
"property": {
"type": "string"
},
"type": "groupBy"
}
],
"limit": 50,
"whereString": "1 = 1",
"table": "public.demo_services"
},
"table": "public.active_alarms"
}
],
"title": "",
"type": "stat"
},
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "#898989"
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 20,
"y": 1
},
"id": 3,
"options": {
"colorMode": "background_solid",
"graphMode": "area",
"justifyMode": "center",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "value_and_name",
"wideLayout": false
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"editorMode": "code",
"format": "table",
"rawQuery": true,
"rawSql": "SELECT COUNT(*) AS \"Critical Services\"\nFROM public.demo_services\nWHERE \"Severity\" = 'Critical';",
"refId": "A",
"sql": {
"columns": [
{
"alias": "\"Unknown\"",
"name": "COUNT",
"parameters": [
{
"name": "\"ID\"",
"type": "functionParameter"
}
],
"type": "function"
}
],
"groupBy": [
{
"property": {
"type": "string"
},
"type": "groupBy"
}
],
"limit": 50,
"whereString": "1 = 1",
"table": "public.demo_services"
},
"table": "public.demo_services"
}
],
"title": "",
"type": "stat"
},
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "Service Count",
"axisPlacement": "auto",
"fillOpacity": 80,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineWidth": 2,
"scaleDistribution": {
"type": "linear"
},
"thresholdsStyle": {
"mode": "off"
}
},
"fieldMinMax": false,
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "none"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Total Services"
},
"properties": [
{
"id": "color",
"value": {
"fixedColor": "blue",
"mode": "fixed"
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "Available"
},
"properties": [
{
"id": "color",
"value": {
"fixedColor": "green",
"mode": "fixed"
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "Unavailable"
},
"properties": [
{
"id": "color",
"value": {
"fixedColor": "red",
"mode": "fixed"
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "At Risk"
},
"properties": [
{
"id": "color",
"value": {
"fixedColor": "semi-dark-orange",
"mode": "fixed"
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "Unknown"
},
"properties": [
{
"id": "color",
"value": {
"mode": "fixed"
}
}
]
}
]
},
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
"y": 6
},
"id": 14,
"options": {
"barRadius": 0,
"barWidth": 1,
"fullHighlight": false,
"groupWidth": 0.7,
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"orientation": "horizontal",
"showValue": "auto",
"stacking": "normal",
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
},
"xField": "Customer Name",
"xTickLabelRotation": 0,
"xTickLabelSpacing": 100
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"editorMode": "code",
"format": "table",
"rawQuery": true,
"rawSql": "SELECT \"Availability\", COUNT(*) AS \"Count\"\nFROM public.demo_services\nGROUP BY \"Availability\";",
"refId": "A",
"sql": {
"columns": [
{
"parameters": [],
"type": "function"
}
],
"groupBy": [
{
"property": {
"type": "string"
},
"type": "groupBy"
}
],
"limit": 50,
"table": "public.demo_services",
"whereString": "1 = 1"
}
}
],
"title": "Availability Count",
"type": "barchart"
},
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
}
},
"fieldMinMax": false,
"mappings": []
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
"y": 6
},
"id": 18,
"options": {
"displayLabels": [
"name",
"value"
],
"legend": {
"displayMode": "list",
"placement": "right",
"showLegend": false,
"values": []
},
"pieType": "donut",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"limit": 10,
"values": true
},
"tooltip": {
"hideZeros": false,
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"editorMode": "code",
"format": "table",
"rawQuery": true,
"rawSql": "SELECT \"Service Type\", COUNT(*) AS \"Count\"\nFROM public.demo_services\nGROUP BY \"Service Type\";",
"refId": "A",
"sql": {
"columns": [
{
"parameters": [],
"type": "function"
}
],
"groupBy": [
{
"property": {
"type": "string"
},
"type": "groupBy"
}
],
"limit": 50,
"table": "public.demo_services",
"whereString": "1 = 1"
}
}
],
"title": "Service Type Distribution",
"type": "piechart"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 15
},
"id": 22,
"panels": [],
"title": "Service KPI Trend",
"type": "row"
},
{
"datasource": {
"type": "dummy-custom-datasource",
"uid": "dummy-custom-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "green",
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": true,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "Average Throughput (mbps)",
"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": 2,
"pointSize": 6,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "always",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "area"
}
},
"fieldMinMax": false,
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "red"
},
{
"color": "orange",
"value": 2000
},
{
"color": "green",
"value": 4000
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 16
},
"id": 21,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "dummy-custom-datasource",
"uid": "dummy-custom-datasource"
},
"payload": {
"addToEndpointContextMenu": false,
"addToNodeContextMenu": false,
"addToServiceContextMenu": false,
"addToSubnetContextMenu": false,
"consolidation": "NONE",
"contextJSON": "{}",
"customEndDate": 1768829452680,
"customHourOrDay": "7",
"customStartDate": 1768825852680,
"dataRange": "CUSTOM_TIME",
"dataSourceType": "performance-series",
"dateRange": "CUSTOM_TIME",
"isEditModeForReport": false,
"isReportPlayed": true,
"numberLimit": 50000,
"offline": false,
"page": "1",
"pageSize": "50000",
"pmReportDisplayType": "SERIES",
"reportDisplayType": "CHART",
"reportId": "21",
"reportIdUUId": "demo-widget-21",
"reportObject": {
"chartDisplayType": "TABLE",
"computedSeriesJSON": "[]",
"consolidationPeriod": "HR_1",
"customEndDate": 1768829463567,
"customStartDate": 1768743063567,
"dataAxisLabelsAngle": "90",
"dataRange": "CUSTOM_TIME",
"dateRange": "CUSTOM_TIME",
"displayPropertiesJSON": "[\"Endpoint > nodeName\",\"Endpoint > sourceName\",\"Demo Rx Metric\",\"Demo Tx Metric\"]",
"enableForPortal": false,
"expressionJSON": "{\"exp\":{\"log\":{\"o\":\"AND\",\"args\":[{\"comp\":{\"c\":\"example.model.Endpoint\",\"o\":\"CONTAINS\",\"v\":\"SITE-A\",\"colDisp\":\"Endpoint > Node\",\"colAlias\":\"Endpoint > nodeName\",\"p\":\"nodeName\"}}]}}}",
"globallyViewable": false,
"groupByPropertiesJSON": "[]",
"id": "21",
"isDashboardComponent": false,
"isFolder": false,
"isReportComponent": false,
"legendDisplaySize": 1,
"legendSeriesCount": 2,
"logarithmicAxis": false,
"name": "Demo report",
"numberLimit": 50000,
"object-type": "perf-report",
"orderByPropertiesJSON": "[]",
"pageSize": 50000,
"parentNode": "root",
"pmReportDataSourceType": "AUTO",
"pmReportDisplayType": "TABLE",
"pmReportSeriesData": [
{
"customLabel": "",
"displayColor": "HEXA_DECIMAL_VALUE",
"displayType": "LINE",
"enabled": true,
"endPoint": "Demo-SA-IPVPN-1312456",
"endPointId": "9d494c67-6391-4042-b0ac-5aa618ea9ec4",
"endPointName": "Demo-SA-IPVPN-1312456",
"hexaDisplayColor": "#6495ED",
"minmaxDisplayColor": "HEXA_DECIMAL_VALUE",
"minmaxDisplayType": "CANDLESTICK",
"minmaxHexaColor": "#6495ED",
"minmaxOpacity": "25",
"nodeName": "Demo-SA-IPVPN-1312456",
"object-type": "perf-report-series-metric",
"performanceMetricId": "171beb8f-b385-47ba-9cfd-eb23e18642df",
"performanceMetricName": "Average Throughput",
"serviceId": "9d494c67-6391-4042-b0ac-5aa618ea9ec4",
"serviceName": "Demo-SA-IPVPN-1312456",
"showMinMaxValue": false,
"valueLabelOnPoint": false
},
{
"customLabel": "",
"displayColor": "HEXA_DECIMAL_VALUE",
"displayType": "LINE",
"enabled": true,
"endPoint": "Demo-VPN-ET-107147",
"endPointId": "90085078-5154-4cba-83f3-6b3c07d26368",
"endPointName": "Demo-VPN-ET-107147",
"hexaDisplayColor": "#6495ED",
"minmaxDisplayColor": "HEXA_DECIMAL_VALUE",
"minmaxDisplayType": "CANDLESTICK",
"minmaxHexaColor": "#6495ED",
"minmaxOpacity": "25",
"nodeName": "Demo-VPN-ET-107147",
"object-type": "perf-report-series-metric",
"performanceMetricId": "171beb8f-b385-47ba-9cfd-eb23e18642df",
"performanceMetricName": "Average Throughput",
"serviceId": "90085078-5154-4cba-83f3-6b3c07d26368",
"serviceName": "Demo-VPN-ET-107147",
"showMinMaxValue": false,
"valueLabelOnPoint": false
}
],
"pmReportType": "SERIES",
"reportObjectType": "SERVICE",
"showDataAxisLabels": false,
"showIndividualCharts": false,
"showIndividualChartsHeight": 300,
"showIndividualChartsLayout": 1,
"showLegend": false,
"showThresholdLine": false,
"userGroupsJSON": "[]",
"usersJSON": "[\"demo_user\"]",
"visualizationDataType": "PM_REPORT",
"ascendingOrderListJSON": "[]"
},
"reportUUID": "",
"scheduled": false,
"timePeriod": "HOUR",
"triggerScheduledDataGeneration": false,
"userTimeZone": "UTC"
},
"queryText": "${Severity} ${Service} ${Node} ${Subnetwork} ${EndPoint}",
"refId": "A",
"reportDisplayType": "CHART",
"timePeriod": "HOUR"
}
],
"title": "",
"type": "timeseries"
},
{
"datasource": {
"type": "dummy-custom-datasource",
"uid": "dummy-custom-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "Latency (ms)",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineStyle": {
"fill": "solid"
},
"lineWidth": 3,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "always",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "area"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 40
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 16
},
"id": 23,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "dummy-custom-datasource",
"uid": "dummy-custom-datasource"
},
"payload": {
"addToEndpointContextMenu": false,
"addToNodeContextMenu": false,
"addToServiceContextMenu": false,
"addToSubnetContextMenu": false,
"consolidation": "NONE",
"contextJSON": "{}",
"customEndDate": 1768829452680,
"customHourOrDay": "7",
"customStartDate": 1768825852680,
"dataRange": "CUSTOM_TIME",
"dataSourceType": "performance-series",
"dateRange": "CUSTOM_TIME",
"isEditModeForReport": false,
"isReportPlayed": true,
"numberLimit": 10000,
"offline": false,
"page": "1",
"pageSize": "10000",
"pmReportDisplayType": "SERIES",
"reportDisplayType": "CHART",
"reportId": "23",
"reportIdUUId": "demo-widget-23",
"reportObject": {
"chartDisplayType": "TABLE",
"computedSeriesJSON": "[]",
"consolidationPeriod": "HR_1",
"customEndDate": 1768829478260,
"customStartDate": 1768743078260,
"dataAxisLabelsAngle": "90",
"dataRange": "CUSTOM_TIME",
"dateRange": "CUSTOM_TIME",
"displayPropertiesJSON": "[\"Endpoint > nodeName\",\"Endpoint > sourceName\",\"Demo Rx Metric\",\"Demo Tx Metric\"]",
"enableForPortal": false,
"expressionJSON": "{\"exp\":{\"log\":{\"o\":\"AND\",\"args\":[{\"comp\":{\"c\":\"example.model.Endpoint\",\"o\":\"CONTAINS\",\"v\":\"SITE-A\",\"colDisp\":\"Endpoint > Node\",\"colAlias\":\"Endpoint > nodeName\",\"p\":\"nodeName\"}}]}}}",
"globallyViewable": false,
"groupByPropertiesJSON": "[]",
"id": "23",
"isDashboardComponent": false,
"isFolder": false,
"isReportComponent": false,
"legendDisplaySize": 1,
"legendSeriesCount": 2,
"logarithmicAxis": false,
"name": "Demo report",
"numberLimit": 10000,
"object-type": "perf-report",
"orderByPropertiesJSON": "[]",
"pageSize": 10000,
"parentNode": "root",
"pmReportDataSourceType": "AUTO",
"pmReportDisplayType": "TABLE",
"pmReportSeriesData": [
{
"customLabel": "",
"displayColor": "HEXA_DECIMAL_VALUE",
"displayType": "LINE",
"enabled": true,
"endPoint": "Demo-SA-IPVPN-1312456",
"endPointId": "9d494c67-6391-4042-b0ac-5aa618ea9ec4",
"endPointName": "Demo-SA-IPVPN-1312456",
"hexaDisplayColor": "#6495ED",
"minmaxDisplayColor": "HEXA_DECIMAL_VALUE",
"minmaxDisplayType": "CANDLESTICK",
"minmaxHexaColor": "#6495ED",
"minmaxOpacity": "25",
"nodeName": "Demo-SA-IPVPN-1312456",
"object-type": "perf-report-series-metric",
"performanceMetricId": "780b7f4b-7b23-4b08-876a-3e1d64a01342",
"performanceMetricName": "Service Latency",
"serviceId": "9d494c67-6391-4042-b0ac-5aa618ea9ec4",
"serviceName": "Demo-SA-IPVPN-1312456",
"showMinMaxValue": false,
"valueLabelOnPoint": false
},
{
"customLabel": "",
"displayColor": "HEXA_DECIMAL_VALUE",
"displayType": "LINE",
"enabled": true,
"endPoint": "Demo-VPN-ET-107147",
"endPointId": "90085078-5154-4cba-83f3-6b3c07d26368",
"endPointName": "Demo-VPN-ET-107147",
"hexaDisplayColor": "#6495ED",
"minmaxDisplayColor": "HEXA_DECIMAL_VALUE",
"minmaxDisplayType": "CANDLESTICK",
"minmaxHexaColor": "#6495ED",
"minmaxOpacity": "25",
"nodeName": "Demo-VPN-ET-107147",
"object-type": "perf-report-series-metric",
"performanceMetricId": "780b7f4b-7b23-4b08-876a-3e1d64a01342",
"performanceMetricName": "Service Latency",
"serviceId": "90085078-5154-4cba-83f3-6b3c07d26368",
"serviceName": "Demo-VPN-ET-107147",
"showMinMaxValue": false,
"valueLabelOnPoint": false
}
],
"pmReportType": "SERIES",
"reportObjectType": "SERVICE",
"showDataAxisLabels": false,
"showIndividualCharts": false,
"showIndividualChartsHeight": 300,
"showIndividualChartsLayout": 1,
"showLegend": false,
"showThresholdLine": false,
"userGroupsJSON": "[]",
"usersJSON": "[\"demo_user\"]",
"visualizationDataType": "PM_REPORT",
"ascendingOrderListJSON": "[]"
},
"reportUUID": "",
"scheduled": false,
"timePeriod": "HOUR",
"triggerScheduledDataGeneration": false,
"userTimeZone": "UTC"
},
"queryText": "${Severity} ${Service} ${Node} ${Subnetwork} ${EndPoint}",
"refId": "A",
"reportDisplayType": "CHART",
"timePeriod": "HOUR"
}
],
"title": "",
"type": "timeseries"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 24
},
"id": 20,
"panels": [],
"title": "Service Alarms",
"type": "row"
},
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "red",
"mode": "fixed"
},
"custom": {
"align": "auto",
"cellOptions": {
"type": "auto"
},
"inspect": false
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 24,
"x": 0,
"y": 25
},
"id": 19,
"options": {
"cellHeight": "sm",
"footer": {
"countRows": false,
"fields": "",
"reducer": [
"sum"
],
"show": false
},
"showHeader": true,
"sortBy": [
{
"desc": true,
"displayName": "Last raised time"
}
]
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "grafana-postgresql-datasource",
"uid": "dummy-postgres-datasource"
},
"editorMode": "code",
"format": "table",
"rawQuery": true,
"rawSql": "SELECT \"Service\", \"Status\", \"Severity\"\nFROM public.demo_services\nLIMIT 100;",
"refId": "A",
"sql": {
"columns": [
{
"parameters": [],
"type": "function"
}
],
"groupBy": [
{
"property": {
"type": "string"
},
"type": "groupBy"
}
],
"limit": 50,
"table": "public.demo_services",
"whereString": "1 = 1"
},
"table": "public.active_alarms"
}
],
"title": "",
"type": "table"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 33
},
"id": 12,
"panels": [],
"title": "Ethernet Discards/Errors",
"type": "row"
},
{
"datasource": {
"type": "dummy-custom-datasource",
"uid": "dummy-custom-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"custom": {
"align": "auto",
"cellOptions": {
"applyToRow": false,
"mode": "gradient",
"type": "color-background",
"wrapText": false
},
"inspect": false
},
"fieldMinMax": false,
"mappings": [
{
"options": {
"from": 0,
"result": {
"color": "green",
"index": 0
},
"to": 50
},
"type": "range"
},
{
"options": {
"from": 51,
"result": {
"color": "orange",
"index": 1
},
"to": 1000
},
"type": "range"
}
],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "none"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "End Point > Node"
},
"properties": [
{
"id": "custom.cellOptions",
"value": {
"type": "auto",
"wrapText": false
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "End Point > Source"
},
"properties": [
{
"id": "custom.cellOptions",
"value": {
"type": "auto",
"wrapText": false
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "End Point > Node"
},
"properties": [
{
"id": "displayName",
"value": "Node"
}
]
},
{
"matcher": {
"id": "byName",
"options": "End Point > Source"
},
"properties": [
{
"id": "displayName",
"value": "Endpoint"
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 34
},
"id": 7,
"options": {
"cellHeight": "sm",
"footer": {
"countRows": false,
"enablePagination": false,
"fields": "",
"reducer": [
"sum"
],
"show": false
},
"showHeader": true,
"sortBy": [
{
"desc": false,
"displayName": "End Point > Source"
}
]
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "dummy-custom-datasource",
"uid": "dummy-custom-datasource"
},
"payload": {
"addToEndpointContextMenu": false,
"addToNodeContextMenu": false,
"addToServiceContextMenu": false,
"addToSubnetContextMenu": false,
"applyVariables": false,
"consolidation": "NONE",
"contextJSON": "{}",
"customEndDate": 1772513777627,
"customHourOrDay": "7",
"customStartDate": 1772510177627,
"dataSourceType": "performance-metric",
"dateRange": "CUSTOM_TIME",
"isEditModeForReport": false,
"isReportPlayed": true,
"offline": false,
"page": "1",
"pageSize": "10000",
"reportDisplayType": "TABLE",
"reportId": "7",
"reportIdUUId": "demo-widget-7",
"reportObject": {
"addToEndpointContextMenu": false,
"addToNodeContextMenu": false,
"addToServiceContextMenu": false,
"addToSubnetContextMenu": false,
"aggregationFunction": "METRIC",
"aggregationType": "NO_AGGREGATION",
"ascendingOrderListJSON": "[]",
"bucketResultByTimePeriod": false,
"chartDisplayType": "TABLE",
"computedSeriesJSON": "[]",
"consolidationPeriod": "NONE",
"customEndDate": 1772513777850,
"customStartDate": 1772427377850,
"dataAxisLabelsAngle": "90",
"dataRange": "LAST_24_HOURS",
"displayPropertiesJSON": "[\"Endpoint > nodeName\",\"Endpoint > sourceName\",\"Demo Rx Metric\",\"Demo Tx Metric\"]",
"enableForPortal": false,
"expressionJSON": "{\"exp\":{\"log\":{\"o\":\"AND\",\"args\":[{\"comp\":{\"c\":\"example.model.Endpoint\",\"o\":\"CONTAINS\",\"v\":\"SITE-A\",\"colDisp\":\"Endpoint > Node\",\"colAlias\":\"Endpoint > nodeName\",\"p\":\"nodeName\"}}]}}}",
"globallyViewable": false,
"groupByPropertiesJSON": "[]",
"id": "7",
"isDashboardComponent": false,
"isFolder": false,
"isReportComponent": false,
"legendDisplaySize": 1,
"legendSeriesCount": 2,
"logarithmicAxis": false,
"name": "Demo performance metric",
"numberLimit": 10000,
"object-type": "perf-report",
"orderByPropertiesJSON": "[]",
"pageSize": 10,
"pmReportDataSourceType": "AUTO",
"pmReportDisplayType": "TABLE",
"pmReportMetricData": [
{
"displayColor": "HEXA_DECIMAL_VALUE",
"displayType": "TABLE",
"enabled": true,
"hasMinMax": false,
"hexaDisplayColor": "#6495ED",
"metricId": "demo.metric.1",
"metricName": "Demo Rx Metric",
"metricType": 25,
"minMaxDisplayType": "CANDLESTICK",
"minMaxOpacity": 25,
"object-type": "perf-report-metric",
"protocol": "DEMO",
"showMinMaxValue": false,
"showValueLabels": false
},
{
"displayColor": "HEXA_DECIMAL_VALUE",
"displayType": "TABLE",
"enabled": true,
"hasMinMax": false,
"hexaDisplayColor": "#6495ED",
"metricId": "demo.metric.2",
"metricName": "Demo Tx Metric",
"metricType": 31,
"minMaxDisplayType": "CANDLESTICK",
"minMaxOpacity": 25,
"object-type": "perf-report-metric",
"protocol": "DEMO",
"showMinMaxValue": false,
"showValueLabels": false
}
],
"pmReportType": "METRIC",
"reportObjectType": "END_POINT",
"showDataAxisLabels": false,
"showIndividualCharts": false,
"showIndividualChartsHeight": 300,
"showIndividualChartsLayout": 1,
"showLegend": false,
"userGroupsJSON": "[]",
"usersJSON": "[\"demo_user\"]",
"visualizationDataType": "PM_REPORT"
},
"reportUUID": "",
"scheduled": false,
"timePeriod": "HOUR",
"triggerScheduledDataGeneration": false,
"userTimeZone": "UTC"
},
"queryText": "${Severity} ${Service} ${Node} ${Subnetwork} ${EndPoint}",
"refId": "A",
"reportDisplayType": "CHART",
"timePeriod": "HOUR"
}
],
"title": "",
"type": "table"
},
{
"datasource": {
"type": "dummy-custom-datasource",
"uid": "dummy-custom-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"custom": {
"align": "auto",
"cellOptions": {
"mode": "basic",
"type": "color-background"
},
"inspect": false
},
"fieldMinMax": false,
"mappings": [
{
"options": {
"from": 0,
"result": {
"color": "green",
"index": 0
},
"to": 50
},
"type": "range"
},
{
"options": {
"from": 51,
"result": {
"color": "orange",
"index": 1
},
"to": 1000
},
"type": "range"
}
],
"thresholds": {
"mode": "percentage",
"steps": [
{
"color": "green"
}
]
},
"unit": "none"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "End Point > Node"
},
"properties": [
{
"id": "displayName",
"value": "Node"
},
{
"id": "custom.cellOptions",
"value": {
"type": "auto"
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "End Point > Source"
},
"properties": [
{
"id": "displayName",
"value": "Interface"
},
{
"id": "custom.cellOptions",
"value": {
"type": "auto"
}
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 34
},
"id": 11,
"options": {
"cellHeight": "sm",
"footer": {
"countRows": false,
"fields": "",
"reducer": [
"sum"
],
"show": false
},
"showHeader": true
},
"pluginVersion": "11.6.8",
"targets": [
{
"datasource": {
"type": "dummy-custom-datasource",
"uid": "dummy-custom-datasource"
},
"payload": {
"addToEndpointContextMenu": false,
"addToNodeContextMenu": false,
"addToServiceContextMenu": false,
"addToSubnetContextMenu": false,
"applyVariables": true,
"consolidation": "NONE",
"contextJSON": "{}",
"customEndDate": 1772513831678,
"customHourOrDay": "7",
"customStartDate": 1772510231678,
"dataSourceType": "performance-metric",
"dateRange": "CUSTOM_TIME",
"isEditModeForReport": false,
"isReportPlayed": true,
"offline": false,
"page": "1",
"pageSize": "10000",
"reportDisplayType": "TABLE",
"reportId": "11",
"reportIdUUId": "demo-widget-11",
"reportObject": {
"addToEndpointContextMenu": false,
"addToNodeContextMenu": false,
"addToServiceContextMenu": false,
"addToSubnetContextMenu": false,
"aggregationFunction": "METRIC",
"aggregationType": "NO_AGGREGATION",
"ascendingOrderListJSON": "[]",
"bucketResultByTimePeriod": false,
"chartDisplayType": "TABLE",
"computedSeriesJSON": "[]",
"consolidationPeriod": "NONE",
"customEndDate": 1772513831902,
"customStartDate": 1772427431902,
"dataAxisLabelsAngle": "90",
"dataRange": "LAST_24_HOURS",
"displayPropertiesJSON": "[\"Endpoint > nodeName\",\"Endpoint > sourceName\",\"Demo Rx Metric\",\"Demo Tx Metric\"]",
"enableForPortal": false,
"expressionJSON": "{\"exp\":{\"log\":{\"o\":\"AND\",\"args\":[{\"comp\":{\"c\":\"example.model.Endpoint\",\"o\":\"CONTAINS\",\"v\":\"SITE-A\",\"colDisp\":\"Endpoint > Node\",\"colAlias\":\"Endpoint > nodeName\",\"p\":\"nodeName\"}}]}}}",
"globallyViewable": false,
"groupByPropertiesJSON": "[]",
"id": "11",
"isDashboardComponent": false,
"isFolder": false,
"isReportComponent": false,
"legendDisplaySize": 1,
"legendSeriesCount": 2,
"logarithmicAxis": false,
"name": "Demo performance metric",
"numberLimit": 10000,
"object-type": "perf-report",
"orderByPropertiesJSON": "[]",
"pageSize": 10,
"pmReportDataSourceType": "AUTO",
"pmReportDisplayType": "TABLE",
"pmReportMetricData": [
{
"displayColor": "HEXA_DECIMAL_VALUE",
"displayType": "TABLE",
"enabled": true,
"hasMinMax": false,
"hexaDisplayColor": "#6495ED",
"metricId": "demo.metric.1",
"metricName": "Demo Rx Metric",
"metricType": 24,
"minMaxDisplayType": "CANDLESTICK",
"minMaxOpacity": 25,
"object-type": "perf-report-metric",
"protocol": "DEMO",
"showMinMaxValue": false,
"showValueLabels": false
},
{
"displayColor": "HEXA_DECIMAL_VALUE",
"displayType": "TABLE",
"enabled": true,
"hasMinMax": false,
"hexaDisplayColor": "#6495ED",
"metricId": "demo.metric.2",
"metricName": "Demo Tx Metric",
"metricType": 30,
"minMaxDisplayType": "CANDLESTICK",
"minMaxOpacity": 25,
"object-type": "perf-report-metric",
"protocol": "DEMO",
"showMinMaxValue": false,
"showValueLabels": false
}
],
"pmReportType": "METRIC",
"reportObjectType": "END_POINT",
"showDataAxisLabels": false,
"showIndividualCharts": false,
"showIndividualChartsHeight": 300,
"showIndividualChartsLayout": 1,
"showLegend": false,
"userGroupsJSON": "[]",
"usersJSON": "[\"demo_user\"]",
"visualizationDataType": "PM_REPORT"
},
"reportUUID": "",
"scheduled": false,
"timePeriod": "HOUR",
"triggerScheduledDataGeneration": false,
"userTimeZone": "UTC"
},
"queryText": "${Severity} ${Service} ${Node} ${Subnetwork} ${EndPoint}",
"refId": "A",
"reportDisplayType": "CHART",
"timePeriod": "HOUR"
}
],
"title": "",
"type": "table"
}
],
"preload": false,
"schemaVersion": 41,
"tags": [
"redacted",
"demo",
"grafana-community"
],
"templating": {
"list": []
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {},
"timezone": "browser",
"title": "Demo Service Monitoring Dashboard",
"uid": "demo-service-dashboard",
"version": 1,
"weekStart": "monday",
"description": "Redacted dashboard export for reproducing delayed panel edit dirty state."
}
Hi,
Please let know for further update on this Ticket
Thanks
Hi,
To help narrow this down, I ran a controlled test using a different JSON-based datasource Infinity to check whether this is a general issue with any nested/custom query shape, or specific to your plugin.
Setup → Panel using the Infinity datasource, saved and dashboard reloaded, then reopened in edit mode (matching your exact repro steps and not a freshly created panel). Changed Parser from JSONata → Frontend.
Result → Discard panel changes enabled immediately no tab switch needed.
This rules out “any custom/nested-query datasource” as a general cause, and points toward something specific to how your dummy-custom-datasource plugin reports its query state back to Grafana.
Workaround → Use the “Changes” tab in Save Dashboard instead of relying on the Discard panel changes button — it correctly reflects your edits every time and is not affected by this issue. Save Dashboard → Changes tab will show you exactly what changed before you commit, so you’re not blocked while this is investigated further.
Sure
Thanks



