From 48597eda59fac3aa8b1773fc1bdde85cabcac2f1 Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Sun, 24 May 2020 15:08:23 +0300 Subject: [PATCH] fix: regression in 5.4 after implementing workaround for 6.7 --- dist/module.js | 4 ++-- dist/module.js.map | 2 +- src/module.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/module.js b/dist/module.js index 9d22ec3..f52ebfe 100644 --- a/dist/module.js +++ b/dist/module.js @@ -411,8 +411,8 @@ System.register(["lodash", "./color_legend", "app/core/utils/kbn", "app/plugins/ }, { key: "updateTimeRange", - value: function updateTimeRange() { - var ret = _get(_getPrototypeOf(StatusHeatmapCtrl.prototype), "updateTimeRange", this).call(this); + value: function updateTimeRange(datasource) { + var ret = _get(_getPrototypeOf(StatusHeatmapCtrl.prototype), "updateTimeRange", this).call(this, datasource); this.calculateInterval(); return ret; diff --git a/dist/module.js.map b/dist/module.js.map index aebf268..a418884 100644 --- a/dist/module.js.map +++ b/dist/module.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/module.ts"],"names":["_","kbn","loadPluginCss","MetricsPanelCtrl","Bucket","BucketMatrix","rendering","statusHeatmapOptionsEditor","ColorModeDiscrete","ExtraSeriesFormat","ExtraSeriesFormatValue","VALUE_INDEX","TIME_INDEX","colorSchemes","name","value","invert","colorModes","opacityScales","dark","light","StatusHeatmapCtrl","$scope","$injector","timeSrv","annotationsSrv","$window","datasourceSrv","variableSrv","templateSrv","datasource","color","mode","cardColor","colorScale","exponent","colorScheme","defaultColor","thresholds","cards","cardMinWidth","cardVSpacing","cardHSpacing","cardRound","xAxis","show","labelFormat","yAxis","minWidth","maxWidth","tooltip","legend","data","unitFormat","decimals","nullPointMode","yAxisSort","highlightCards","useMax","urls","label","base_url","useExtraSeries","useseriesname","forcelowercase","icon_fa","extraSeries","index","seriesFilterIndex","usingUrl","panel","push","render","splice","defaultsDeep","panelDefaults","extraSeriesFormats","renderLink","link","scopedVars","format","scoped","key","replace","graph","multipleValues","noColorDefined","discreteExtraSeries","dataWarnings","title","tip","noDatapoints","annotations","events","on","onRender","bind","onDataReceived","onDataError","onInitEditMode","postRefresh","onRenderComplete","onChangeType","onCardColorChange","chartWidth","renderingCompleted","url","type","Date","Raw","wndWidth","$","window","width","panelWidthFactor","gridPos","w","panelWidth","Math","ceil","max","ret","calculateInterval","getChartWidth","minCardWidth","minSpacing","maxCardsCount","intervalMs","rangeMs","range","to","valueOf","from","roundIntervalCeil","lowLimitMs","intervalOverride","interval","slice","interval_to_ms","secondsToHms","annotationsPromise","getAnnotations","dashboard","datasourcePromises","then","r","issueQueriesWithInterval","origInterval","res","dataList","bucketMatrix","convertDataToBuckets","result","loading","length","addEditorTab","unitFormats","getUnitFormats","updateCardsValuesHasColorInfo","updateCardsValuesHasColorInfoSingle","newColor","scope","elem","attrs","ctrl","time","timeRangeForUrl","var_time","mostRecentBucket","targets","buckets","xBucketSize","targetIndex","map","queryResult","i","yLabel","target","hasOwnProperty","targetKeys","keys","targetTimestampRanges","targetTimestamps","si","s","datapoints","datapoint","idx","uniq","tsTo","tsFrom","minFrom","targetEmptyBuckets","lastTs","topBucket","relTo","relFrom","values","mostRecent","bucketFrom","b","bucket","xid","minValue","Number","MAX_VALUE","maxValue","MIN_SAFE_INTEGER","dataIndex","dp","belong","put","min","bucketsLen"],"mappings":"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","sourcesContent":["// Libraries\nimport _ from 'lodash';\nimport { auto } from 'angular';\n\n// Components\nimport './color_legend';\n\n// Utils\nimport kbn from 'app/core/utils/kbn';\nimport {loadPluginCss} from 'app/plugins/sdk';\n\n// Types\nimport { MetricsPanelCtrl } from 'app/plugins/sdk';\nimport { AnnotationsSrv } from 'app/features/annotations/annotations_srv';\nimport { Bucket, BucketMatrix } from './statusmap_data';\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\";\nimport { ExtraSeriesFormat, ExtraSeriesFormatValue } from './extra_series_format';\n\nconst VALUE_INDEX = 0,\n TIME_INDEX = 1;\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\n\nloadPluginCss({\n dark: 'plugins/flant-statusmap-panel/css/statusmap.dark.css',\n light: 'plugins/flant-statusmap-panel/css/statusmap.light.css'\n});\n\nclass StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n data: any;\n bucketMatrix: BucketMatrix;\n\n graph: any;\n discreteHelper: ColorModeDiscrete;\n opacityScales: any = [];\n colorModes: any = [];\n colorSchemes: any = [];\n unitFormats: any;\n\n dataWarnings: {[warningId: string]: {title: string, tip: string}} = {};\n multipleValues: boolean;\n noColorDefined: boolean;\n noDatapoints: boolean;\n\n discreteExtraSeries: ColorModeDiscrete;\n extraSeriesFormats: any = [];\n\n annotations: object[] = [];\n annotationsPromise: any;\n\n panelDefaults: any = {\n // datasource name, null = default datasource\n datasource: null,\n // color mode\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 // buckets settings\n cards: {\n cardMinWidth: 5,\n cardVSpacing: 2,\n cardHSpacing: 2,\n cardRound: null\n },\n xAxis: {\n show: true,\n labelFormat: '%a %m/%d'\n },\n yAxis: {\n show: true,\n minWidth: -1,\n maxWidth: -1,\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 urls: [{\n tooltip: '',\n label: '',\n base_url: '',\n useExtraSeries: false,\n useseriesname: true,\n forcelowercase: true,\n icon_fa: 'external-link',\n extraSeries: {\n index: -1\n }\n }],\n seriesFilterIndex: -1,\n usingUrl: false\n };\n\n /** @ngInject */\n constructor($scope: any, $injector: auto.IInjectorService, timeSrv, private annotationsSrv: AnnotationsSrv, $window, datasourceSrv, variableSrv, templateSrv) {\n super($scope, $injector);\n\n _.defaultsDeep(this.panel, this.panelDefaults);\n\n this.opacityScales = opacityScales;\n this.colorModes = colorModes;\n this.colorSchemes = colorSchemes;\n this.variableSrv = variableSrv;\n this.extraSeriesFormats = ExtraSeriesFormat;\n\n this.renderLink = (link, scopedVars, format) => {\n var scoped = {}\n for (var key in scopedVars) {\n scoped[key] = { value: scopedVars[key] }\n }\n if (format) {\n return this.templateSrv.replace(link, scoped, format)\n } else {\n return this.templateSrv.replace(link, scoped)\n }\n }\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.discreteExtraSeries = 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 noDatapoints: {\n title: 'No data points',\n tip: 'No datapoints returned from data query',\n }\n };\n\n this.annotations = [];\n this.annotationsSrv = annotationsSrv;\n \n this.timeSrv = timeSrv;\n\n this.events.on('render', this.onRender.bind(this));\n this.events.on('data-received', this.onDataReceived.bind(this));\n this.events.on('data-error', this.onDataError.bind(this));\n this.events.on('data-snapshot-load', this.onDataReceived.bind(this));\n this.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n this.events.on('refresh', this.postRefresh.bind(this));\n // custom event from rendering.js\n this.events.on('render-complete', this.onRenderComplete.bind(this));\n this.events.on('onChangeType', this.onChangeType.bind(this));\n\n this.onCardColorChange = this.onCardColorChange.bind(this);\n }\n\n onRenderComplete(data: any):void {\n // console.log({\n // data: this.data,\n // bucketMatrix: this.bucketMatrix,\n // chartWidth: data.chartWidth,\n // from: this.range.from.valueOf(),\n // to: this.range.to.valueOf()\n // })\n\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n }\n\n onChangeType(url): void {\n switch (url.type) {\n case ExtraSeriesFormat.Date:\n url.extraSeries.format = ExtraSeriesFormatValue.Date;\n break;\n case ExtraSeriesFormat.Raw:\n url.extraSeries.format = ExtraSeriesFormatValue.Raw;\n break;\n default:\n url.extraSeries.format = ExtraSeriesFormatValue.Raw;\n break;\n }\n }\n\n // getChartWidth returns an approximation of chart canvas width or\n // a saved value calculated during a render.\n getChartWidth():number {\n if (this.graph.chartWidth > 0) {\n return this.graph.chartWidth;\n }\n\n const wndWidth = $(window).width();\n // gripPos.w is a width in grid's measurements. Grid size in Grafana is 24.\n const panelWidthFactor = this.panel.gridPos.w / 24;\n const panelWidth = Math.ceil(wndWidth * panelWidthFactor);\n // approximate width of the chart draw canvas:\n // - y axis ticks are not rendered yet on first data receive,\n // so choose 200 as a decent value for y legend width\n // - chartWidth can not be lower than the half of the panel width.\n const chartWidth = _.max([\n panelWidth - 200,\n panelWidth/2\n ]);\n\n return chartWidth!;\n }\n\n // Quick workaround for 6.7 and 7.0+. There is no call to\n // calculateInterval in updateTimeRange in those versions.\n updateTimeRange() {\n let ret = super.updateTimeRange();\n this.calculateInterval();\n return ret;\n }\n\n // calculateInterval is called on 'refresh' to calculate an interval\n // for datasource.\n // It is override of calculateInterval from MetricsPanelCtrl.\n calculateInterval() {\n let chartWidth = this.getChartWidth();\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.discreteExtraSeries.roundIntervalCeil(rangeMs / maxCardsCount);\n\n // Calculate low limit of interval\n let lowLimitMs = 1; // 1 millisecond default low limit\n \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 let interval = kbn.secondsToHms(intervalMs / 1000);\n\n this.intervalMs = intervalMs;\n this.interval = interval;\n\n // Get final buckets count after interval is adjusted\n //this.xBucketsCount = Math.floor(rangeMs / intervalMs);\n\n // console.log(\"calculateInterval: \", {\n // interval: this.interval,\n // intervalMs: this.intervalMs,\n // rangeMs: rangeMs,\n // from: this.range.from.valueOf(),\n // to: this.range.to.valueOf(),\n // numIntervals: rangeMs/this.intervalMs,\n // maxCardsCount: maxCardsCount,\n // });\n }\n\n issueQueries(datasource: any) {\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 datasourcePromises. \n\n if (\"undefined\" !== typeof(this.annotationsSrv.datasourcePromises)) {\n return this.annotationsSrv.datasourcePromises.then(r => {\n return this.issueQueriesWithInterval(datasource, this.interval);\n });\n } else {\n return this.issueQueriesWithInterval(datasource, this.interval);\n }\n }\n\n // Grafana 6.2 (and older) is using this.interval for queries,\n // but Grafana 6.3+ is calculating interval again in queryRunner,\n // so we need to save-restore this.panel.interval.\n issueQueriesWithInterval(datasource: any, interval: any) {\n var origInterval = this.panel.interval;\n this.panel.interval = interval;\n var res = super.issueQueries(datasource);\n this.panel.interval = origInterval;\n return res;\n }\n\n\n onDataReceived(dataList: any) {\n //console.log(\"data\",dataList)\n this.data = dataList;\n this.bucketMatrix = this.convertDataToBuckets(dataList, this.range.from.valueOf(), this.range.to.valueOf(), this.intervalMs, true);\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n\n //console.log(\"buckets\",this.bucketMatrix)\n\n this.annotationsPromise.then(\n (result: { alertState: any; annotations: any }) => {\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 = [];\n }\n this.render();\n },\n () => {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n );\n }\n\n onInitEditMode() {\n this.addEditorTab('Options', statusHeatmapOptionsEditor, 2);\n this.unitFormats = kbn.getUnitFormats();\n }\n\n // onRender will be called before StatusmapRenderer.onRender.\n // Decide if warning should be displayed over cards.\n onRender() {\n //console.log('OnRender');\n if (!this.range || !this.data) {\n this.noDatapoints = true;\n return;\n }\n\n this.multipleValues = false;\n if (!this.panel.useMax) {\n if (this.bucketMatrix) {\n this.multipleValues = this.bucketMatrix.multipleValues;\n }\n }\n\n this.noColorDefined = false;\n if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex == -1) {\n this.discreteExtraSeries.updateCardsValuesHasColorInfo();\n } else {\n this.discreteExtraSeries.updateCardsValuesHasColorInfoSingle();\n }\n if (this.bucketMatrix) {\n this.noColorDefined = this.bucketMatrix.noColorDefined;\n }\n }\n\n this.noDatapoints = false;\n if (this.bucketMatrix) {\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n }\n\n //console.log(this);\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 onEditorAddUrl = () => {\n this.panel.urls.push({\n label: '',\n base_url: '',\n useExtraSeries: false,\n useseriesname: true,\n forcelowercase: true,\n icon_fa: 'external-link',\n extraSeries: {\n index: -1\n }\n });\n this.render();\n }\n\n onEditorRemoveUrl = (index) => {\n this.panel.urls.splice(index, 1);\n this.render();\n }\n\n onEditorRemoveThreshold(index:number) {\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\n onEditorRemoveUrls = () => {\n this.panel.urls = [];\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 retrieveTimeVar() {\n var time = this.timeSrv.timeRangeForUrl();\n var var_time = '&from=' + time.from + '&to=' + time.to;\n return var_time;\n }\n\n // convertToBuckets groups values in data into buckets by target and timestamp.\n //\n // data is a result from datasource. It is an array of timeseries and tables:\n /* [\n // timeseries\n {\n target: \"query alias\",\n refId: \"A\",\n datapoints: [\n [0, 1582681239911],\n [3, 158....],\n ...\n ],\n tags?:{key: value,...}\n },\n // table\n {\n name: \"table name\",\n refId: \"B\",\n columns: [\n {text: \"id\"},\n {text: \"info\"},\n ...\n ],\n rows: [\n [1, \"123\"],\n [2, \"44411\"],\n ...\n ]\n },\n...\n ]\n\n to and from — a time range of the panel.\n intervalMs — a calculated interval. It is used to split a time range.\n */\n convertDataToBuckets(data:any, from:number, to:number, intervalMs: number, mostRecentBucket: boolean):BucketMatrix {\n let bucketMatrix = new BucketMatrix();\n bucketMatrix.rangeMs = to - from;\n bucketMatrix.intervalMs = intervalMs;\n\n if (!data || data.length == 0) { \n // Mimic heatmap and graph 'no data' labels.\n bucketMatrix.targets = [\n \"1.0\", \"0.0\", \"-1.0\"\n ];\n bucketMatrix.buckets[\"1.0\"] = [];\n bucketMatrix.buckets[\"0.0\"] = [];\n bucketMatrix.buckets[\"-1.0\"] = [];\n bucketMatrix.xBucketSize = 42;\n bucketMatrix.noDatapoints = true;\n return bucketMatrix;\n }\n\n let targetIndex: {[target: string]: number[]} = {};\n\n // Group indicies of elements in data by target (y label).\n \n // lodash version:\n //_.map(data, (d, i) => {\n // targetIndex[d.target] = _.concat(_.toArray(targetIndex[d.target]), i);\n //});\n\n data.map((queryResult: any, i: number) => {\n let yLabel = queryResult.target;\n if (!targetIndex.hasOwnProperty(yLabel)) {\n targetIndex[yLabel] = [];\n }\n targetIndex[yLabel].push(i);\n });\n\n let targetKeys = _.keys(targetIndex);\n\n //console.log (\"targetIndex: \", targetIndex, \"targetKeys: \", targetKeys);\n\n let targetTimestampRanges: {[target: string]: {[timestamp: number]: number[]}} = {};\n\n // Collect all timestamps for each target.\n // Make map timestamp => [from, to]. from == previous ts, to == ts from datapoint.\n targetKeys.map((target) => {\n let targetTimestamps: any[] = [];\n\n for (let si = 0; si < targetIndex[target].length; si++) {\n let s = data[targetIndex[target][si]];\n _.map(s.datapoints, (datapoint, idx) => {\n targetTimestamps.push(datapoint[TIME_INDEX]-from);\n })\n }\n\n //console.log(\"timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestamps = _.uniq(targetTimestamps);\n\n //console.log(\"uniq timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestampRanges[target] = [];\n for (let i = targetTimestamps.length-1 ; i>=0; i-- ) {\n let tsTo = targetTimestamps[i];\n let tsFrom = 0;\n if (tsTo < 0) {\n tsFrom = tsTo - intervalMs;\n } else {\n if (i-1 >= 0) {\n // Set from to previous timestamp + 1ms;\n tsFrom = targetTimestamps[i-1]+1;\n // tfTo - tfFrom should not be more than intervalMs\n let minFrom = tsTo - intervalMs;\n if (tsFrom < minFrom) {\n tsFrom = minFrom;\n }\n }\n }\n targetTimestampRanges[target][tsTo] = [tsFrom, tsTo];\n }\n });\n\n // console.log (\"targetTimestampRanges: \", targetTimestampRanges);\n\n // Create empty buckets using intervalMs to calculate ranges.\n // If mostRecentBucket is set, create a bucket with a range \"to\":\"to\"\n // to store most recent values.\n targetKeys.map((target) => {\n let targetEmptyBuckets: any[] = [];\n\n let lastTs = to-from;\n\n if (mostRecentBucket) {\n let topBucket = new Bucket();\n topBucket.yLabel = target;\n topBucket.relTo = lastTs;\n topBucket.relFrom = lastTs;\n topBucket.values = [];\n topBucket.mostRecent = true;\n if (targetTimestampRanges[target].hasOwnProperty(lastTs)) {\n topBucket.relFrom = targetTimestampRanges[target][lastTs][0];\n lastTs = topBucket.relFrom;\n }\n topBucket.to = topBucket.relTo+from;\n topBucket.from = topBucket.relFrom+from;\n targetEmptyBuckets.push(topBucket);\n }\n\n let idx = 0;\n let bucketFrom: number = 0;\n while (bucketFrom >= 0) {\n let b = new Bucket();\n b.yLabel = target;\n b.relTo = lastTs - idx*intervalMs;\n b.relFrom = lastTs - ((idx+1) * intervalMs);\n b.to = b.relTo+from;\n b.from = b.relFrom+from;\n b.values = [];\n bucketFrom = b.relFrom;\n targetEmptyBuckets.push(b);\n idx++;\n }\n\n targetEmptyBuckets.map((bucket, i) => {\n bucket.xid = i;\n });\n\n bucketMatrix.buckets[target] = targetEmptyBuckets;\n });\n\n //console.log (\"bucketMatrix: \", bucketMatrix);\n \n // Put values into buckets.\n bucketMatrix.minValue = Number.MAX_VALUE;\n bucketMatrix.maxValue = Number.MIN_SAFE_INTEGER;\n targetKeys.map((target) => {\n targetIndex[target].map((dataIndex) => {\n let s = data[dataIndex];\n s.datapoints.map((dp: any) => {\n for (let i = 0; i < bucketMatrix.buckets[target].length; i++) {\n if (bucketMatrix.buckets[target][i].belong(dp[TIME_INDEX])) {\n bucketMatrix.buckets[target][i].put(dp[VALUE_INDEX]);\n }\n }\n });\n });\n bucketMatrix.buckets[target].map((bucket) => {\n bucket.minValue = _.min(bucket.values);\n bucket.maxValue = _.max(bucket.values);\n if (bucket.minValue < bucketMatrix.minValue) {\n bucketMatrix.minValue = bucket.minValue;\n }\n if (bucket.maxValue > bucketMatrix.maxValue) {\n bucketMatrix.maxValue = bucket.maxValue;\n }\n bucket.value = bucket.maxValue;\n if (bucket.values.length > 1) {\n bucketMatrix.multipleValues = true;\n bucket.multipleValues = true;\n\n bucket.value = this.panel.seriesFilterIndex != -1 ? bucket.values[this.panel.seriesFilterIndex] : bucket.maxValue;\n }\n })\n });\n\n bucketMatrix.xBucketSize = Number.MIN_SAFE_INTEGER;\n targetKeys.map((target) => {\n let bucketsLen: number = bucketMatrix.buckets[target].length;\n if (bucketsLen > bucketMatrix.xBucketSize) {\n bucketMatrix.xBucketSize = bucketsLen;\n }\n });\n\n //console.log (\"bucketMatrix with values: \", bucketMatrix);\n\n bucketMatrix.targets = targetKeys;\n return bucketMatrix;\n this.bucketMatrix = bucketMatrix;\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\n\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 = new Card();\n // card.id = i*cardsData.xBucketSize + j;\n // card.values = [];\n // card.y = target;\n // card.x = -1;\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\n\n\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 = new Card();\n // card.id = i*cardsData.xBucketSize + j;\n // card.values = [];\n // card.y = target;\n // card.x = -1;\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\nexport {\n StatusHeatmapCtrl, StatusHeatmapCtrl as PanelCtrl\n};\n"],"file":"module.js"} \ No newline at end of file +{"version":3,"sources":["../src/module.ts"],"names":["_","kbn","loadPluginCss","MetricsPanelCtrl","Bucket","BucketMatrix","rendering","statusHeatmapOptionsEditor","ColorModeDiscrete","ExtraSeriesFormat","ExtraSeriesFormatValue","VALUE_INDEX","TIME_INDEX","colorSchemes","name","value","invert","colorModes","opacityScales","dark","light","StatusHeatmapCtrl","$scope","$injector","timeSrv","annotationsSrv","$window","datasourceSrv","variableSrv","templateSrv","datasource","color","mode","cardColor","colorScale","exponent","colorScheme","defaultColor","thresholds","cards","cardMinWidth","cardVSpacing","cardHSpacing","cardRound","xAxis","show","labelFormat","yAxis","minWidth","maxWidth","tooltip","legend","data","unitFormat","decimals","nullPointMode","yAxisSort","highlightCards","useMax","urls","label","base_url","useExtraSeries","useseriesname","forcelowercase","icon_fa","extraSeries","index","seriesFilterIndex","usingUrl","panel","push","render","splice","defaultsDeep","panelDefaults","extraSeriesFormats","renderLink","link","scopedVars","format","scoped","key","replace","graph","multipleValues","noColorDefined","discreteExtraSeries","dataWarnings","title","tip","noDatapoints","annotations","events","on","onRender","bind","onDataReceived","onDataError","onInitEditMode","postRefresh","onRenderComplete","onChangeType","onCardColorChange","chartWidth","renderingCompleted","url","type","Date","Raw","wndWidth","$","window","width","panelWidthFactor","gridPos","w","panelWidth","Math","ceil","max","ret","calculateInterval","getChartWidth","minCardWidth","minSpacing","maxCardsCount","intervalMs","rangeMs","range","to","valueOf","from","roundIntervalCeil","lowLimitMs","intervalOverride","interval","slice","interval_to_ms","secondsToHms","annotationsPromise","getAnnotations","dashboard","datasourcePromises","then","r","issueQueriesWithInterval","origInterval","res","dataList","bucketMatrix","convertDataToBuckets","result","loading","length","addEditorTab","unitFormats","getUnitFormats","updateCardsValuesHasColorInfo","updateCardsValuesHasColorInfoSingle","newColor","scope","elem","attrs","ctrl","time","timeRangeForUrl","var_time","mostRecentBucket","targets","buckets","xBucketSize","targetIndex","map","queryResult","i","yLabel","target","hasOwnProperty","targetKeys","keys","targetTimestampRanges","targetTimestamps","si","s","datapoints","datapoint","idx","uniq","tsTo","tsFrom","minFrom","targetEmptyBuckets","lastTs","topBucket","relTo","relFrom","values","mostRecent","bucketFrom","b","bucket","xid","minValue","Number","MAX_VALUE","maxValue","MIN_SAFE_INTEGER","dataIndex","dp","belong","put","min","bucketsLen"],"mappings":"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","sourcesContent":["// Libraries\nimport _ from 'lodash';\nimport { auto } from 'angular';\n\n// Components\nimport './color_legend';\n\n// Utils\nimport kbn from 'app/core/utils/kbn';\nimport {loadPluginCss} from 'app/plugins/sdk';\n\n// Types\nimport { MetricsPanelCtrl } from 'app/plugins/sdk';\nimport { AnnotationsSrv } from 'app/features/annotations/annotations_srv';\nimport { Bucket, BucketMatrix } from './statusmap_data';\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\";\nimport { ExtraSeriesFormat, ExtraSeriesFormatValue } from './extra_series_format';\n\nconst VALUE_INDEX = 0,\n TIME_INDEX = 1;\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\n\nloadPluginCss({\n dark: 'plugins/flant-statusmap-panel/css/statusmap.dark.css',\n light: 'plugins/flant-statusmap-panel/css/statusmap.light.css'\n});\n\nclass StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n data: any;\n bucketMatrix: BucketMatrix;\n\n graph: any;\n discreteHelper: ColorModeDiscrete;\n opacityScales: any = [];\n colorModes: any = [];\n colorSchemes: any = [];\n unitFormats: any;\n\n dataWarnings: {[warningId: string]: {title: string, tip: string}} = {};\n multipleValues: boolean;\n noColorDefined: boolean;\n noDatapoints: boolean;\n\n discreteExtraSeries: ColorModeDiscrete;\n extraSeriesFormats: any = [];\n\n annotations: object[] = [];\n annotationsPromise: any;\n\n panelDefaults: any = {\n // datasource name, null = default datasource\n datasource: null,\n // color mode\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 // buckets settings\n cards: {\n cardMinWidth: 5,\n cardVSpacing: 2,\n cardHSpacing: 2,\n cardRound: null\n },\n xAxis: {\n show: true,\n labelFormat: '%a %m/%d'\n },\n yAxis: {\n show: true,\n minWidth: -1,\n maxWidth: -1,\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 urls: [{\n tooltip: '',\n label: '',\n base_url: '',\n useExtraSeries: false,\n useseriesname: true,\n forcelowercase: true,\n icon_fa: 'external-link',\n extraSeries: {\n index: -1\n }\n }],\n seriesFilterIndex: -1,\n usingUrl: false\n };\n\n /** @ngInject */\n constructor($scope: any, $injector: auto.IInjectorService, timeSrv, private annotationsSrv: AnnotationsSrv, $window, datasourceSrv, variableSrv, templateSrv) {\n super($scope, $injector);\n\n _.defaultsDeep(this.panel, this.panelDefaults);\n\n this.opacityScales = opacityScales;\n this.colorModes = colorModes;\n this.colorSchemes = colorSchemes;\n this.variableSrv = variableSrv;\n this.extraSeriesFormats = ExtraSeriesFormat;\n\n this.renderLink = (link, scopedVars, format) => {\n var scoped = {}\n for (var key in scopedVars) {\n scoped[key] = { value: scopedVars[key] }\n }\n if (format) {\n return this.templateSrv.replace(link, scoped, format)\n } else {\n return this.templateSrv.replace(link, scoped)\n }\n }\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.discreteExtraSeries = 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 noDatapoints: {\n title: 'No data points',\n tip: 'No datapoints returned from data query',\n }\n };\n\n this.annotations = [];\n this.annotationsSrv = annotationsSrv;\n \n this.timeSrv = timeSrv;\n\n this.events.on('render', this.onRender.bind(this));\n this.events.on('data-received', this.onDataReceived.bind(this));\n this.events.on('data-error', this.onDataError.bind(this));\n this.events.on('data-snapshot-load', this.onDataReceived.bind(this));\n this.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n this.events.on('refresh', this.postRefresh.bind(this));\n // custom event from rendering.js\n this.events.on('render-complete', this.onRenderComplete.bind(this));\n this.events.on('onChangeType', this.onChangeType.bind(this));\n\n this.onCardColorChange = this.onCardColorChange.bind(this);\n }\n\n onRenderComplete(data: any):void {\n // console.log({\n // data: this.data,\n // bucketMatrix: this.bucketMatrix,\n // chartWidth: data.chartWidth,\n // from: this.range.from.valueOf(),\n // to: this.range.to.valueOf()\n // })\n\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n }\n\n onChangeType(url): void {\n switch (url.type) {\n case ExtraSeriesFormat.Date:\n url.extraSeries.format = ExtraSeriesFormatValue.Date;\n break;\n case ExtraSeriesFormat.Raw:\n url.extraSeries.format = ExtraSeriesFormatValue.Raw;\n break;\n default:\n url.extraSeries.format = ExtraSeriesFormatValue.Raw;\n break;\n }\n }\n\n // getChartWidth returns an approximation of chart canvas width or\n // a saved value calculated during a render.\n getChartWidth():number {\n if (this.graph.chartWidth > 0) {\n return this.graph.chartWidth;\n }\n\n const wndWidth = $(window).width();\n // gripPos.w is a width in grid's measurements. Grid size in Grafana is 24.\n const panelWidthFactor = this.panel.gridPos.w / 24;\n const panelWidth = Math.ceil(wndWidth * panelWidthFactor);\n // approximate width of the chart draw canvas:\n // - y axis ticks are not rendered yet on first data receive,\n // so choose 200 as a decent value for y legend width\n // - chartWidth can not be lower than the half of the panel width.\n const chartWidth = _.max([\n panelWidth - 200,\n panelWidth/2\n ]);\n\n return chartWidth!;\n }\n\n // Quick workaround for 6.7 and 7.0+. There is no call to\n // calculateInterval in updateTimeRange in those versions.\n updateTimeRange(datasource?: any) {\n let ret = super.updateTimeRange(datasource);\n this.calculateInterval();\n return ret;\n }\n\n // calculateInterval is called on 'refresh' to calculate an interval\n // for datasource.\n // It is override of calculateInterval from MetricsPanelCtrl.\n calculateInterval() {\n let chartWidth = this.getChartWidth();\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.discreteExtraSeries.roundIntervalCeil(rangeMs / maxCardsCount);\n\n // Calculate low limit of interval\n let lowLimitMs = 1; // 1 millisecond default low limit\n \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 let interval = kbn.secondsToHms(intervalMs / 1000);\n\n this.intervalMs = intervalMs;\n this.interval = interval;\n\n // Get final buckets count after interval is adjusted\n //this.xBucketsCount = Math.floor(rangeMs / intervalMs);\n\n // console.log(\"calculateInterval: \", {\n // interval: this.interval,\n // intervalMs: this.intervalMs,\n // rangeMs: rangeMs,\n // from: this.range.from.valueOf(),\n // to: this.range.to.valueOf(),\n // numIntervals: rangeMs/this.intervalMs,\n // maxCardsCount: maxCardsCount,\n // });\n }\n\n issueQueries(datasource: any) {\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 datasourcePromises. \n\n if (\"undefined\" !== typeof(this.annotationsSrv.datasourcePromises)) {\n return this.annotationsSrv.datasourcePromises.then(r => {\n return this.issueQueriesWithInterval(datasource, this.interval);\n });\n } else {\n return this.issueQueriesWithInterval(datasource, this.interval);\n }\n }\n\n // Grafana 6.2 (and older) is using this.interval for queries,\n // but Grafana 6.3+ is calculating interval again in queryRunner,\n // so we need to save-restore this.panel.interval.\n issueQueriesWithInterval(datasource: any, interval: any) {\n var origInterval = this.panel.interval;\n this.panel.interval = interval;\n var res = super.issueQueries(datasource);\n this.panel.interval = origInterval;\n return res;\n }\n\n\n onDataReceived(dataList: any) {\n //console.log(\"data\",dataList)\n this.data = dataList;\n this.bucketMatrix = this.convertDataToBuckets(dataList, this.range.from.valueOf(), this.range.to.valueOf(), this.intervalMs, true);\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n\n //console.log(\"buckets\",this.bucketMatrix)\n\n this.annotationsPromise.then(\n (result: { alertState: any; annotations: any }) => {\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 = [];\n }\n this.render();\n },\n () => {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n );\n }\n\n onInitEditMode() {\n this.addEditorTab('Options', statusHeatmapOptionsEditor, 2);\n this.unitFormats = kbn.getUnitFormats();\n }\n\n // onRender will be called before StatusmapRenderer.onRender.\n // Decide if warning should be displayed over cards.\n onRender() {\n //console.log('OnRender');\n if (!this.range || !this.data) {\n this.noDatapoints = true;\n return;\n }\n\n this.multipleValues = false;\n if (!this.panel.useMax) {\n if (this.bucketMatrix) {\n this.multipleValues = this.bucketMatrix.multipleValues;\n }\n }\n\n this.noColorDefined = false;\n if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex == -1) {\n this.discreteExtraSeries.updateCardsValuesHasColorInfo();\n } else {\n this.discreteExtraSeries.updateCardsValuesHasColorInfoSingle();\n }\n if (this.bucketMatrix) {\n this.noColorDefined = this.bucketMatrix.noColorDefined;\n }\n }\n\n this.noDatapoints = false;\n if (this.bucketMatrix) {\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n }\n\n //console.log(this);\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 onEditorAddUrl = () => {\n this.panel.urls.push({\n label: '',\n base_url: '',\n useExtraSeries: false,\n useseriesname: true,\n forcelowercase: true,\n icon_fa: 'external-link',\n extraSeries: {\n index: -1\n }\n });\n this.render();\n }\n\n onEditorRemoveUrl = (index) => {\n this.panel.urls.splice(index, 1);\n this.render();\n }\n\n onEditorRemoveThreshold(index:number) {\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\n onEditorRemoveUrls = () => {\n this.panel.urls = [];\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 retrieveTimeVar() {\n var time = this.timeSrv.timeRangeForUrl();\n var var_time = '&from=' + time.from + '&to=' + time.to;\n return var_time;\n }\n\n // convertToBuckets groups values in data into buckets by target and timestamp.\n //\n // data is a result from datasource. It is an array of timeseries and tables:\n /* [\n // timeseries\n {\n target: \"query alias\",\n refId: \"A\",\n datapoints: [\n [0, 1582681239911],\n [3, 158....],\n ...\n ],\n tags?:{key: value,...}\n },\n // table\n {\n name: \"table name\",\n refId: \"B\",\n columns: [\n {text: \"id\"},\n {text: \"info\"},\n ...\n ],\n rows: [\n [1, \"123\"],\n [2, \"44411\"],\n ...\n ]\n },\n...\n ]\n\n to and from — a time range of the panel.\n intervalMs — a calculated interval. It is used to split a time range.\n */\n convertDataToBuckets(data:any, from:number, to:number, intervalMs: number, mostRecentBucket: boolean):BucketMatrix {\n let bucketMatrix = new BucketMatrix();\n bucketMatrix.rangeMs = to - from;\n bucketMatrix.intervalMs = intervalMs;\n\n if (!data || data.length == 0) { \n // Mimic heatmap and graph 'no data' labels.\n bucketMatrix.targets = [\n \"1.0\", \"0.0\", \"-1.0\"\n ];\n bucketMatrix.buckets[\"1.0\"] = [];\n bucketMatrix.buckets[\"0.0\"] = [];\n bucketMatrix.buckets[\"-1.0\"] = [];\n bucketMatrix.xBucketSize = 42;\n bucketMatrix.noDatapoints = true;\n return bucketMatrix;\n }\n\n let targetIndex: {[target: string]: number[]} = {};\n\n // Group indicies of elements in data by target (y label).\n \n // lodash version:\n //_.map(data, (d, i) => {\n // targetIndex[d.target] = _.concat(_.toArray(targetIndex[d.target]), i);\n //});\n\n data.map((queryResult: any, i: number) => {\n let yLabel = queryResult.target;\n if (!targetIndex.hasOwnProperty(yLabel)) {\n targetIndex[yLabel] = [];\n }\n targetIndex[yLabel].push(i);\n });\n\n let targetKeys = _.keys(targetIndex);\n\n //console.log (\"targetIndex: \", targetIndex, \"targetKeys: \", targetKeys);\n\n let targetTimestampRanges: {[target: string]: {[timestamp: number]: number[]}} = {};\n\n // Collect all timestamps for each target.\n // Make map timestamp => [from, to]. from == previous ts, to == ts from datapoint.\n targetKeys.map((target) => {\n let targetTimestamps: any[] = [];\n\n for (let si = 0; si < targetIndex[target].length; si++) {\n let s = data[targetIndex[target][si]];\n _.map(s.datapoints, (datapoint, idx) => {\n targetTimestamps.push(datapoint[TIME_INDEX]-from);\n })\n }\n\n //console.log(\"timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestamps = _.uniq(targetTimestamps);\n\n //console.log(\"uniq timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestampRanges[target] = [];\n for (let i = targetTimestamps.length-1 ; i>=0; i-- ) {\n let tsTo = targetTimestamps[i];\n let tsFrom = 0;\n if (tsTo < 0) {\n tsFrom = tsTo - intervalMs;\n } else {\n if (i-1 >= 0) {\n // Set from to previous timestamp + 1ms;\n tsFrom = targetTimestamps[i-1]+1;\n // tfTo - tfFrom should not be more than intervalMs\n let minFrom = tsTo - intervalMs;\n if (tsFrom < minFrom) {\n tsFrom = minFrom;\n }\n }\n }\n targetTimestampRanges[target][tsTo] = [tsFrom, tsTo];\n }\n });\n\n // console.log (\"targetTimestampRanges: \", targetTimestampRanges);\n\n // Create empty buckets using intervalMs to calculate ranges.\n // If mostRecentBucket is set, create a bucket with a range \"to\":\"to\"\n // to store most recent values.\n targetKeys.map((target) => {\n let targetEmptyBuckets: any[] = [];\n\n let lastTs = to-from;\n\n if (mostRecentBucket) {\n let topBucket = new Bucket();\n topBucket.yLabel = target;\n topBucket.relTo = lastTs;\n topBucket.relFrom = lastTs;\n topBucket.values = [];\n topBucket.mostRecent = true;\n if (targetTimestampRanges[target].hasOwnProperty(lastTs)) {\n topBucket.relFrom = targetTimestampRanges[target][lastTs][0];\n lastTs = topBucket.relFrom;\n }\n topBucket.to = topBucket.relTo+from;\n topBucket.from = topBucket.relFrom+from;\n targetEmptyBuckets.push(topBucket);\n }\n\n let idx = 0;\n let bucketFrom: number = 0;\n while (bucketFrom >= 0) {\n let b = new Bucket();\n b.yLabel = target;\n b.relTo = lastTs - idx*intervalMs;\n b.relFrom = lastTs - ((idx+1) * intervalMs);\n b.to = b.relTo+from;\n b.from = b.relFrom+from;\n b.values = [];\n bucketFrom = b.relFrom;\n targetEmptyBuckets.push(b);\n idx++;\n }\n\n targetEmptyBuckets.map((bucket, i) => {\n bucket.xid = i;\n });\n\n bucketMatrix.buckets[target] = targetEmptyBuckets;\n });\n\n //console.log (\"bucketMatrix: \", bucketMatrix);\n \n // Put values into buckets.\n bucketMatrix.minValue = Number.MAX_VALUE;\n bucketMatrix.maxValue = Number.MIN_SAFE_INTEGER;\n targetKeys.map((target) => {\n targetIndex[target].map((dataIndex) => {\n let s = data[dataIndex];\n s.datapoints.map((dp: any) => {\n for (let i = 0; i < bucketMatrix.buckets[target].length; i++) {\n if (bucketMatrix.buckets[target][i].belong(dp[TIME_INDEX])) {\n bucketMatrix.buckets[target][i].put(dp[VALUE_INDEX]);\n }\n }\n });\n });\n bucketMatrix.buckets[target].map((bucket) => {\n bucket.minValue = _.min(bucket.values);\n bucket.maxValue = _.max(bucket.values);\n if (bucket.minValue < bucketMatrix.minValue) {\n bucketMatrix.minValue = bucket.minValue;\n }\n if (bucket.maxValue > bucketMatrix.maxValue) {\n bucketMatrix.maxValue = bucket.maxValue;\n }\n bucket.value = bucket.maxValue;\n if (bucket.values.length > 1) {\n bucketMatrix.multipleValues = true;\n bucket.multipleValues = true;\n\n bucket.value = this.panel.seriesFilterIndex != -1 ? bucket.values[this.panel.seriesFilterIndex] : bucket.maxValue;\n }\n })\n });\n\n bucketMatrix.xBucketSize = Number.MIN_SAFE_INTEGER;\n targetKeys.map((target) => {\n let bucketsLen: number = bucketMatrix.buckets[target].length;\n if (bucketsLen > bucketMatrix.xBucketSize) {\n bucketMatrix.xBucketSize = bucketsLen;\n }\n });\n\n //console.log (\"bucketMatrix with values: \", bucketMatrix);\n\n bucketMatrix.targets = targetKeys;\n return bucketMatrix;\n this.bucketMatrix = bucketMatrix;\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\n\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 = new Card();\n // card.id = i*cardsData.xBucketSize + j;\n // card.values = [];\n // card.y = target;\n // card.x = -1;\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\n\n\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 = new Card();\n // card.id = i*cardsData.xBucketSize + j;\n // card.values = [];\n // card.y = target;\n // card.x = -1;\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\nexport {\n StatusHeatmapCtrl, StatusHeatmapCtrl as PanelCtrl\n};\n"],"file":"module.js"} \ No newline at end of file diff --git a/src/module.ts b/src/module.ts index d2683dc..678493d 100644 --- a/src/module.ts +++ b/src/module.ts @@ -266,8 +266,8 @@ class StatusHeatmapCtrl extends MetricsPanelCtrl { // Quick workaround for 6.7 and 7.0+. There is no call to // calculateInterval in updateTimeRange in those versions. - updateTimeRange() { - let ret = super.updateTimeRange(); + updateTimeRange(datasource?: any) { + let ret = super.updateTimeRange(datasource); this.calculateInterval(); return ret; }