From 06cb92bbb80654e9ed6f2c9cee7dd4942aafc711 Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Fri, 22 Mar 2019 17:37:32 +0300 Subject: [PATCH 1/3] fix: do not use datasourcePromises for 5.x before 5.4 --- dist/status_heatmap_ctrl.js | 9 +++++++-- dist/status_heatmap_ctrl.js.map | 2 +- src/status_heatmap_ctrl.js | 9 +++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/dist/status_heatmap_ctrl.js b/dist/status_heatmap_ctrl.js index 066f355..3d603d5 100644 --- a/dist/status_heatmap_ctrl.js +++ b/dist/status_heatmap_ctrl.js @@ -208,9 +208,14 @@ System.register(['app/plugins/sdk', 'lodash', 'app/core/core', 'app/core/utils/k * (but not wait for completion). This resolves * issue 11806. */ - return _this.annotationsSrv.datasourcePromises.then(function (r) { + // 5.x before 5.4 doesn't have dataPromises + if ("undefined" !== typeof _this.annotationsSrv.datasourcePromises) { + return _this.annotationsSrv.datasourcePromises.then(function (r) { + return _get(StatusHeatmapCtrl.prototype.__proto__ || Object.getPrototypeOf(StatusHeatmapCtrl.prototype), 'issueQueries', _this).call(_this, datasource); + }); + } else { return _get(StatusHeatmapCtrl.prototype.__proto__ || Object.getPrototypeOf(StatusHeatmapCtrl.prototype), 'issueQueries', _this).call(_this, datasource); - }); + } }; _this.onDataReceived = function (dataList) { diff --git a/dist/status_heatmap_ctrl.js.map b/dist/status_heatmap_ctrl.js.map index 2b04b8a..2e50387 100644 --- a/dist/status_heatmap_ctrl.js.map +++ b/dist/status_heatmap_ctrl.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/status_heatmap_ctrl.js"],"names":["MetricsPanelCtrl","_","contextSrv","kbn","rendering","statusHeatmapOptionsEditor","ColorModeDiscrete","CANVAS","SVG","VALUE_INDEX","TIME_INDEX","panelDefaults","color","mode","cardColor","colorScale","exponent","colorScheme","defaultColor","thresholds","cards","cardMinWidth","cardVSpacing","cardHSpacing","cardRound","xAxis","show","showWeekends","minBucketWidthToShowWeekends","showCrosshair","labelFormat","yAxis","tooltip","legend","data","unitFormat","decimals","nullPointMode","yAxisSort","highlightCards","useMax","renderer","colorSchemes","name","value","invert","colorModes","opacityScales","StatusHeatmapCtrl","$scope","$injector","$rootScope","timeSrv","annotationsSrv","onRenderComplete","graph","chartWidth","renderingCompleted","calculateInterval","panelWidth","Math","ceil","$","window","width","panel","gridPos","w","max","minCardWidth","minSpacing","maxCardsCount","intervalMs","rangeMs","range","to","valueOf","from","discreteHelper","roundIntervalCeil","lowLimitMs","intervalOverride","interval","templateSrv","replace","scopedVars","datasource","slice","interval_to_ms","secondsToHms","issueQueries","annotationsPromise","getAnnotations","dashboard","datasourcePromises","then","onDataReceived","dataList","cardsData","convertToCards","loading","result","annotations","length","render","onInitEditMode","addEditorTab","unitFormats","getUnitFormats","onRender","multipleValues","noColorDefined","updateCardsValuesHasColorInfo","onCardColorChange","newColor","onDataError","postRefresh","onEditorAddThreshold","push","onEditorRemoveThreshold","index","splice","onEditorRemoveThresholds","onEditorAddThreeLights","onEditorAddSolarized","link","scope","elem","attrs","ctrl","xBucketSize","yBucketSize","maxValue","minValue","targets","targetIndex","map","d","i","target","concat","toArray","keys","datapoints","j","card","id","values","y","x","si","s","datapoint","min","defaultsDeep","dataWarnings","title","tip","events","on","templateUrl"],"mappings":"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","file":"status_heatmap_ctrl.js","sourcesContent":["import { MetricsPanelCtrl } from 'app/plugins/sdk';\nimport _ from 'lodash';\nimport { contextSrv } from 'app/core/core';\nimport kbn from 'app/core/utils/kbn';\n\nimport './color_legend';\nimport rendering from './rendering';\n// import aggregates, { aggregatesMap } from './aggregates';\n// import fragments, { fragmentsMap } from './fragments';\n// import { labelFormats } from './xAxisLabelFormats';\nimport {statusHeatmapOptionsEditor} from './options_editor';\nimport {ColorModeDiscrete} from \"./color_mode_discrete\";\n\nconst CANVAS = 'CANVAS';\nconst SVG = 'SVG';\nconst VALUE_INDEX = 0,\n TIME_INDEX = 1;\n\nconst panelDefaults = {\n // aggregate: aggregates.AVG,\n // fragment: fragments.HOUR,\n color: {\n mode: 'spectrum',\n cardColor: '#b4ff00',\n colorScale: 'sqrt',\n exponent: 0.5,\n colorScheme: 'interpolateGnYlRd',\n // discrete mode settings\n defaultColor: '#757575',\n thresholds: [] // manual colors\n },\n cards: {\n cardMinWidth: 5,\n cardVSpacing: 2,\n cardHSpacing: 2,\n cardRound: null\n },\n xAxis: {\n show: true,\n showWeekends: true,\n minBucketWidthToShowWeekends: 4,\n showCrosshair: true,\n labelFormat: '%a %m/%d'\n },\n yAxis: {\n show: true,\n showCrosshair: false\n },\n tooltip: {\n show: true\n },\n legend: {\n show: true\n },\n data: {\n unitFormat: 'short',\n decimals: null\n },\n // how null points should be handled\n nullPointMode: 'as empty',\n yAxisSort: 'metrics',\n highlightCards: true,\n useMax: true\n};\n\nconst renderer = CANVAS;\n\nconst colorSchemes = [\n // Diverging\n { name: 'Spectral', value: 'interpolateSpectral', invert: 'always' },\n { name: 'RdYlGn', value: 'interpolateRdYlGn', invert: 'always' },\n { name: 'GnYlRd', value: 'interpolateGnYlRd', invert: 'always' },\n\n // Sequential (Single Hue)\n { name: 'Blues', value: 'interpolateBlues', invert: 'dark' },\n { name: 'Greens', value: 'interpolateGreens', invert: 'dark' },\n { name: 'Greys', value: 'interpolateGreys', invert: 'dark' },\n { name: 'Oranges', value: 'interpolateOranges', invert: 'dark' },\n { name: 'Purples', value: 'interpolatePurples', invert: 'dark' },\n { name: 'Reds', value: 'interpolateReds', invert: 'dark' },\n\n // Sequential (Multi-Hue)\n { name: 'BuGn', value: 'interpolateBuGn', invert: 'dark' },\n { name: 'BuPu', value: 'interpolateBuPu', invert: 'dark' },\n { name: 'GnBu', value: 'interpolateGnBu', invert: 'dark' },\n { name: 'OrRd', value: 'interpolateOrRd', invert: 'dark' },\n { name: 'PuBuGn', value: 'interpolatePuBuGn', invert: 'dark' },\n { name: 'PuBu', value: 'interpolatePuBu', invert: 'dark' },\n { name: 'PuRd', value: 'interpolatePuRd', invert: 'dark' },\n { name: 'RdPu', value: 'interpolateRdPu', invert: 'dark' },\n { name: 'YlGnBu', value: 'interpolateYlGnBu', invert: 'dark' },\n { name: 'YlGn', value: 'interpolateYlGn', invert: 'dark' },\n { name: 'YlOrBr', value: 'interpolateYlOrBr', invert: 'dark' },\n { name: 'YlOrRd', value: 'interpolateYlOrRd', invert: 'dark' }\n];\n\nlet colorModes = ['opacity', 'spectrum', 'discrete'];\nlet opacityScales = ['linear', 'sqrt'];\n\nexport class StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n /** @ngInject */\n constructor($scope, $injector, $rootScope, timeSrv, annotationsSrv) {\n super($scope, $injector);\n _.defaultsDeep(this.panel, panelDefaults);\n\n this.opacityScales = opacityScales;\n this.colorModes = colorModes;\n this.colorSchemes = colorSchemes;\n\n // default graph width for discrete card width calculation\n this.graph = {\n \"chartWidth\" : -1\n };\n\n this.multipleValues = false;\n this.noColorDefined = false;\n\n this.discreteHelper = new ColorModeDiscrete($scope);\n\n this.dataWarnings = {\n \"noColorDefined\": {\n title: 'Data has value with undefined color',\n tip: 'Check metric values, color values or define a new color',\n },\n \"multipleValues\": {\n title: 'Data has multiple values for one target',\n tip: 'Change targets definitions or set \"use max value\"',\n }\n };\n\n this.annotations = [];\n this.annotationsSrv = annotationsSrv;\n\n this.events.on('data-received', this.onDataReceived);\n this.events.on('data-snapshot-load', this.onDataReceived);\n this.events.on('data-error', this.onDataError);\n this.events.on('init-edit-mode', this.onInitEditMode);\n this.events.on('render', this.onRender);\n this.events.on('refresh', this.postRefresh);\n // custom event from rendering.js\n this.events.on('render-complete', this.onRenderComplete);\n }\n\n onRenderComplete = (data) => {\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n };\n\n // override calculateInterval for discrete color mode\n calculateInterval = () => {\n let panelWidth = Math.ceil($(window).width() * (this.panel.gridPos.w / 24));\n // approximate chartWidth because y axis ticks not rendered yet on first data receive.\n let chartWidth = _.max([\n panelWidth - 200,\n panelWidth/2\n ]);\n\n let minCardWidth = this.panel.cards.cardMinWidth;\n let minSpacing = this.panel.cards.cardHSpacing;\n let maxCardsCount = Math.ceil((chartWidth-minCardWidth) / (minCardWidth + minSpacing));\n\n let intervalMs;\n let rangeMs = this.range.to.valueOf() - this.range.from.valueOf();\n\n // this is minimal interval! kbn.round_interval will lower it.\n intervalMs = this.discreteHelper.roundIntervalCeil(rangeMs / maxCardsCount);\n\n // Calculate low limit of interval\n let lowLimitMs = 1; // 1 millisecond default low limit\n let intervalOverride = this.panel.interval;\n\n // if no panel interval check datasource\n if (intervalOverride) {\n intervalOverride = this.templateSrv.replace(intervalOverride, this.panel.scopedVars);\n } else if (this.datasource && this.datasource.interval) {\n intervalOverride = this.datasource.interval;\n }\n\n if (intervalOverride) {\n if (intervalOverride[0] === '>') {\n intervalOverride = intervalOverride.slice(1);\n }\n lowLimitMs = kbn.interval_to_ms(intervalOverride);\n }\n\n if (lowLimitMs > intervalMs) {\n intervalMs = lowLimitMs;\n }\n\n this.intervalMs = intervalMs;\n this.interval = kbn.secondsToHms(intervalMs / 1000);\n };\n\n issueQueries = (datasource) => {\n this.annotationsPromise = this.annotationsSrv.getAnnotations({\n dashboard: this.dashboard,\n panel: this.panel,\n range: this.range,\n });\n\n /* Wait for annotationSrv requests to get datasources to\n * resolve before issuing queries. This allows the annotations\n * service to fire annotations queries before graph queries\n * (but not wait for completion). This resolves\n * issue 11806.\n */\n return this.annotationsSrv.datasourcePromises.then(r => {\n return super.issueQueries(datasource);\n });\n }\n\n\n onDataReceived = (dataList) => {\n this.data = dataList;\n this.cardsData = this.convertToCards(this.data);\n\n this.annotationsPromise.then(\n result => {\n this.loading = false;\n //this.alertState = result.alertState;\n if (result.annotations && result.annotations.length > 0) {\n this.annotations = result.annotations;\n } else {\n this.annotations = null;\n }\n this.render();\n },\n () => {\n this.loading = false;\n this.annotations = null;\n this.render();\n }\n );\n\n //this.render();\n };\n\n onInitEditMode = () => {\n this.addEditorTab('Options', statusHeatmapOptionsEditor, 2);\n this.unitFormats = kbn.getUnitFormats();\n };\n\n onRender = () => {\n if (!this.data) { return; }\n\n this.multipleValues = false;\n if (!this.panel.useMax) {\n if (this.cardsData) {\n this.multipleValues = this.cardsData.multipleValues;\n }\n }\n\n this.noColorDefined = false;\n if (this.panel.color.mode === 'discrete') {\n this.discreteHelper.updateCardsValuesHasColorInfo();\n if (this.cardsData) {\n this.noColorDefined = this.cardsData.noColorDefined;\n }\n }\n };\n\n onCardColorChange = (newColor) => {\n this.panel.color.cardColor = newColor;\n this.render();\n };\n\n onDataError = () => {\n this.data = [];\n this.annotations = [];\n this.render();\n };\n\n postRefresh = () => {\n this.noColorDefined = false;\n };\n\n onEditorAddThreshold = () => {\n this.panel.color.thresholds.push({ color: this.panel.defaultColor });\n this.render();\n };\n\n onEditorRemoveThreshold = (index) => {\n this.panel.color.thresholds.splice(index, 1);\n this.render();\n };\n\n onEditorRemoveThresholds = () => {\n this.panel.color.thresholds = [];\n this.render();\n };\n\n onEditorAddThreeLights = () => {\n this.panel.color.thresholds.push({color: \"red\", value: 2, tooltip: \"error\" });\n this.panel.color.thresholds.push({color: \"yellow\", value: 1, tooltip: \"warning\" });\n this.panel.color.thresholds.push({color: \"green\", value: 0, tooltip: \"ok\" });\n this.render();\n };\n \n /* https://ethanschoonover.com/solarized/ */\n onEditorAddSolarized = () => {\n this.panel.color.thresholds.push({color: \"#b58900\", value: 0, tooltip: \"yellow\" });\n this.panel.color.thresholds.push({color: \"#cb4b16\", value: 1, tooltip: \"orange\" });\n this.panel.color.thresholds.push({color: \"#dc322f\", value: 2, tooltip: \"red\" });\n this.panel.color.thresholds.push({color: \"#d33682\", value: 3, tooltip: \"magenta\" });\n this.panel.color.thresholds.push({color: \"#6c71c4\", value: 4, tooltip: \"violet\" });\n this.panel.color.thresholds.push({color: \"#268bd2\", value: 5, tooltip: \"blue\" });\n this.panel.color.thresholds.push({color: \"#2aa198\", value: 6, tooltip: \"cyan\" });\n this.panel.color.thresholds.push({color: \"#859900\", value: 7, tooltip: \"green\" });\n this.render();\n }\n\n link = (scope, elem, attrs, ctrl) => {\n rendering(scope, elem, attrs, ctrl);\n };\n\n // group values into buckets by target\n convertToCards = (data) => {\n let cardsData = {\n cards: [],\n xBucketSize: 0,\n yBucketSize: 0,\n maxValue: 0,\n minValue: 0,\n multipleValues: false,\n noColorDefined: false,\n targets: [], // array of available unique targets\n targetIndex: {} // indices in data array for each of available unique targets\n };\n\n if (!data || data.length == 0) { return cardsData;}\n\n // Collect uniq timestamps from data and spread over targets and timestamps\n\n // collect uniq targets and their indices\n _.map(data, (d, i) => {\n cardsData.targetIndex[d.target] = _.concat(_.toArray(cardsData.targetIndex[d.target]), i)\n });\n\n // TODO add some logic for targets heirarchy\n cardsData.targets = _.keys(cardsData.targetIndex);\n cardsData.yBucketSize = cardsData.targets.length;\n // Maximum number of buckets over x axis\n cardsData.xBucketSize = _.max(_.map(data, d => d.datapoints.length));\n\n // Collect all values for each bucket from datapoints with similar target.\n // TODO aggregate values into buckets over datapoint[TIME_INDEX] not over datapoint index (j).\n for(let i = 0; i < cardsData.targets.length; i++) {\n let target = cardsData.targets[i];\n\n for (let j = 0; j < cardsData.xBucketSize; j++) {\n let card = {\n id: i*cardsData.xBucketSize + j,\n values: [],\n multipleValues: false,\n noColorDefined: false,\n y: target,\n x: -1,\n };\n\n // collect values from all timeseries with target\n for (let si = 0; si < cardsData.targetIndex[target].length; si++) {\n let s = data[cardsData.targetIndex[target][si]];\n if (s.datapoints.length <= j) {\n continue;\n }\n let datapoint = s.datapoints[j];\n if (card.values.length === 0) {\n card.x = datapoint[TIME_INDEX];\n }\n card.values.push(datapoint[VALUE_INDEX]);\n }\n card.minValue = _.min(card.values);\n card.maxValue = _.max(card.values);\n if (card.values.length > 1) {\n cardsData.multipleValues = true;\n card.multipleValues = true;\n card.value = card.maxValue; // max value by default\n } else {\n card.value = card.maxValue; // max value by default\n }\n\n if (cardsData.maxValue < card.maxValue)\n cardsData.maxValue = card.maxValue;\n\n if (cardsData.minValue > card.minValue)\n cardsData.minValue = card.minValue;\n\n if (card.x != -1) {\n cardsData.cards.push(card);\n }\n }\n }\n\n return cardsData;\n };\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../src/status_heatmap_ctrl.js"],"names":["MetricsPanelCtrl","_","contextSrv","kbn","rendering","statusHeatmapOptionsEditor","ColorModeDiscrete","CANVAS","SVG","VALUE_INDEX","TIME_INDEX","panelDefaults","color","mode","cardColor","colorScale","exponent","colorScheme","defaultColor","thresholds","cards","cardMinWidth","cardVSpacing","cardHSpacing","cardRound","xAxis","show","showWeekends","minBucketWidthToShowWeekends","showCrosshair","labelFormat","yAxis","tooltip","legend","data","unitFormat","decimals","nullPointMode","yAxisSort","highlightCards","useMax","renderer","colorSchemes","name","value","invert","colorModes","opacityScales","StatusHeatmapCtrl","$scope","$injector","$rootScope","timeSrv","annotationsSrv","onRenderComplete","graph","chartWidth","renderingCompleted","calculateInterval","panelWidth","Math","ceil","$","window","width","panel","gridPos","w","max","minCardWidth","minSpacing","maxCardsCount","intervalMs","rangeMs","range","to","valueOf","from","discreteHelper","roundIntervalCeil","lowLimitMs","intervalOverride","interval","templateSrv","replace","scopedVars","datasource","slice","interval_to_ms","secondsToHms","issueQueries","annotationsPromise","getAnnotations","dashboard","datasourcePromises","then","onDataReceived","dataList","cardsData","convertToCards","loading","result","annotations","length","render","onInitEditMode","addEditorTab","unitFormats","getUnitFormats","onRender","multipleValues","noColorDefined","updateCardsValuesHasColorInfo","onCardColorChange","newColor","onDataError","postRefresh","onEditorAddThreshold","push","onEditorRemoveThreshold","index","splice","onEditorRemoveThresholds","onEditorAddThreeLights","onEditorAddSolarized","link","scope","elem","attrs","ctrl","xBucketSize","yBucketSize","maxValue","minValue","targets","targetIndex","map","d","i","target","concat","toArray","keys","datapoints","j","card","id","values","y","x","si","s","datapoint","min","defaultsDeep","dataWarnings","title","tip","events","on","templateUrl"],"mappings":"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","file":"status_heatmap_ctrl.js","sourcesContent":["import { MetricsPanelCtrl } from 'app/plugins/sdk';\nimport _ from 'lodash';\nimport { contextSrv } from 'app/core/core';\nimport kbn from 'app/core/utils/kbn';\n\nimport './color_legend';\nimport rendering from './rendering';\n// import aggregates, { aggregatesMap } from './aggregates';\n// import fragments, { fragmentsMap } from './fragments';\n// import { labelFormats } from './xAxisLabelFormats';\nimport {statusHeatmapOptionsEditor} from './options_editor';\nimport {ColorModeDiscrete} from \"./color_mode_discrete\";\n\nconst CANVAS = 'CANVAS';\nconst SVG = 'SVG';\nconst VALUE_INDEX = 0,\n TIME_INDEX = 1;\n\nconst panelDefaults = {\n // aggregate: aggregates.AVG,\n // fragment: fragments.HOUR,\n color: {\n mode: 'spectrum',\n cardColor: '#b4ff00',\n colorScale: 'sqrt',\n exponent: 0.5,\n colorScheme: 'interpolateGnYlRd',\n // discrete mode settings\n defaultColor: '#757575',\n thresholds: [] // manual colors\n },\n cards: {\n cardMinWidth: 5,\n cardVSpacing: 2,\n cardHSpacing: 2,\n cardRound: null\n },\n xAxis: {\n show: true,\n showWeekends: true,\n minBucketWidthToShowWeekends: 4,\n showCrosshair: true,\n labelFormat: '%a %m/%d'\n },\n yAxis: {\n show: true,\n showCrosshair: false\n },\n tooltip: {\n show: true\n },\n legend: {\n show: true\n },\n data: {\n unitFormat: 'short',\n decimals: null\n },\n // how null points should be handled\n nullPointMode: 'as empty',\n yAxisSort: 'metrics',\n highlightCards: true,\n useMax: true\n};\n\nconst renderer = CANVAS;\n\nconst colorSchemes = [\n // Diverging\n { name: 'Spectral', value: 'interpolateSpectral', invert: 'always' },\n { name: 'RdYlGn', value: 'interpolateRdYlGn', invert: 'always' },\n { name: 'GnYlRd', value: 'interpolateGnYlRd', invert: 'always' },\n\n // Sequential (Single Hue)\n { name: 'Blues', value: 'interpolateBlues', invert: 'dark' },\n { name: 'Greens', value: 'interpolateGreens', invert: 'dark' },\n { name: 'Greys', value: 'interpolateGreys', invert: 'dark' },\n { name: 'Oranges', value: 'interpolateOranges', invert: 'dark' },\n { name: 'Purples', value: 'interpolatePurples', invert: 'dark' },\n { name: 'Reds', value: 'interpolateReds', invert: 'dark' },\n\n // Sequential (Multi-Hue)\n { name: 'BuGn', value: 'interpolateBuGn', invert: 'dark' },\n { name: 'BuPu', value: 'interpolateBuPu', invert: 'dark' },\n { name: 'GnBu', value: 'interpolateGnBu', invert: 'dark' },\n { name: 'OrRd', value: 'interpolateOrRd', invert: 'dark' },\n { name: 'PuBuGn', value: 'interpolatePuBuGn', invert: 'dark' },\n { name: 'PuBu', value: 'interpolatePuBu', invert: 'dark' },\n { name: 'PuRd', value: 'interpolatePuRd', invert: 'dark' },\n { name: 'RdPu', value: 'interpolateRdPu', invert: 'dark' },\n { name: 'YlGnBu', value: 'interpolateYlGnBu', invert: 'dark' },\n { name: 'YlGn', value: 'interpolateYlGn', invert: 'dark' },\n { name: 'YlOrBr', value: 'interpolateYlOrBr', invert: 'dark' },\n { name: 'YlOrRd', value: 'interpolateYlOrRd', invert: 'dark' }\n];\n\nlet colorModes = ['opacity', 'spectrum', 'discrete'];\nlet opacityScales = ['linear', 'sqrt'];\n\nexport class StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n /** @ngInject */\n constructor($scope, $injector, $rootScope, timeSrv, annotationsSrv) {\n super($scope, $injector);\n _.defaultsDeep(this.panel, panelDefaults);\n\n this.opacityScales = opacityScales;\n this.colorModes = colorModes;\n this.colorSchemes = colorSchemes;\n\n // default graph width for discrete card width calculation\n this.graph = {\n \"chartWidth\" : -1\n };\n\n this.multipleValues = false;\n this.noColorDefined = false;\n\n this.discreteHelper = new ColorModeDiscrete($scope);\n\n this.dataWarnings = {\n \"noColorDefined\": {\n title: 'Data has value with undefined color',\n tip: 'Check metric values, color values or define a new color',\n },\n \"multipleValues\": {\n title: 'Data has multiple values for one target',\n tip: 'Change targets definitions or set \"use max value\"',\n }\n };\n\n this.annotations = [];\n this.annotationsSrv = annotationsSrv;\n\n this.events.on('data-received', this.onDataReceived);\n this.events.on('data-snapshot-load', this.onDataReceived);\n this.events.on('data-error', this.onDataError);\n this.events.on('init-edit-mode', this.onInitEditMode);\n this.events.on('render', this.onRender);\n this.events.on('refresh', this.postRefresh);\n // custom event from rendering.js\n this.events.on('render-complete', this.onRenderComplete);\n }\n\n onRenderComplete = (data) => {\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n };\n\n // override calculateInterval for discrete color mode\n calculateInterval = () => {\n let panelWidth = Math.ceil($(window).width() * (this.panel.gridPos.w / 24));\n // approximate chartWidth because y axis ticks not rendered yet on first data receive.\n let chartWidth = _.max([\n panelWidth - 200,\n panelWidth/2\n ]);\n\n let minCardWidth = this.panel.cards.cardMinWidth;\n let minSpacing = this.panel.cards.cardHSpacing;\n let maxCardsCount = Math.ceil((chartWidth-minCardWidth) / (minCardWidth + minSpacing));\n\n let intervalMs;\n let rangeMs = this.range.to.valueOf() - this.range.from.valueOf();\n\n // this is minimal interval! kbn.round_interval will lower it.\n intervalMs = this.discreteHelper.roundIntervalCeil(rangeMs / maxCardsCount);\n\n // Calculate low limit of interval\n let lowLimitMs = 1; // 1 millisecond default low limit\n let intervalOverride = this.panel.interval;\n\n // if no panel interval check datasource\n if (intervalOverride) {\n intervalOverride = this.templateSrv.replace(intervalOverride, this.panel.scopedVars);\n } else if (this.datasource && this.datasource.interval) {\n intervalOverride = this.datasource.interval;\n }\n\n if (intervalOverride) {\n if (intervalOverride[0] === '>') {\n intervalOverride = intervalOverride.slice(1);\n }\n lowLimitMs = kbn.interval_to_ms(intervalOverride);\n }\n\n if (lowLimitMs > intervalMs) {\n intervalMs = lowLimitMs;\n }\n\n this.intervalMs = intervalMs;\n this.interval = kbn.secondsToHms(intervalMs / 1000);\n };\n\n issueQueries = (datasource) => {\n this.annotationsPromise = this.annotationsSrv.getAnnotations({\n dashboard: this.dashboard,\n panel: this.panel,\n range: this.range,\n });\n\n /* Wait for annotationSrv requests to get datasources to\n * resolve before issuing queries. This allows the annotations\n * service to fire annotations queries before graph queries\n * (but not wait for completion). This resolves\n * issue 11806.\n */\n // 5.x before 5.4 doesn't have dataPromises\n if (\"undefined\" !== typeof(this.annotationsSrv.datasourcePromises)) {\n return this.annotationsSrv.datasourcePromises.then(r => {\n return super.issueQueries(datasource);\n });\n } else {\n return super.issueQueries(datasource);\n }\n }\n\n\n onDataReceived = (dataList) => {\n this.data = dataList;\n this.cardsData = this.convertToCards(this.data);\n\n this.annotationsPromise.then(\n result => {\n this.loading = false;\n //this.alertState = result.alertState;\n if (result.annotations && result.annotations.length > 0) {\n this.annotations = result.annotations;\n } else {\n this.annotations = null;\n }\n this.render();\n },\n () => {\n this.loading = false;\n this.annotations = null;\n this.render();\n }\n );\n\n //this.render();\n };\n\n onInitEditMode = () => {\n this.addEditorTab('Options', statusHeatmapOptionsEditor, 2);\n this.unitFormats = kbn.getUnitFormats();\n };\n\n onRender = () => {\n if (!this.data) { return; }\n\n this.multipleValues = false;\n if (!this.panel.useMax) {\n if (this.cardsData) {\n this.multipleValues = this.cardsData.multipleValues;\n }\n }\n\n this.noColorDefined = false;\n if (this.panel.color.mode === 'discrete') {\n this.discreteHelper.updateCardsValuesHasColorInfo();\n if (this.cardsData) {\n this.noColorDefined = this.cardsData.noColorDefined;\n }\n }\n };\n\n onCardColorChange = (newColor) => {\n this.panel.color.cardColor = newColor;\n this.render();\n };\n\n onDataError = () => {\n this.data = [];\n this.annotations = [];\n this.render();\n };\n\n postRefresh = () => {\n this.noColorDefined = false;\n };\n\n onEditorAddThreshold = () => {\n this.panel.color.thresholds.push({ color: this.panel.defaultColor });\n this.render();\n };\n\n onEditorRemoveThreshold = (index) => {\n this.panel.color.thresholds.splice(index, 1);\n this.render();\n };\n\n onEditorRemoveThresholds = () => {\n this.panel.color.thresholds = [];\n this.render();\n };\n\n onEditorAddThreeLights = () => {\n this.panel.color.thresholds.push({color: \"red\", value: 2, tooltip: \"error\" });\n this.panel.color.thresholds.push({color: \"yellow\", value: 1, tooltip: \"warning\" });\n this.panel.color.thresholds.push({color: \"green\", value: 0, tooltip: \"ok\" });\n this.render();\n };\n \n /* https://ethanschoonover.com/solarized/ */\n onEditorAddSolarized = () => {\n this.panel.color.thresholds.push({color: \"#b58900\", value: 0, tooltip: \"yellow\" });\n this.panel.color.thresholds.push({color: \"#cb4b16\", value: 1, tooltip: \"orange\" });\n this.panel.color.thresholds.push({color: \"#dc322f\", value: 2, tooltip: \"red\" });\n this.panel.color.thresholds.push({color: \"#d33682\", value: 3, tooltip: \"magenta\" });\n this.panel.color.thresholds.push({color: \"#6c71c4\", value: 4, tooltip: \"violet\" });\n this.panel.color.thresholds.push({color: \"#268bd2\", value: 5, tooltip: \"blue\" });\n this.panel.color.thresholds.push({color: \"#2aa198\", value: 6, tooltip: \"cyan\" });\n this.panel.color.thresholds.push({color: \"#859900\", value: 7, tooltip: \"green\" });\n this.render();\n }\n\n link = (scope, elem, attrs, ctrl) => {\n rendering(scope, elem, attrs, ctrl);\n };\n\n // group values into buckets by target\n convertToCards = (data) => {\n let cardsData = {\n cards: [],\n xBucketSize: 0,\n yBucketSize: 0,\n maxValue: 0,\n minValue: 0,\n multipleValues: false,\n noColorDefined: false,\n targets: [], // array of available unique targets\n targetIndex: {} // indices in data array for each of available unique targets\n };\n\n if (!data || data.length == 0) { return cardsData;}\n\n // Collect uniq timestamps from data and spread over targets and timestamps\n\n // collect uniq targets and their indices\n _.map(data, (d, i) => {\n cardsData.targetIndex[d.target] = _.concat(_.toArray(cardsData.targetIndex[d.target]), i)\n });\n\n // TODO add some logic for targets heirarchy\n cardsData.targets = _.keys(cardsData.targetIndex);\n cardsData.yBucketSize = cardsData.targets.length;\n // Maximum number of buckets over x axis\n cardsData.xBucketSize = _.max(_.map(data, d => d.datapoints.length));\n\n // Collect all values for each bucket from datapoints with similar target.\n // TODO aggregate values into buckets over datapoint[TIME_INDEX] not over datapoint index (j).\n for(let i = 0; i < cardsData.targets.length; i++) {\n let target = cardsData.targets[i];\n\n for (let j = 0; j < cardsData.xBucketSize; j++) {\n let card = {\n id: i*cardsData.xBucketSize + j,\n values: [],\n multipleValues: false,\n noColorDefined: false,\n y: target,\n x: -1,\n };\n\n // collect values from all timeseries with target\n for (let si = 0; si < cardsData.targetIndex[target].length; si++) {\n let s = data[cardsData.targetIndex[target][si]];\n if (s.datapoints.length <= j) {\n continue;\n }\n let datapoint = s.datapoints[j];\n if (card.values.length === 0) {\n card.x = datapoint[TIME_INDEX];\n }\n card.values.push(datapoint[VALUE_INDEX]);\n }\n card.minValue = _.min(card.values);\n card.maxValue = _.max(card.values);\n if (card.values.length > 1) {\n cardsData.multipleValues = true;\n card.multipleValues = true;\n card.value = card.maxValue; // max value by default\n } else {\n card.value = card.maxValue; // max value by default\n }\n\n if (cardsData.maxValue < card.maxValue)\n cardsData.maxValue = card.maxValue;\n\n if (cardsData.minValue > card.minValue)\n cardsData.minValue = card.minValue;\n\n if (card.x != -1) {\n cardsData.cards.push(card);\n }\n }\n }\n\n return cardsData;\n };\n}\n"]} \ No newline at end of file diff --git a/src/status_heatmap_ctrl.js b/src/status_heatmap_ctrl.js index 6ceb266..3e44c1f 100644 --- a/src/status_heatmap_ctrl.js +++ b/src/status_heatmap_ctrl.js @@ -206,9 +206,14 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl { * (but not wait for completion). This resolves * issue 11806. */ - return this.annotationsSrv.datasourcePromises.then(r => { + // 5.x before 5.4 doesn't have dataPromises + if ("undefined" !== typeof(this.annotationsSrv.datasourcePromises)) { + return this.annotationsSrv.datasourcePromises.then(r => { + return super.issueQueries(datasource); + }); + } else { return super.issueQueries(datasource); - }); + } } From d4d297862e66c59d79aea19f669aa68f0cb46ab2 Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Fri, 22 Mar 2019 17:55:18 +0300 Subject: [PATCH 2/3] Create CHANGELOG.md --- CHANGELOG.md | 41 +++++++++++++++++++++++++++++++++++++++++ Gruntfile.js | 2 +- README.md | 36 ++---------------------------------- dist/CHANGELOG.md | 41 +++++++++++++++++++++++++++++++++++++++++ dist/README.md | 36 ++---------------------------------- 5 files changed, 87 insertions(+), 69 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 dist/CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..73967c8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,41 @@ +# Changelog + +## v0.1.1 + +- Fix for annotations in grafana 5.x before 5.4 + +## v0.1.0 + +- Tested with Grafana 6.0.0 +- Tested with InfluxDB and Mysql datasources +- Add initial support for display annotations +- Add example for k8s statuses (thanks, @vrutkovs) +- Fix hanging on big values +- Fix horizontal spacing = 0 +- Fix for "Object doesn't support property or method 'remove'" +- Fix card width for targets with different datapoints count + +## v0.0.4 + +- Fix display of multivalues buckets as an empty cell + +## v0.0.3 + +- Add solarized preset +- Reorganize statuses editor for discrete mode +- Separate options for vertical and horizontal spacing for cards +- Add simple sort options for Y axis +- Fix display null values as zero + +## v0.0.2 + +- Install with GF_INSTALL_PLUGINS +- Fix legend overlap +- Fix colors for dark theme +- Fix panel rendering timeout error + + +## v0.0.1 + +- First public release + diff --git a/Gruntfile.js b/Gruntfile.js index 37d9a5a..17fe576 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -27,7 +27,7 @@ module.exports = (grunt) => { }, pluginDef: { expand: true, - src: ['plugin.json', 'README.md'], + src: ['plugin.json', 'README.md', 'CHANGELOG.md'], dest: 'dist' } }, diff --git a/README.md b/README.md index 4d34de9..6ee8b17 100644 --- a/README.md +++ b/README.md @@ -203,39 +203,7 @@ The first public release of this plugin has been fully made by [Flant](https://f This plugin is based on "Heatmap" panel by Grafana and partly inspired by ideas from Carpet plot, Discrete panel, Status Panel, Status Dot, Status By Group. -#### Changelog -##### v0.1.0 +### CHANGELOG -- Tested with Grafana 6.0.0 -- Tested with InfluxDB and Mysql datasources -- Add initial support for display annotations -- Add example for k8s statuses (thanks, @vrutkovs) -- Fix hanging on big values -- Fix horizontal spacing = 0 -- Fix for "Object doesn't support property or method 'remove'" -- Fix card width for targets with different datapoints count - -##### v0.0.4 - -- Fix display of multivalues buckets as an empty cell - -##### v0.0.3 - -- Add solarized preset -- Reorganize statuses editor for discrete mode -- Separate options for vertical and horizontal spacing for cards -- Add simple sort options for Y axis -- Fix display null values as zero - -##### v0.0.2 - -- Install with GF_INSTALL_PLUGINS -- Fix legend overlap -- Fix colors for dark theme -- Fix panel rendering timeout error - - -##### v0.0.1 - -- First public release +The latest changes can be found here: [CHANGELOG.md](https://github.com/flant/grafana-statusmap/blob/master/CHANGELOG.md) diff --git a/dist/CHANGELOG.md b/dist/CHANGELOG.md new file mode 100644 index 0000000..73967c8 --- /dev/null +++ b/dist/CHANGELOG.md @@ -0,0 +1,41 @@ +# Changelog + +## v0.1.1 + +- Fix for annotations in grafana 5.x before 5.4 + +## v0.1.0 + +- Tested with Grafana 6.0.0 +- Tested with InfluxDB and Mysql datasources +- Add initial support for display annotations +- Add example for k8s statuses (thanks, @vrutkovs) +- Fix hanging on big values +- Fix horizontal spacing = 0 +- Fix for "Object doesn't support property or method 'remove'" +- Fix card width for targets with different datapoints count + +## v0.0.4 + +- Fix display of multivalues buckets as an empty cell + +## v0.0.3 + +- Add solarized preset +- Reorganize statuses editor for discrete mode +- Separate options for vertical and horizontal spacing for cards +- Add simple sort options for Y axis +- Fix display null values as zero + +## v0.0.2 + +- Install with GF_INSTALL_PLUGINS +- Fix legend overlap +- Fix colors for dark theme +- Fix panel rendering timeout error + + +## v0.0.1 + +- First public release + diff --git a/dist/README.md b/dist/README.md index 4d34de9..6ee8b17 100644 --- a/dist/README.md +++ b/dist/README.md @@ -203,39 +203,7 @@ The first public release of this plugin has been fully made by [Flant](https://f This plugin is based on "Heatmap" panel by Grafana and partly inspired by ideas from Carpet plot, Discrete panel, Status Panel, Status Dot, Status By Group. -#### Changelog -##### v0.1.0 +### CHANGELOG -- Tested with Grafana 6.0.0 -- Tested with InfluxDB and Mysql datasources -- Add initial support for display annotations -- Add example for k8s statuses (thanks, @vrutkovs) -- Fix hanging on big values -- Fix horizontal spacing = 0 -- Fix for "Object doesn't support property or method 'remove'" -- Fix card width for targets with different datapoints count - -##### v0.0.4 - -- Fix display of multivalues buckets as an empty cell - -##### v0.0.3 - -- Add solarized preset -- Reorganize statuses editor for discrete mode -- Separate options for vertical and horizontal spacing for cards -- Add simple sort options for Y axis -- Fix display null values as zero - -##### v0.0.2 - -- Install with GF_INSTALL_PLUGINS -- Fix legend overlap -- Fix colors for dark theme -- Fix panel rendering timeout error - - -##### v0.0.1 - -- First public release +The latest changes can be found here: [CHANGELOG.md](https://github.com/flant/grafana-statusmap/blob/master/CHANGELOG.md) From eb6f149f8b2ec3874f54ac79fb7021a12f8aab1d Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Fri, 22 Mar 2019 17:56:52 +0300 Subject: [PATCH 3/3] version 0.1.1 --- dist/plugin.json | 4 ++-- src/plugin.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/plugin.json b/dist/plugin.json index 119663b..f559dd7 100644 --- a/dist/plugin.json +++ b/dist/plugin.json @@ -25,8 +25,8 @@ {"name": "Color mapping", "path": "img/color-mapping.png"}, {"name": "Queries example", "path": "img/queries-example.png"} ], - "version": "0.1.0", - "updated": "2019-03-11" + "version": "0.1.1", + "updated": "2019-03-22" }, "dependencies": { diff --git a/src/plugin.json b/src/plugin.json index 119663b..f559dd7 100644 --- a/src/plugin.json +++ b/src/plugin.json @@ -25,8 +25,8 @@ {"name": "Color mapping", "path": "img/color-mapping.png"}, {"name": "Queries example", "path": "img/queries-example.png"} ], - "version": "0.1.0", - "updated": "2019-03-11" + "version": "0.1.1", + "updated": "2019-03-22" }, "dependencies": {