From f443f3b3dc8273137070ca01c2746df6448d97de Mon Sep 17 00:00:00 2001 From: ahinvinith Date: Fri, 3 May 2024 13:08:19 +0530 Subject: [PATCH] fix: echart error for trivy dashboard --- charts/client/Chart.yaml | 2 +- .../templates/configmap-trivy-dashboard.yaml | 207 ++++++++++-------- grafana/trivy-dashboard.json | 84 ++++--- 3 files changed, 163 insertions(+), 130 deletions(-) diff --git a/charts/client/Chart.yaml b/charts/client/Chart.yaml index 024cd3bb..81451ca3 100644 --- a/charts/client/Chart.yaml +++ b/charts/client/Chart.yaml @@ -15,7 +15,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.1.26 +version: 1.1.27 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to diff --git a/charts/client/templates/configmap-trivy-dashboard.yaml b/charts/client/templates/configmap-trivy-dashboard.yaml index fee0c1f4..bffaae1f 100644 --- a/charts/client/templates/configmap-trivy-dashboard.yaml +++ b/charts/client/templates/configmap-trivy-dashboard.yaml @@ -32,7 +32,7 @@ data: "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 71, + "id": 66, "links": [], "liveNow": false, "panels": [ @@ -50,7 +50,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -62,6 +62,7 @@ data: "cellOptions": { "type": "auto" }, + "filterable": true, "inspect": false }, "mappings": [], @@ -137,7 +138,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "editorMode": "builder", @@ -158,7 +159,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -170,6 +171,7 @@ data: "cellOptions": { "type": "auto" }, + "filterable": true, "inspect": false }, "mappings": [], @@ -245,7 +247,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "editorMode": "builder", @@ -266,7 +268,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -278,6 +280,7 @@ data: "cellOptions": { "type": "auto" }, + "filterable": true, "inspect": false }, "mappings": [], @@ -353,7 +356,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "editorMode": "builder", @@ -374,7 +377,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -386,6 +389,7 @@ data: "cellOptions": { "type": "auto" }, + "filterable": true, "inspect": false }, "mappings": [], @@ -461,7 +465,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "editorMode": "builder", @@ -482,7 +486,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -550,7 +554,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "editorMode": "builder", @@ -571,7 +575,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -639,7 +643,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "editorMode": "builder", @@ -660,7 +664,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -728,7 +732,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "editorMode": "builder", @@ -749,7 +753,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -817,7 +821,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "editorMode": "builder", @@ -838,7 +842,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -858,8 +862,7 @@ data: "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -894,7 +897,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "editorMode": "builder", @@ -915,7 +918,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -932,8 +935,7 @@ data: "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -984,7 +986,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "editorMode": "builder", @@ -1005,7 +1007,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -1026,8 +1028,7 @@ data: "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" } ] } @@ -1058,7 +1059,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -1066,7 +1067,8 @@ data: "formattedQuery": "SELECT $timeSeries as t, count() FROM $table WHERE $timeFilter GROUP BY t ORDER BY t", "intervalFactor": 1, "query": "SELECT \"cluster_name\", \"EventTime\", \"artifact_name\", \"vul_id\", \"vul_pkg_id\", \"vul_pkg_name\", \"vul_installed_version\", \"vul_fixed_version\", \"vul_title\", \"vul_severity\", \"vul_published_date\", \"vul_last_modified_date\" \nFROM \"default\".\"trivyimage\"\nWHERE $timeFilterByColumn(EventTime)\nORDER BY EventTime DESC", - "rawQuery": "SELECT \"cluster_name\", \"EventTime\", \"artifact_name\", \"vul_id\", \"vul_pkg_id\", \"vul_pkg_name\", \"vul_installed_version\", \"vul_fixed_version\", \"vul_title\", \"vul_severity\", \"vul_published_date\", \"vul_last_modified_date\" \nFROM \"default\".\"trivyimage\"\nWHERE EventTime >= toDateTime(1693581675) AND EventTime <= toDateTime(1694186475)\nORDER BY EventTime DESC", + "rawQuery": "SELECT \"cluster_name\", \"EventTime\", \"artifact_name\", \"vul_id\", \"vul_pkg_id\", \"vul_pkg_name\", \"vul_installed_version\", \"vul_fixed_version\", \"vul_title\", \"vul_severity\", \"vul_published_date\", \"vul_last_modified_date\" \nFROM \"default\".\"trivyimage\"\nWHERE EventTime >= toDateTime(1693581675) AND EventTime <= toDateTime(1694186475)\nORDER BY EventTime DESC", + "refId": "A", "round": "0s", "skip_comments": true } @@ -1077,7 +1079,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -1098,8 +1100,7 @@ data: "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" } ] } @@ -1130,7 +1131,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "editorMode": "builder", @@ -1161,13 +1162,13 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "gridPos": { "h": 8, "w": 12, "x": 0, - "y": 97 + "y": 58 }, "id": 36, "options": { @@ -1179,11 +1180,12 @@ data: "format": "auto", "height": 600 }, + "editorMode": "code", "gaode": { "key": "", "plugin": "AMap.Scale,AMap.ToolBar" }, - "getOption": "let severity = [];\nlet counts = [];\n\ndata.series.map((s) => {\n severity = s.fields.find((f) => f.name === 'vul_severity').values;\n counts = s.fields.find((f) => f.name === 'total_count').values;\n});\n\n// Create an empty array to store pie chart data\nconst pieChartData = [];\n\n// Define colors for pie slices\nconst pieSliceColors = ['#235894', '#FF0000', '#00FF00', '#FFFF00', '#FFA500'];\n\n// Map severity and counts to pie chart data\nseverity.forEach((sev, index) => {\n pieChartData.push({\n value: counts[index],\n name: sev,\n itemStyle: {\n opacity: 0.7,\n color: pieSliceColors[index % pieSliceColors.length],\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n });\n});\n\nreturn {\n backgroundColor: '#FFFFFF', // Set the background color to white\n tooltip: {},\n series: [\n {\n name: 'pie',\n type: 'pie',\n selectedMode: 'single',\n selectedOffset: 30,\n clockwise: true,\n label: {\n fontSize: 18,\n color: '#235894',\n },\n labelLine: {\n lineStyle: {\n color: '#235894',\n },\n },\n data: pieChartData, // Use the modified pie chart data\n itemStyle: {\n opacity: 0.7,\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n },\n ],\n};", + "getOption": "let severity = [];\nlet counts = [];\nlet clusterNames = [];\n\n// Extract severity, counts, and cluster names from each series\ncontext.panel.data.series.forEach((s) => {\n const severityField = s.fields.find((f) => f.name === 'vul_severity');\n const countsField = s.fields.find((f) => f.name === 'total_count');\n const clusterNameField = s.fields.find((f) => f.name === 'cluster_name');\n\n if (severityField && countsField && clusterNameField) {\n severity.push(...severityField.values);\n counts.push(...countsField.values);\n clusterNames.push(...clusterNameField.values);\n }\n});\n\n// Create an empty array to store pie chart data\nconst pieChartData = [];\n\n// Define colors for pie slices\nconst pieSliceColors = ['#235894', '#FF0000', '#00FF00', '#FFFF00', '#FFA500'];\n\n// Map severity, counts, and cluster names to pie chart data\nseverity.forEach((sev, index) => {\n pieChartData.push({\n value: counts[index],\n name: sev,\n clusterName: clusterNames[index], // Add cluster name\n itemStyle: {\n opacity: 0.7,\n color: pieSliceColors[index % pieSliceColors.length],\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n });\n});\n\n// Return the ECharts options object\nreturn {\n backgroundColor: '#FFFFFF', // Set the background color to white\n tooltip: {\n trigger: 'item',\n formatter: function (params) {\n return `Severity: ${params.data.name}
Cluster Name: ${params.data.clusterName}
Count: ${params.data.value}`;\n },\n },\n series: [\n {\n name: 'pie',\n type: 'pie',\n selectedMode: 'single',\n selectedOffset: 30,\n clockwise: true,\n label: {\n fontSize: 18,\n color: '#235894',\n },\n labelLine: {\n lineStyle: {\n color: '#235894',\n },\n },\n data: pieChartData, // Use the modified pie chart data\n itemStyle: {\n opacity: 0.7,\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n },\n ],\n};\n", "google": { "callback": "gmapReady", "key": "" @@ -1194,21 +1196,28 @@ data: "config": "{}", "height": 400, "name": "default" + }, + "visualEditor": { + "code": "return {\n dataset: context.editor.dataset,\n series: context.editor.series,\n xAxis: {\n type: 'time',\n },\n yAxis: {\n type: 'value',\n min: 'dataMin',\n },\n}\n", + "dataset": [], + "series": [] } }, + "pluginVersion": "6.0.0", "targets": [ { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", + "editorMode": "builder", "extrapolate": true, "format": "table", "formattedQuery": "SELECT $timeSeries as t, count() FROM $table WHERE $timeFilter GROUP BY t ORDER BY t", "intervalFactor": 1, - "query": "SELECT vul_severity, count(*) AS total_count\nFROM default.trivy_vul\nWHERE $timeFilterByColumn(vul_last_modified_date)\nGROUP BY vul_severity", - "rawQuery": "SELECT vul_severity, count(*) AS total_count\nFROM default.trivy_vul\nWHERE vul_last_modified_date >= toDateTime(1694438766) AND vul_last_modified_date <= toDateTime(1694611566)\nGROUP BY vul_severity", + "query": "SELECT cluster_name, vul_severity, count(*) AS total_count\nFROM default.trivy_vul\nWHERE $timeFilterByColumn(vul_last_modified_date)\nGROUP BY cluster_name, vul_severity", + "rawQuery": "SELECT cluster_name, vul_severity, count(*) AS total_count\nFROM default.trivy_vul\nWHERE vul_last_modified_date >= toDateTime(1714632860) AND vul_last_modified_date <= toDateTime(1714719260)\nGROUP BY cluster_name, vul_severity", "refId": "A", "round": "0s", "skip_comments": true @@ -1220,13 +1229,13 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "gridPos": { "h": 8, "w": 12, "x": 12, - "y": 97 + "y": 58 }, "id": 37, "options": { @@ -1238,11 +1247,12 @@ data: "format": "auto", "height": 600 }, + "editorMode": "code", "gaode": { "key": "", "plugin": "AMap.Scale,AMap.ToolBar" }, - "getOption": "let severity = [];\nlet counts = [];\n\ndata.series.map((s) => {\n severity = s.fields.find((f) => f.name === 'misconfig_severity').values;\n counts = s.fields.find((f) => f.name === 'total_count').values;\n});\n\n// Create an empty array to store pie chart data\nconst pieChartData = [];\n\n// Define colors for pie slices\nconst pieSliceColors = ['#235894', '#FF0000', '#00FF00', '#FFFF00', '#FFA500'];\n\n// Map severity and counts to pie chart data\nseverity.forEach((sev, index) => {\n pieChartData.push({\n value: counts[index],\n name: sev,\n itemStyle: {\n opacity: 0.7,\n color: pieSliceColors[index % pieSliceColors.length],\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n });\n});\n\nreturn {\n backgroundColor: '#FFFFFF', // Set the background color to white\n tooltip: {},\n series: [\n {\n name: 'pie',\n type: 'pie',\n selectedMode: 'single',\n selectedOffset: 30,\n clockwise: true,\n label: {\n fontSize: 18,\n color: '#235894',\n },\n labelLine: {\n lineStyle: {\n color: '#235894',\n },\n },\n data: pieChartData, // Use the modified pie chart data\n itemStyle: {\n opacity: 0.7,\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n },\n ],\n};", + "getOption": "let severity = [];\nlet counts = [];\nlet clusterNames = [];\n\n// Extract severity, counts, and cluster names from each series\ncontext.panel.data.series.forEach((s) => {\n const severityField = s.fields.find((f) => f.name === 'misconfig_severity');\n const countsField = s.fields.find((f) => f.name === 'total_count');\n const clusterNameField = s.fields.find((f) => f.name === 'cluster_name');\n\n if (severityField && countsField && clusterNameField) {\n severity.push(...severityField.values);\n counts.push(...countsField.values);\n clusterNames.push(...clusterNameField.values);\n }\n});\n\n// Create an empty array to store pie chart data\nconst pieChartData = [];\n\n// Define colors for pie slices\nconst pieSliceColors = ['#235894', '#FF0000', '#00FF00', '#FFFF00', '#FFA500'];\n\n// Map severity, counts, and cluster names to pie chart data\nseverity.forEach((sev, index) => {\n pieChartData.push({\n value: counts[index],\n name: sev,\n clusterName: clusterNames[index], // Add cluster name\n itemStyle: {\n opacity: 0.7,\n color: pieSliceColors[index % pieSliceColors.length],\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n });\n});\n\n// Return the ECharts options object\nreturn {\n backgroundColor: '#FFFFFF', // Set the background color to white\n tooltip: {\n trigger: 'item',\n formatter: function (params) {\n return `Severity: ${params.data.name}
Cluster Name: ${params.data.clusterName}
Count: ${params.data.value}`;\n },\n },\n series: [\n {\n name: 'pie',\n type: 'pie',\n selectedMode: 'single',\n selectedOffset: 30,\n clockwise: true,\n label: {\n fontSize: 18,\n color: '#235894',\n },\n labelLine: {\n lineStyle: {\n color: '#235894',\n },\n },\n data: pieChartData, // Use the modified pie chart data\n itemStyle: {\n opacity: 0.7,\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n },\n ],\n};\n", "google": { "callback": "gmapReady", "key": "" @@ -1253,21 +1263,28 @@ data: "config": "{}", "height": 400, "name": "default" + }, + "visualEditor": { + "code": "return {\n dataset: context.editor.dataset,\n series: context.editor.series,\n xAxis: {\n type: 'time',\n },\n yAxis: {\n type: 'value',\n min: 'dataMin',\n },\n}\n", + "dataset": [], + "series": [] } }, + "pluginVersion": "6.0.0", "targets": [ { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", + "editorMode": "builder", "extrapolate": true, "format": "table", "formattedQuery": "SELECT $timeSeries as t, count() FROM $table WHERE $timeFilter GROUP BY t ORDER BY t", "intervalFactor": 1, - "query": "SELECT misconfig_severity, count(*) AS total_count\nFROM default.trivy_misconfig\nWHERE $timeFilterByColumn(EventTime)\nGROUP BY misconfig_severity", - "rawQuery": "SELECT misconfig_severity, count(*) AS total_count\nFROM default.trivy_misconfig\nWHERE EventTime >= toDateTime(1694438912) AND EventTime <= toDateTime(1694611712)\nGROUP BY misconfig_severity", + "query": "SELECT cluster_name, misconfig_severity, count(*) AS total_count\nFROM default.trivy_misconfig\nWHERE $timeFilterByColumn(EventTime)\nGROUP BY cluster_name, misconfig_severity", + "rawQuery": "SELECT cluster_name, misconfig_severity, count(*) AS total_count\nFROM default.trivy_misconfig\nWHERE EventTime >= toDateTime(1714632780) AND EventTime <= toDateTime(1714719180)\nGROUP BY cluster_name, misconfig_severity", "refId": "A", "round": "0s", "skip_comments": true @@ -1279,7 +1296,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel illustrates the distribution of vulnerability severities across different clusters. It provides an overview of the count of vulnerabilities categorized by severity levels within each cluster.", "fieldConfig": { @@ -1308,7 +1325,7 @@ data: "h": 8, "w": 12, "x": 0, - "y": 105 + "y": 66 }, "id": 20, "options": { @@ -1329,7 +1346,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -1349,7 +1366,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel illustrates the distribution of misconfiguration severities across different clusters. It provides an overview of the count of misconfigurations categorized by severity levels within each cluster. ", "fieldConfig": { @@ -1378,7 +1395,7 @@ data: "h": 8, "w": 12, "x": 12, - "y": 105 + "y": 66 }, "id": 22, "options": { @@ -1399,7 +1416,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -1419,7 +1436,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel displays the total number Vulnerabilities under each namespace", "fieldConfig": { @@ -1449,7 +1466,7 @@ data: "h": 5, "w": 12, "x": 0, - "y": 113 + "y": 74 }, "id": 18, "options": { @@ -1467,7 +1484,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -1487,7 +1504,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel displays the total of misconfigurations from each clusters.", "fieldConfig": { @@ -1517,7 +1534,7 @@ data: "h": 5, "w": 12, "x": 12, - "y": 113 + "y": 74 }, "id": 16, "options": { @@ -1535,7 +1552,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -1555,7 +1572,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel provides a count of high vulnerabilities categorized by namespace. It helps to monitor and prioritize high security issues across different namespaces.", "fieldConfig": { @@ -1584,7 +1601,7 @@ data: "h": 7, "w": 12, "x": 0, - "y": 118 + "y": 79 }, "id": 29, "options": { @@ -1605,7 +1622,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -1625,7 +1642,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel provides a count of high misconfigurations categorized by namespace. It helps to monitor and prioritize high security issues across different namespaces.", "fieldConfig": { @@ -1654,7 +1671,7 @@ data: "h": 7, "w": 12, "x": 12, - "y": 118 + "y": 79 }, "id": 30, "options": { @@ -1675,7 +1692,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -1695,7 +1712,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel provides a count of Low vulnerabilities categorized by namespace. It helps to monitor and prioritize Low security issues across different namespaces.", "fieldConfig": { @@ -1724,7 +1741,7 @@ data: "h": 7, "w": 12, "x": 0, - "y": 125 + "y": 86 }, "id": 27, "options": { @@ -1745,7 +1762,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -1765,7 +1782,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel provides a count of low misconfigurations categorized by namespace. It helps to monitor and prioritize low security issues across different namespaces.", "fieldConfig": { @@ -1794,7 +1811,7 @@ data: "h": 7, "w": 12, "x": 12, - "y": 125 + "y": 86 }, "id": 28, "options": { @@ -1815,7 +1832,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -1835,7 +1852,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel provides a count of Medium vulnerabilities categorized by namespace. It helps to monitor and prioritize Medium security issues across different namespaces.", "fieldConfig": { @@ -1864,7 +1881,7 @@ data: "h": 7, "w": 12, "x": 0, - "y": 132 + "y": 93 }, "id": 25, "options": { @@ -1885,7 +1902,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -1905,7 +1922,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel provides a count of medium misconfigurations categorized by namespace. It helps to monitor and prioritize medium security issues across different namespaces.", "fieldConfig": { @@ -1934,7 +1951,7 @@ data: "h": 7, "w": 12, "x": 12, - "y": 132 + "y": 93 }, "id": 26, "options": { @@ -1955,7 +1972,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -1975,7 +1992,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel provides a count of critical vulnerabilities categorized by namespace. It helps to monitor and prioritize critical security issues across different namespaces.", "fieldConfig": { @@ -2004,7 +2021,7 @@ data: "h": 7, "w": 12, "x": 0, - "y": 139 + "y": 100 }, "id": 12, "options": { @@ -2025,7 +2042,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -2045,7 +2062,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel provides a count of critical misconfigurations categorized by namespace. It helps to monitor and prioritize critical security issues across different namespaces.", "fieldConfig": { @@ -2074,7 +2091,7 @@ data: "h": 7, "w": 12, "x": 12, - "y": 139 + "y": 100 }, "id": 14, "options": { @@ -2095,7 +2112,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -2116,7 +2133,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel displays the count of vulnerabilities in different clusters and namespaces.", "fieldConfig": { @@ -2145,7 +2162,7 @@ data: "h": 8, "w": 12, "x": 0, - "y": 146 + "y": 107 }, "id": 6, "options": { @@ -2166,7 +2183,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -2186,7 +2203,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "description": "This panel displays the count of Misconfigurations in different clusters and namespaces.", "fieldConfig": { @@ -2215,7 +2232,7 @@ data: "h": 8, "w": 12, "x": 12, - "y": 146 + "y": 107 }, "id": 4, "options": { @@ -2236,7 +2253,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -2256,7 +2273,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -2288,7 +2305,7 @@ data: "h": 8, "w": 24, "x": 0, - "y": 154 + "y": 115 }, "id": 32, "options": { @@ -2308,7 +2325,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -2328,7 +2345,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "fieldConfig": { "defaults": { @@ -2360,7 +2377,7 @@ data: "h": 8, "w": 24, "x": 0, - "y": 162 + "y": 123 }, "id": 33, "options": { @@ -2380,7 +2397,7 @@ data: { "datasource": { "type": "vertamedia-clickhouse-datasource", - "uid": "{{ .Values.datasources.uid }}" + "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", "extrapolate": true, @@ -2417,7 +2434,7 @@ data: "timezone": "", "title": "Trivy", "uid": "f9b0a865-f419-410a-b7d9-9a3f79a70d48", - "version": 2, + "version": 5, "weekStart": "" } diff --git a/grafana/trivy-dashboard.json b/grafana/trivy-dashboard.json index 7241ee58..4d2cf660 100644 --- a/grafana/trivy-dashboard.json +++ b/grafana/trivy-dashboard.json @@ -21,7 +21,7 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 71, + "id": 66, "links": [], "liveNow": false, "panels": [ @@ -51,6 +51,7 @@ "cellOptions": { "type": "auto" }, + "filterable": true, "inspect": false }, "mappings": [], @@ -159,6 +160,7 @@ "cellOptions": { "type": "auto" }, + "filterable": true, "inspect": false }, "mappings": [], @@ -267,6 +269,7 @@ "cellOptions": { "type": "auto" }, + "filterable": true, "inspect": false }, "mappings": [], @@ -375,6 +378,7 @@ "cellOptions": { "type": "auto" }, + "filterable": true, "inspect": false }, "mappings": [], @@ -847,8 +851,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -921,8 +924,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1015,8 +1017,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" } ] } @@ -1088,8 +1089,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" } ] } @@ -1157,7 +1157,7 @@ "h": 8, "w": 12, "x": 0, - "y": 97 + "y": 58 }, "id": 36, "options": { @@ -1169,11 +1169,12 @@ "format": "auto", "height": 600 }, + "editorMode": "code", "gaode": { "key": "", "plugin": "AMap.Scale,AMap.ToolBar" }, - "getOption": "let severity = [];\nlet counts = [];\n\ndata.series.map((s) => {\n severity = s.fields.find((f) => f.name === 'vul_severity').values;\n counts = s.fields.find((f) => f.name === 'total_count').values;\n});\n\n// Create an empty array to store pie chart data\nconst pieChartData = [];\n\n// Define colors for pie slices\nconst pieSliceColors = ['#235894', '#FF0000', '#00FF00', '#FFFF00', '#FFA500'];\n\n// Map severity and counts to pie chart data\nseverity.forEach((sev, index) => {\n pieChartData.push({\n value: counts[index],\n name: sev,\n itemStyle: {\n opacity: 0.7,\n color: pieSliceColors[index % pieSliceColors.length],\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n });\n});\n\nreturn {\n backgroundColor: '#FFFFFF', // Set the background color to white\n tooltip: {},\n series: [\n {\n name: 'pie',\n type: 'pie',\n selectedMode: 'single',\n selectedOffset: 30,\n clockwise: true,\n label: {\n fontSize: 18,\n color: '#235894',\n },\n labelLine: {\n lineStyle: {\n color: '#235894',\n },\n },\n data: pieChartData, // Use the modified pie chart data\n itemStyle: {\n opacity: 0.7,\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n },\n ],\n};", + "getOption": "let severity = [];\nlet counts = [];\nlet clusterNames = [];\n\n// Extract severity, counts, and cluster names from each series\ncontext.panel.data.series.forEach((s) => {\n const severityField = s.fields.find((f) => f.name === 'vul_severity');\n const countsField = s.fields.find((f) => f.name === 'total_count');\n const clusterNameField = s.fields.find((f) => f.name === 'cluster_name');\n\n if (severityField && countsField && clusterNameField) {\n severity.push(...severityField.values);\n counts.push(...countsField.values);\n clusterNames.push(...clusterNameField.values);\n }\n});\n\n// Create an empty array to store pie chart data\nconst pieChartData = [];\n\n// Define colors for pie slices\nconst pieSliceColors = ['#235894', '#FF0000', '#00FF00', '#FFFF00', '#FFA500'];\n\n// Map severity, counts, and cluster names to pie chart data\nseverity.forEach((sev, index) => {\n pieChartData.push({\n value: counts[index],\n name: sev,\n clusterName: clusterNames[index], // Add cluster name\n itemStyle: {\n opacity: 0.7,\n color: pieSliceColors[index % pieSliceColors.length],\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n });\n});\n\n// Return the ECharts options object\nreturn {\n backgroundColor: '#FFFFFF', // Set the background color to white\n tooltip: {\n trigger: 'item',\n formatter: function (params) {\n return `Severity: ${params.data.name}
Cluster Name: ${params.data.clusterName}
Count: ${params.data.value}`;\n },\n },\n series: [\n {\n name: 'pie',\n type: 'pie',\n selectedMode: 'single',\n selectedOffset: 30,\n clockwise: true,\n label: {\n fontSize: 18,\n color: '#235894',\n },\n labelLine: {\n lineStyle: {\n color: '#235894',\n },\n },\n data: pieChartData, // Use the modified pie chart data\n itemStyle: {\n opacity: 0.7,\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n },\n ],\n};\n", "google": { "callback": "gmapReady", "key": "" @@ -1184,8 +1185,14 @@ "config": "{}", "height": 400, "name": "default" + }, + "visualEditor": { + "code": "return {\n dataset: context.editor.dataset,\n series: context.editor.series,\n xAxis: {\n type: 'time',\n },\n yAxis: {\n type: 'value',\n min: 'dataMin',\n },\n}\n", + "dataset": [], + "series": [] } }, + "pluginVersion": "6.0.0", "targets": [ { "datasource": { @@ -1193,12 +1200,13 @@ "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", + "editorMode": "builder", "extrapolate": true, "format": "table", "formattedQuery": "SELECT $timeSeries as t, count() FROM $table WHERE $timeFilter GROUP BY t ORDER BY t", "intervalFactor": 1, - "query": "SELECT vul_severity, count(*) AS total_count\nFROM default.trivy_vul\nWHERE $timeFilterByColumn(vul_last_modified_date)\nGROUP BY vul_severity", - "rawQuery": "SELECT vul_severity, count(*) AS total_count\nFROM default.trivy_vul\nWHERE vul_last_modified_date >= toDateTime(1694438766) AND vul_last_modified_date <= toDateTime(1694611566)\nGROUP BY vul_severity", + "query": "SELECT cluster_name, vul_severity, count(*) AS total_count\nFROM default.trivy_vul\nWHERE $timeFilterByColumn(vul_last_modified_date)\nGROUP BY cluster_name, vul_severity", + "rawQuery": "SELECT cluster_name, vul_severity, count(*) AS total_count\nFROM default.trivy_vul\nWHERE vul_last_modified_date >= toDateTime(1714632860) AND vul_last_modified_date <= toDateTime(1714719260)\nGROUP BY cluster_name, vul_severity", "refId": "A", "round": "0s", "skip_comments": true @@ -1216,7 +1224,7 @@ "h": 8, "w": 12, "x": 12, - "y": 97 + "y": 58 }, "id": 37, "options": { @@ -1228,11 +1236,12 @@ "format": "auto", "height": 600 }, + "editorMode": "code", "gaode": { "key": "", "plugin": "AMap.Scale,AMap.ToolBar" }, - "getOption": "let severity = [];\nlet counts = [];\n\ndata.series.map((s) => {\n severity = s.fields.find((f) => f.name === 'misconfig_severity').values;\n counts = s.fields.find((f) => f.name === 'total_count').values;\n});\n\n// Create an empty array to store pie chart data\nconst pieChartData = [];\n\n// Define colors for pie slices\nconst pieSliceColors = ['#235894', '#FF0000', '#00FF00', '#FFFF00', '#FFA500'];\n\n// Map severity and counts to pie chart data\nseverity.forEach((sev, index) => {\n pieChartData.push({\n value: counts[index],\n name: sev,\n itemStyle: {\n opacity: 0.7,\n color: pieSliceColors[index % pieSliceColors.length],\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n });\n});\n\nreturn {\n backgroundColor: '#FFFFFF', // Set the background color to white\n tooltip: {},\n series: [\n {\n name: 'pie',\n type: 'pie',\n selectedMode: 'single',\n selectedOffset: 30,\n clockwise: true,\n label: {\n fontSize: 18,\n color: '#235894',\n },\n labelLine: {\n lineStyle: {\n color: '#235894',\n },\n },\n data: pieChartData, // Use the modified pie chart data\n itemStyle: {\n opacity: 0.7,\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n },\n ],\n};", + "getOption": "let severity = [];\nlet counts = [];\nlet clusterNames = [];\n\n// Extract severity, counts, and cluster names from each series\ncontext.panel.data.series.forEach((s) => {\n const severityField = s.fields.find((f) => f.name === 'misconfig_severity');\n const countsField = s.fields.find((f) => f.name === 'total_count');\n const clusterNameField = s.fields.find((f) => f.name === 'cluster_name');\n\n if (severityField && countsField && clusterNameField) {\n severity.push(...severityField.values);\n counts.push(...countsField.values);\n clusterNames.push(...clusterNameField.values);\n }\n});\n\n// Create an empty array to store pie chart data\nconst pieChartData = [];\n\n// Define colors for pie slices\nconst pieSliceColors = ['#235894', '#FF0000', '#00FF00', '#FFFF00', '#FFA500'];\n\n// Map severity, counts, and cluster names to pie chart data\nseverity.forEach((sev, index) => {\n pieChartData.push({\n value: counts[index],\n name: sev,\n clusterName: clusterNames[index], // Add cluster name\n itemStyle: {\n opacity: 0.7,\n color: pieSliceColors[index % pieSliceColors.length],\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n });\n});\n\n// Return the ECharts options object\nreturn {\n backgroundColor: '#FFFFFF', // Set the background color to white\n tooltip: {\n trigger: 'item',\n formatter: function (params) {\n return `Severity: ${params.data.name}
Cluster Name: ${params.data.clusterName}
Count: ${params.data.value}`;\n },\n },\n series: [\n {\n name: 'pie',\n type: 'pie',\n selectedMode: 'single',\n selectedOffset: 30,\n clockwise: true,\n label: {\n fontSize: 18,\n color: '#235894',\n },\n labelLine: {\n lineStyle: {\n color: '#235894',\n },\n },\n data: pieChartData, // Use the modified pie chart data\n itemStyle: {\n opacity: 0.7,\n borderWidth: 3,\n borderColor: '#FFFFFF', // Set the border color to white\n },\n },\n ],\n};\n", "google": { "callback": "gmapReady", "key": "" @@ -1243,8 +1252,14 @@ "config": "{}", "height": 400, "name": "default" + }, + "visualEditor": { + "code": "return {\n dataset: context.editor.dataset,\n series: context.editor.series,\n xAxis: {\n type: 'time',\n },\n yAxis: {\n type: 'value',\n min: 'dataMin',\n },\n}\n", + "dataset": [], + "series": [] } }, + "pluginVersion": "6.0.0", "targets": [ { "datasource": { @@ -1252,12 +1267,13 @@ "uid": "vertamedia-clickhouse-datasource" }, "dateTimeType": "DATETIME", + "editorMode": "builder", "extrapolate": true, "format": "table", "formattedQuery": "SELECT $timeSeries as t, count() FROM $table WHERE $timeFilter GROUP BY t ORDER BY t", "intervalFactor": 1, - "query": "SELECT misconfig_severity, count(*) AS total_count\nFROM default.trivy_misconfig\nWHERE $timeFilterByColumn(EventTime)\nGROUP BY misconfig_severity", - "rawQuery": "SELECT misconfig_severity, count(*) AS total_count\nFROM default.trivy_misconfig\nWHERE EventTime >= toDateTime(1694438912) AND EventTime <= toDateTime(1694611712)\nGROUP BY misconfig_severity", + "query": "SELECT cluster_name, misconfig_severity, count(*) AS total_count\nFROM default.trivy_misconfig\nWHERE $timeFilterByColumn(EventTime)\nGROUP BY cluster_name, misconfig_severity", + "rawQuery": "SELECT cluster_name, misconfig_severity, count(*) AS total_count\nFROM default.trivy_misconfig\nWHERE EventTime >= toDateTime(1714632780) AND EventTime <= toDateTime(1714719180)\nGROUP BY cluster_name, misconfig_severity", "refId": "A", "round": "0s", "skip_comments": true @@ -1298,7 +1314,7 @@ "h": 8, "w": 12, "x": 0, - "y": 105 + "y": 66 }, "id": 20, "options": { @@ -1368,7 +1384,7 @@ "h": 8, "w": 12, "x": 12, - "y": 105 + "y": 66 }, "id": 22, "options": { @@ -1439,7 +1455,7 @@ "h": 5, "w": 12, "x": 0, - "y": 113 + "y": 74 }, "id": 18, "options": { @@ -1507,7 +1523,7 @@ "h": 5, "w": 12, "x": 12, - "y": 113 + "y": 74 }, "id": 16, "options": { @@ -1574,7 +1590,7 @@ "h": 7, "w": 12, "x": 0, - "y": 118 + "y": 79 }, "id": 29, "options": { @@ -1644,7 +1660,7 @@ "h": 7, "w": 12, "x": 12, - "y": 118 + "y": 79 }, "id": 30, "options": { @@ -1714,7 +1730,7 @@ "h": 7, "w": 12, "x": 0, - "y": 125 + "y": 86 }, "id": 27, "options": { @@ -1784,7 +1800,7 @@ "h": 7, "w": 12, "x": 12, - "y": 125 + "y": 86 }, "id": 28, "options": { @@ -1854,7 +1870,7 @@ "h": 7, "w": 12, "x": 0, - "y": 132 + "y": 93 }, "id": 25, "options": { @@ -1924,7 +1940,7 @@ "h": 7, "w": 12, "x": 12, - "y": 132 + "y": 93 }, "id": 26, "options": { @@ -1994,7 +2010,7 @@ "h": 7, "w": 12, "x": 0, - "y": 139 + "y": 100 }, "id": 12, "options": { @@ -2064,7 +2080,7 @@ "h": 7, "w": 12, "x": 12, - "y": 139 + "y": 100 }, "id": 14, "options": { @@ -2135,7 +2151,7 @@ "h": 8, "w": 12, "x": 0, - "y": 146 + "y": 107 }, "id": 6, "options": { @@ -2205,7 +2221,7 @@ "h": 8, "w": 12, "x": 12, - "y": 146 + "y": 107 }, "id": 4, "options": { @@ -2278,7 +2294,7 @@ "h": 8, "w": 24, "x": 0, - "y": 154 + "y": 115 }, "id": 32, "options": { @@ -2350,7 +2366,7 @@ "h": 8, "w": 24, "x": 0, - "y": 162 + "y": 123 }, "id": 33, "options": { @@ -2407,6 +2423,6 @@ "timezone": "", "title": "Trivy", "uid": "f9b0a865-f419-410a-b7d9-9a3f79a70d48", - "version": 2, + "version": 5, "weekStart": "" } \ No newline at end of file