diff --git a/dist/module.js b/dist/module.js index 50febef..7244332 100644 --- a/dist/module.js +++ b/dist/module.js @@ -245,12 +245,19 @@ System.register(["lodash", "./color_legend", "./options_editor", "./tooltip_edit show: true, freezeOnClick: true, showItems: false, - items: [] // see tooltip_editor.ts - + items: [], + // see tooltip_editor.ts + showExtraInfo: false, + extraInfo: "" }, legend: { show: true }, + yLabel: { + usingSplitLabel: false, + delimiter: "", + labelTemplate: "" + }, // how null points should be handled nullPointMode: 'as empty', yAxisSort: 'metrics', @@ -665,14 +672,39 @@ System.register(["lodash", "./color_legend", "./options_editor", "./tooltip_edit return bucketMatrix; } - var targetIndex = {}; // Group indicies of elements in data by target (y label). + var targetIndex = {}; + var targetPartials = {}; // Group indicies of elements in data by target (y label). // lodash version: //_.map(data, (d, i) => { // targetIndex[d.target] = _.concat(_.toArray(targetIndex[d.target]), i); //}); data.map(function (queryResult, i) { - var yLabel = queryResult.target; + // Init yLabel as the query target + var yLabel = queryResult.target; // Check if there is some labelTemplate configured + + if (_this4.panel.yLabel.usingSplitLabel && _this4.panel.yLabel.delimiter != "") { + var pLabels = queryResult.target.split(_this4.panel.yLabel.delimiter); // Load all possible values as scoped vars and load them into targetPartials + // to be used on different components as Bucket and BucketMatrix props + + var scopedVars = []; + scopedVars["__y_label"] = { + value: yLabel + }; + + for (var _i in pLabels) { + scopedVars["__y_label_".concat(_i)] = { + value: pLabels[_i] + }; + } + + if (_this4.panel.yLabel.labelTemplate != "") { + yLabel = _this4.templateSrv.replace(_this4.panel.yLabel.labelTemplate, scopedVars); + } + + targetPartials[yLabel] = pLabels; + } //reset if it already exists + if (!targetIndex.hasOwnProperty(yLabel)) { targetIndex[yLabel] = []; @@ -757,6 +789,7 @@ System.register(["lodash", "./color_legend", "./options_editor", "./tooltip_edit while (bucketFrom >= 0) { var b = new Bucket(); b.yLabel = target; + b.pLabels = targetPartials[target]; b.relTo = lastTs - idx * intervalMs; b.relFrom = lastTs - (idx + 1) * intervalMs; b.to = b.relTo + from; @@ -818,6 +851,7 @@ System.register(["lodash", "./color_legend", "./options_editor", "./tooltip_edit }); //console.log ("bucketMatrix with values: ", bucketMatrix); bucketMatrix.targets = targetKeys; + bucketMatrix.pLabels = targetPartials; return bucketMatrix; } }]); diff --git a/dist/module.js.map b/dist/module.js.map index 84dc5fd..cb5cab6 100644 --- a/dist/module.js.map +++ b/dist/module.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/module.ts"],"names":["_","optionsEditorCtrl","tooltipEditorCtrl","migratePanelConfig","kbn","loadPluginCss","MetricsPanelCtrl","CoreEvents","PanelEvents","Bucket","BucketMatrix","BucketMatrixPager","rendering","Polygrafill","ColorModeDiscrete","VALUE_INDEX","TIME_INDEX","colorSchemes","name","value","invert","colorModes","opacityScales","dark","light","renderComplete","StatusHeatmapCtrl","$scope","$injector","annotationsSrv","datasource","color","mode","cardColor","colorScale","exponent","colorScheme","defaultColor","thresholds","cards","cardMinWidth","cardVSpacing","cardHSpacing","cardRound","xAxis","show","yAxis","minWidth","maxWidth","tooltip","freezeOnClick","showItems","items","legend","nullPointMode","yAxisSort","highlightCards","useMax","seriesFilterIndex","usingPagination","pageSize","hasAppEventCompatibleEmitter","events","fallbackToStringEvents","interval_to_ms","intervalToMs","panel","defaultsDeep","panelDefaults","bucketMatrix","bucketMatrixPager","setEnable","setDefaultPageSize","setPageSize","pager","graph","multipleValues","noColorDefined","discreteExtraSeries","dataWarnings","title","tip","noDatapoints","annotations","on","render","onRender","bind","dataReceived","onDataReceived","dataError","onDataError","dataSnapshotLoad","editModeInitialized","onInitEditMode","refresh","postRefresh","onRenderComplete","onCardColorChange","data","chartWidth","renderingCompleted","defaultPageSize","pageSizeViewer","setCurrent","switchToPrev","switchToNext","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","templateSrv","replace","scopedVars","slice","secondsToHms","annotationsPromise","getAnnotations","dashboard","datasourcePromises","then","r","issueQueriesWithInterval","origInterval","res","dataList","newBucketMatrix","convertDataToBuckets","targets","length","result","loading","addEditorTab","unitFormats","getUnitFormats","updateCardsValuesHasColorInfo","updateCardsValuesHasColorInfoSingle","newColor","scope","elem","attrs","ctrl","time","timeSrv","timeRangeForUrl","mostRecentBucket","buckets","xBucketSize","targetIndex","map","queryResult","i","yLabel","target","hasOwnProperty","push","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';\nimport { optionsEditorCtrl } from './options_editor';\nimport { tooltipEditorCtrl } from './tooltip_editor';\nimport { migratePanelConfig } from './panel_config_migration';\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 { CoreEvents, PanelEvents } from './libs/grafana/events/index';\nimport {Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data';\nimport rendering from './rendering';\nimport { Polygrafill } from './libs/polygrafill/index';\n\n\nimport {ColorModeDiscrete} from \"./color_mode_discrete\";\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\nloadPluginCss({\n dark: 'plugins/flant-statusmap-panel/css/statusmap.dark.css',\n light: 'plugins/flant-statusmap-panel/css/statusmap.light.css'\n});\n\nexport var renderComplete:any = {name:'statusmap-render-complete'};\n\nclass StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n data: any;\n bucketMatrix: BucketMatrix;\n bucketMatrixPager: BucketMatrixPager;\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\n annotations: object[] = [];\n annotationsPromise: any;\n\n // TODO remove this transient variable: use ng-model-options=\"{ getterSetter: true }\"\n pageSizeViewer: number = 15;\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 },\n yAxis: {\n show: true,\n minWidth: -1,\n maxWidth: -1\n },\n tooltip: {\n show: true,\n freezeOnClick: true,\n showItems: false,\n items: [] // see tooltip_editor.ts\n },\n legend: {\n show: true\n },\n // how null points should be handled\n nullPointMode: 'as empty',\n yAxisSort: 'metrics',\n highlightCards: true,\n useMax: true,\n\n seriesFilterIndex: -1,\n\n // Pagination options\n usingPagination: false,\n pageSize: 15\n };\n\n /** @ngInject */\n constructor($scope: any, $injector: auto.IInjectorService, private annotationsSrv: AnnotationsSrv) {\n super($scope, $injector);\n\n if(!Polygrafill.hasAppEventCompatibleEmitter(this.events)){\n CoreEvents.fallbackToStringEvents();\n PanelEvents.fallbackToStringEvents();\n renderComplete = 'statusmap-render-complete';\n }\n\n // Grafana 7.2 workaround\n if (typeof kbn[\"intervalToMs\"] === \"function\") {\n kbn.interval_to_ms = kbn.intervalToMs;\n }\n\n migratePanelConfig(this.panel);\n _.defaultsDeep(this.panel, this.panelDefaults);\n\n this.bucketMatrix = new BucketMatrix();\n\n // Create pager for bucketMatrix and restore page size.\n this.bucketMatrixPager = new BucketMatrixPager();\n this.bucketMatrixPager.setEnable(this.panel.usingPagination);\n this.bucketMatrixPager.setDefaultPageSize(this.panel.pageSize);\n this.bucketMatrixPager.setPageSize(this.panel.pageSize);\n $scope.pager = this.bucketMatrixPager;\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.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.events.on(PanelEvents.render, this.onRender.bind(this));\n this.events.on(PanelEvents.dataReceived, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.dataError, this.onDataError.bind(this));\n this.events.on(PanelEvents.dataSnapshotLoad, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.editModeInitialized, this.onInitEditMode.bind(this));\n this.events.on(PanelEvents.refresh, this.postRefresh.bind(this));\n // custom event from rendering.js\n this.events.on(renderComplete, this.onRenderComplete.bind(this));\n\n this.onCardColorChange = this.onCardColorChange.bind(this);\n }\n\n onRenderComplete(data: any):void {\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n }\n\n changeDefaultPaginationSize(defaultPageSize: number): void {\n this.bucketMatrixPager.setDefaultPageSize(defaultPageSize);\n this.bucketMatrixPager.setPageSize(defaultPageSize);\n this.pageSizeViewer = defaultPageSize;\n\n this.render();\n this.refresh();\n }\n\n onChangePageSize(): void {\n if (this.pageSizeViewer <= 0) {\n this.pageSizeViewer = this.bucketMatrixPager.defaultPageSize;\n }\n this.bucketMatrixPager.setPageSize(this.pageSizeViewer);\n this.bucketMatrixPager.setCurrent(0);\n\n this.render();\n this.refresh();\n }\n\n onPrevPage(): void {\n this.bucketMatrixPager.switchToPrev();\n this.render();\n }\n\n onNextPage(): void {\n this.bucketMatrixPager.switchToNext();\n this.render();\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 // TODO ts type has no argument for this method.\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 // TODO is it needed?\n //this.xBucketsCount = Math.floor(rangeMs / intervalMs);\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 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 onDataReceived(dataList: any) {\n this.data = dataList;\n // Quick workaround for 7.0+. There is no call to\n // calculateInterval when enter Edit mode.\n if (!this.intervalMs) {\n this.calculateInterval();\n }\n\n let newBucketMatrix = this.convertDataToBuckets(dataList, this.range.from.valueOf(), this.range.to.valueOf(), this.intervalMs, true);\n\n this.bucketMatrix = newBucketMatrix;\n this.bucketMatrixPager.bucketMatrix = newBucketMatrix;\n if (newBucketMatrix.targets.length !== this.bucketMatrix.targets.length) {\n this.bucketMatrixPager.setCurrent(0);\n }\n\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n\n if (this.annotationsPromise) {\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 } else {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n }\n\n onInitEditMode() {\n this.addEditorTab('Options', optionsEditorCtrl, 2);\n this.addEditorTab('Tooltip', tooltipEditorCtrl, 3);\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 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\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 link(scope, elem, attrs, ctrl) {\n rendering(scope, elem, attrs, ctrl);\n }\n\n // Compatible with Grafana 7.0 overrides feature.\n retrieveTimeVar() {\n var time = this.timeSrv.timeRangeForUrl();\n return 'from=' + time.from + '&to=' + time.to;\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 }\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":["_","optionsEditorCtrl","tooltipEditorCtrl","migratePanelConfig","kbn","loadPluginCss","MetricsPanelCtrl","CoreEvents","PanelEvents","Bucket","BucketMatrix","BucketMatrixPager","rendering","Polygrafill","ColorModeDiscrete","VALUE_INDEX","TIME_INDEX","colorSchemes","name","value","invert","colorModes","opacityScales","dark","light","renderComplete","StatusHeatmapCtrl","$scope","$injector","annotationsSrv","datasource","color","mode","cardColor","colorScale","exponent","colorScheme","defaultColor","thresholds","cards","cardMinWidth","cardVSpacing","cardHSpacing","cardRound","xAxis","show","yAxis","minWidth","maxWidth","tooltip","freezeOnClick","showItems","items","showExtraInfo","extraInfo","legend","yLabel","usingSplitLabel","delimiter","labelTemplate","nullPointMode","yAxisSort","highlightCards","useMax","seriesFilterIndex","usingPagination","pageSize","hasAppEventCompatibleEmitter","events","fallbackToStringEvents","interval_to_ms","intervalToMs","panel","defaultsDeep","panelDefaults","bucketMatrix","bucketMatrixPager","setEnable","setDefaultPageSize","setPageSize","pager","graph","multipleValues","noColorDefined","discreteExtraSeries","dataWarnings","title","tip","noDatapoints","annotations","on","render","onRender","bind","dataReceived","onDataReceived","dataError","onDataError","dataSnapshotLoad","editModeInitialized","onInitEditMode","refresh","postRefresh","onRenderComplete","onCardColorChange","data","chartWidth","renderingCompleted","defaultPageSize","pageSizeViewer","setCurrent","switchToPrev","switchToNext","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","templateSrv","replace","scopedVars","slice","secondsToHms","annotationsPromise","getAnnotations","dashboard","datasourcePromises","then","r","issueQueriesWithInterval","origInterval","res","dataList","newBucketMatrix","convertDataToBuckets","targets","length","result","loading","addEditorTab","unitFormats","getUnitFormats","updateCardsValuesHasColorInfo","updateCardsValuesHasColorInfoSingle","newColor","scope","elem","attrs","ctrl","time","timeSrv","timeRangeForUrl","mostRecentBucket","buckets","xBucketSize","targetIndex","targetPartials","map","queryResult","i","target","pLabels","split","hasOwnProperty","push","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';\nimport { optionsEditorCtrl } from './options_editor';\nimport { tooltipEditorCtrl } from './tooltip_editor';\nimport { migratePanelConfig } from './panel_config_migration';\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 { CoreEvents, PanelEvents } from './libs/grafana/events/index';\nimport {Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data';\nimport rendering from './rendering';\nimport { Polygrafill } from './libs/polygrafill/index';\n\n\nimport {ColorModeDiscrete} from \"./color_mode_discrete\";\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\nloadPluginCss({\n dark: 'plugins/flant-statusmap-panel/css/statusmap.dark.css',\n light: 'plugins/flant-statusmap-panel/css/statusmap.light.css'\n});\n\nexport var renderComplete:any = {name:'statusmap-render-complete'};\n\nclass StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n data: any;\n bucketMatrix: BucketMatrix;\n bucketMatrixPager: BucketMatrixPager;\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\n annotations: object[] = [];\n annotationsPromise: any;\n\n // TODO remove this transient variable: use ng-model-options=\"{ getterSetter: true }\"\n pageSizeViewer: number = 15;\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 },\n yAxis: {\n show: true,\n minWidth: -1,\n maxWidth: -1\n },\n tooltip: {\n show: true,\n freezeOnClick: true,\n showItems: false,\n items: [], // see tooltip_editor.ts\n showExtraInfo: false,\n extraInfo: \"\",\n },\n legend: {\n show: true\n },\n yLabel: {\n usingSplitLabel: false,\n delimiter: \"\",\n labelTemplate: \"\",\n },\n // how null points should be handled\n nullPointMode: 'as empty',\n yAxisSort: 'metrics',\n highlightCards: true,\n useMax: true,\n\n seriesFilterIndex: -1,\n\n // Pagination options\n usingPagination: false,\n pageSize: 15\n };\n\n /** @ngInject */\n constructor($scope: any, $injector: auto.IInjectorService, private annotationsSrv: AnnotationsSrv) {\n super($scope, $injector);\n\n if(!Polygrafill.hasAppEventCompatibleEmitter(this.events)){\n CoreEvents.fallbackToStringEvents();\n PanelEvents.fallbackToStringEvents();\n renderComplete = 'statusmap-render-complete';\n }\n\n // Grafana 7.2 workaround\n if (typeof kbn[\"intervalToMs\"] === \"function\") {\n kbn.interval_to_ms = kbn.intervalToMs;\n }\n\n migratePanelConfig(this.panel);\n _.defaultsDeep(this.panel, this.panelDefaults);\n\n this.bucketMatrix = new BucketMatrix();\n\n // Create pager for bucketMatrix and restore page size.\n this.bucketMatrixPager = new BucketMatrixPager();\n this.bucketMatrixPager.setEnable(this.panel.usingPagination);\n this.bucketMatrixPager.setDefaultPageSize(this.panel.pageSize);\n this.bucketMatrixPager.setPageSize(this.panel.pageSize);\n $scope.pager = this.bucketMatrixPager;\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.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.events.on(PanelEvents.render, this.onRender.bind(this));\n this.events.on(PanelEvents.dataReceived, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.dataError, this.onDataError.bind(this));\n this.events.on(PanelEvents.dataSnapshotLoad, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.editModeInitialized, this.onInitEditMode.bind(this));\n this.events.on(PanelEvents.refresh, this.postRefresh.bind(this));\n // custom event from rendering.js\n this.events.on(renderComplete, this.onRenderComplete.bind(this));\n\n this.onCardColorChange = this.onCardColorChange.bind(this);\n }\n\n onRenderComplete(data: any):void {\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n }\n\n changeDefaultPaginationSize(defaultPageSize: number): void {\n this.bucketMatrixPager.setDefaultPageSize(defaultPageSize);\n this.bucketMatrixPager.setPageSize(defaultPageSize);\n this.pageSizeViewer = defaultPageSize;\n\n this.render();\n this.refresh();\n }\n\n onChangePageSize(): void {\n if (this.pageSizeViewer <= 0) {\n this.pageSizeViewer = this.bucketMatrixPager.defaultPageSize;\n }\n this.bucketMatrixPager.setPageSize(this.pageSizeViewer);\n this.bucketMatrixPager.setCurrent(0);\n\n this.render();\n this.refresh();\n }\n\n onPrevPage(): void {\n this.bucketMatrixPager.switchToPrev();\n this.render();\n }\n\n onNextPage(): void {\n this.bucketMatrixPager.switchToNext();\n this.render();\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 // TODO ts type has no argument for this method.\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 // TODO is it needed?\n //this.xBucketsCount = Math.floor(rangeMs / intervalMs);\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 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 onDataReceived(dataList: any) {\n this.data = dataList;\n // Quick workaround for 7.0+. There is no call to\n // calculateInterval when enter Edit mode.\n if (!this.intervalMs) {\n this.calculateInterval();\n }\n\n let newBucketMatrix = this.convertDataToBuckets(dataList, this.range.from.valueOf(), this.range.to.valueOf(), this.intervalMs, true);\n\n this.bucketMatrix = newBucketMatrix;\n this.bucketMatrixPager.bucketMatrix = newBucketMatrix;\n if (newBucketMatrix.targets.length !== this.bucketMatrix.targets.length) {\n this.bucketMatrixPager.setCurrent(0);\n }\n\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n\n if (this.annotationsPromise) {\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 } else {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n }\n\n onInitEditMode() {\n this.addEditorTab('Options', optionsEditorCtrl, 2);\n this.addEditorTab('Tooltip', tooltipEditorCtrl, 3);\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 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\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 link(scope, elem, attrs, ctrl) {\n rendering(scope, elem, attrs, ctrl);\n }\n\n // Compatible with Grafana 7.0 overrides feature.\n retrieveTimeVar() {\n var time = this.timeSrv.timeRangeForUrl();\n return 'from=' + time.from + '&to=' + time.to;\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 let targetPartials: {[target: string]: string[]} = {};\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 // Init yLabel as the query target\n let yLabel = queryResult.target;\n\n // Check if there is some labelTemplate configured\n if (this.panel.yLabel.usingSplitLabel && this.panel.yLabel.delimiter != \"\" ) {\n let pLabels = queryResult.target.split(this.panel.yLabel.delimiter);\n\n // Load all possible values as scoped vars and load them into targetPartials\n // to be used on different components as Bucket and BucketMatrix props\n let scopedVars = []\n scopedVars[`__y_label`] = {value: yLabel}\n for (let i in pLabels) {\n scopedVars[`__y_label_${i}`] = {value: pLabels[i]};\n }\n\n if (this.panel.yLabel.labelTemplate != \"\") {\n yLabel = this.templateSrv.replace(this.panel.yLabel.labelTemplate, scopedVars)\n }\n\n targetPartials[yLabel] = pLabels\n }\n\n //reset if it already exists\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.pLabels = targetPartials[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 bucketMatrix.pLabels = targetPartials;\n return bucketMatrix;\n }\n}\n\nexport {\n StatusHeatmapCtrl, StatusHeatmapCtrl as PanelCtrl\n};\n"],"file":"module.js"} \ No newline at end of file diff --git a/dist/partials/options_editor.html b/dist/partials/options_editor.html index cd457bc..29cc025 100644 --- a/dist/partials/options_editor.html +++ b/dist/partials/options_editor.html @@ -215,6 +215,60 @@
+
Y-axis label
+
+ +
+
+ + +
+
+ + +
+
Pagination
+
+
Custom content
+ + +
+ + +
+
+
+
Items
@@ -24,9 +63,6 @@
-
- -
@@ -39,6 +75,10 @@
${__y_label} name of the time series (alias or legend in the query editor).
+ ${__y_label_trim} trimmed name of the time series (alias or legend in the query editor). +
+ ${__y_label_N} partial name of the time series (alias or legend in the query editor), only valid when custom y-label is enabled. +
${__url_time_range} refers to graph range in the form of 'from=...&to=...'.
${__value} refers to current bucket value or max value if multiple values mode is on. @@ -117,3 +157,6 @@
+ + + diff --git a/dist/statusmap_data.js b/dist/statusmap_data.js index 503ecbc..e148add 100644 --- a/dist/statusmap_data.js +++ b/dist/statusmap_data.js @@ -48,6 +48,8 @@ System.register([], function (_export, _context) { _defineProperty(this, "yLabel", ""); + _defineProperty(this, "pLabels", []); + _defineProperty(this, "x", 0); _defineProperty(this, "xid", 0); @@ -117,6 +119,8 @@ System.register([], function (_export, _context) { _defineProperty(this, "targets", []); + _defineProperty(this, "pLabels", {}); + _defineProperty(this, "rangeMs", 0); _defineProperty(this, "intervalMs", 0); diff --git a/dist/statusmap_data.js.map b/dist/statusmap_data.js.map index 8d1f35f..13f1d4b 100644 --- a/dist/statusmap_data.js.map +++ b/dist/statusmap_data.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/statusmap_data.ts"],"names":["Bucket","ts","from","to","value","values","push","length","BucketMatrix","yid","xid","buckets","hasData","targets","map","target","pagerChanged","name","BucketMatrixPager","m","bucketMatrix","enable","slice","pageSize","currentPage","me","rowLabel","num","defaultPageSize","Math","ceil","totalRows","last","hasNext","hasPrev"],"mappings":"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","sourcesContent":["// A holder of a group of values\nclass Bucket {\n // uniq id\n id: number = 0;\n // Array of values in this bucket\n values: any[] = [];\n columns: any[] = []; // From pr/86\n // a bucket has multiple values\n multipleValues: boolean = false;\n // a bucket has values that has no mapped color\n noColorDefined: boolean = false;\n // y label\n y: string = \"\";\n yLabel: string = \"\";\n // This value can be used to calculate a x coordinate on a graph\n x: number = 0;\n xid: number = 0;\n // a time range of this bucket\n from: number = 0;\n to: number = 0;\n // to and from relative to real \"from\"\n relFrom: number = 0;\n relTo: number = 0;\n\n mostRecent: boolean = false;\n\n // Saved minimum and maximum of values in this bucket\n minValue: number = 0;\n maxValue: number = 0;\n // A value if multiple values is not allowed\n value: number = 0;\n\n constructor() {\n }\n\n belong(ts: number): boolean {\n return ts >= this.from && ts <= this.to;\n }\n\n put(value: any) {\n this.values.push(value);\n }\n\n done() {\n // calculate min, max, value\n }\n\n isEmpty(): boolean {\n return this.values.length == 0;\n }\n\n}\n\n\nclass BucketMatrix {\n // buckets for each y label\n buckets: {[yLabel: string]: Bucket[]} = {};\n maxValue: number = 0;\n minValue: number = 0;\n multipleValues: boolean = false;\n noColorDefined: boolean = false;\n // a flag that indicate that buckets has stub values\n noDatapoints: boolean = false;\n\n // An array of row labels\n targets: string[] = [];\n rangeMs: number = 0;\n intervalMs: number = 0;\n\n xBucketSize: number = 0; // TODO remove: a transition from CardsData\n\n constructor() {\n }\n\n get(yid: string, xid: number): Bucket {\n if (yid in this.buckets) {\n if (xid in this.buckets[yid]) {\n return this.buckets[yid][xid];\n }\n }\n return new Bucket();\n }\n\n hasData(): boolean {\n let hasData = false;\n if (this.targets.length > 0) {\n this.targets.map((target:string) => {\n if (this.buckets[target].length > 0) {\n hasData = true;\n }\n });\n }\n return hasData;\n }\n}\n\nexport var pagerChanged:any = {name:'statusmap-pager-changed'};\n\nclass BucketMatrixPager {\n bucketMatrix: BucketMatrix;\n enable: boolean;\n defaultPageSize: number = -1;\n pageSize: number = -1;\n currentPage: number = 0;\n\n constructor() {\n let m = new BucketMatrix();\n\n this.bucketMatrix = m;\n }\n\n // An array of row labels for current page.\n targets(): string[] {\n if (!this.enable) {\n return this.bucketMatrix.targets;\n }\n\n return this.bucketMatrix.targets.slice(this.pageSize * this.currentPage, this.pageSize * (this.currentPage+1) );\n }\n\n buckets(): {[yLabel: string]: Bucket[]} {\n if (!this.enable) {\n return this.bucketMatrix.buckets;\n }\n\n let buckets: {[yLabel: string]: Bucket[]} = {}\n let me = this;\n\n this.targets().map(function (rowLabel) {\n buckets[rowLabel] = me.bucketMatrix.buckets[rowLabel];\n })\n\n return buckets;\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n }\n\n setCurrent(num: number): void {\n this.currentPage = num;\n }\n\n setDefaultPageSize(num: number): void {\n this.defaultPageSize = num;\n }\n\n setPageSize(num: number): void {\n this.pageSize = num;\n }\n\n pages(): number {\n return Math.ceil(this.totalRows() / this.pageSize);\n }\n\n totalRows(): number {\n return this.bucketMatrix.targets.length;\n }\n\n pageStartRow(): number {\n if (!this.enable) {\n return 1;\n }\n return (this.pageSize * this.currentPage) + 1;\n }\n\n pageEndRow(): number {\n if (!this.enable) {\n return this.totalRows();\n }\n\n let last = this.pageSize * (this.currentPage+1);\n if (last > this.totalRows()) {\n return this.totalRows();\n }\n\n return last;\n }\n\n hasNext(): boolean {\n if (!this.enable) {\n return false;\n }\n\n if ((this.currentPage+1)*this.pageSize >= this.totalRows()) {\n return false;\n }\n\n return true;\n // currentPage >= ctrl.bucketMatrix.targets.length/ctrl.pageSizeViewer - 1 || ctrl.numberOfPages == 0\n }\n\n hasPrev(): boolean {\n if (!this.enable) {\n return false;\n }\n\n return this.currentPage > 0;\n }\n\n switchToNext() {\n if (this.hasNext()) {\n this.currentPage = this.currentPage + 1;\n }\n }\n\n switchToPrev() {\n if (this.hasPrev()) {\n this.currentPage = this.currentPage - 1;\n }\n }\n\n}\n\nexport {Bucket, BucketMatrix, BucketMatrixPager };"],"file":"statusmap_data.js"} \ No newline at end of file +{"version":3,"sources":["../src/statusmap_data.ts"],"names":["Bucket","ts","from","to","value","values","push","length","BucketMatrix","yid","xid","buckets","hasData","targets","map","target","pagerChanged","name","BucketMatrixPager","m","bucketMatrix","enable","slice","pageSize","currentPage","me","rowLabel","num","defaultPageSize","Math","ceil","totalRows","last","hasNext","hasPrev"],"mappings":"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","sourcesContent":["// A holder of a group of values\nclass Bucket {\n // uniq id\n id: number = 0;\n // Array of values in this bucket\n values: any[] = [];\n columns: any[] = []; // From pr/86\n // a bucket has multiple values\n multipleValues: boolean = false;\n // a bucket has values that has no mapped color\n noColorDefined: boolean = false;\n // y label\n y: string = \"\";\n yLabel: string = \"\";\n pLabels: string[] = [];\n\n // This value can be used to calculate a x coordinate on a graph\n x: number = 0;\n xid: number = 0;\n // a time range of this bucket\n from: number = 0;\n to: number = 0;\n // to and from relative to real \"from\"\n relFrom: number = 0;\n relTo: number = 0;\n\n mostRecent: boolean = false;\n\n // Saved minimum and maximum of values in this bucket\n minValue: number = 0;\n maxValue: number = 0;\n // A value if multiple values is not allowed\n value: number = 0;\n\n constructor() {\n }\n\n belong(ts: number): boolean {\n return ts >= this.from && ts <= this.to;\n }\n\n put(value: any) {\n this.values.push(value);\n }\n\n done() {\n // calculate min, max, value\n }\n\n isEmpty(): boolean {\n return this.values.length == 0;\n }\n\n}\n\n\nclass BucketMatrix {\n // buckets for each y label\n buckets: {[yLabel: string]: Bucket[]} = {};\n maxValue: number = 0;\n minValue: number = 0;\n multipleValues: boolean = false;\n noColorDefined: boolean = false;\n // a flag that indicate that buckets has stub values\n noDatapoints: boolean = false;\n\n // An array of row labels\n targets: string[] = [];\n pLabels: {[target: string]: string[]} = {};\n rangeMs: number = 0;\n intervalMs: number = 0;\n\n xBucketSize: number = 0; // TODO remove: a transition from CardsData\n\n constructor() {\n }\n\n get(yid: string, xid: number): Bucket {\n if (yid in this.buckets) {\n if (xid in this.buckets[yid]) {\n return this.buckets[yid][xid];\n }\n }\n return new Bucket();\n }\n\n hasData(): boolean {\n let hasData = false;\n if (this.targets.length > 0) {\n this.targets.map((target:string) => {\n if (this.buckets[target].length > 0) {\n hasData = true;\n }\n });\n }\n return hasData;\n }\n}\n\nexport var pagerChanged:any = {name:'statusmap-pager-changed'};\n\nclass BucketMatrixPager {\n bucketMatrix: BucketMatrix;\n enable: boolean;\n defaultPageSize: number = -1;\n pageSize: number = -1;\n currentPage: number = 0;\n\n constructor() {\n let m = new BucketMatrix();\n\n this.bucketMatrix = m;\n }\n\n // An array of row labels for current page.\n targets(): string[] {\n if (!this.enable) {\n return this.bucketMatrix.targets;\n }\n\n return this.bucketMatrix.targets.slice(this.pageSize * this.currentPage, this.pageSize * (this.currentPage+1) );\n }\n\n buckets(): {[yLabel: string]: Bucket[]} {\n if (!this.enable) {\n return this.bucketMatrix.buckets;\n }\n\n let buckets: {[yLabel: string]: Bucket[]} = {}\n let me = this;\n\n this.targets().map(function (rowLabel) {\n buckets[rowLabel] = me.bucketMatrix.buckets[rowLabel];\n })\n\n return buckets;\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n }\n\n setCurrent(num: number): void {\n this.currentPage = num;\n }\n\n setDefaultPageSize(num: number): void {\n this.defaultPageSize = num;\n }\n\n setPageSize(num: number): void {\n this.pageSize = num;\n }\n\n pages(): number {\n return Math.ceil(this.totalRows() / this.pageSize);\n }\n\n totalRows(): number {\n return this.bucketMatrix.targets.length;\n }\n\n pageStartRow(): number {\n if (!this.enable) {\n return 1;\n }\n return (this.pageSize * this.currentPage) + 1;\n }\n\n pageEndRow(): number {\n if (!this.enable) {\n return this.totalRows();\n }\n\n let last = this.pageSize * (this.currentPage+1);\n if (last > this.totalRows()) {\n return this.totalRows();\n }\n\n return last;\n }\n\n hasNext(): boolean {\n if (!this.enable) {\n return false;\n }\n\n if ((this.currentPage+1)*this.pageSize >= this.totalRows()) {\n return false;\n }\n\n return true;\n // currentPage >= ctrl.bucketMatrix.targets.length/ctrl.pageSizeViewer - 1 || ctrl.numberOfPages == 0\n }\n\n hasPrev(): boolean {\n if (!this.enable) {\n return false;\n }\n\n return this.currentPage > 0;\n }\n\n switchToNext() {\n if (this.hasNext()) {\n this.currentPage = this.currentPage + 1;\n }\n }\n\n switchToPrev() {\n if (this.hasPrev()) {\n this.currentPage = this.currentPage - 1;\n }\n }\n\n}\n\nexport {Bucket, BucketMatrix, BucketMatrixPager };"],"file":"statusmap_data.js"} \ No newline at end of file diff --git a/dist/tooltip.js b/dist/tooltip.js index ac9fe11..7fe3229 100644 --- a/dist/tooltip.js +++ b/dist/tooltip.js @@ -152,6 +152,7 @@ System.register(["d3", "jquery", "lodash"], function (_export, _context) { var timestamp = bucket.to; var yLabel = bucket.yLabel; + var pLabels = bucket.pLabels; var value = bucket.value; var values = bucket.values; // TODO create option for this formatting. @@ -222,7 +223,14 @@ System.register(["d3", "jquery", "lodash"], function (_export, _context) { scopedVars["__url_time_range"] = { value: this.panelCtrl.retrieveTimeVar() - }; + }; //New vars based on partialLabels: + + for (var _i in pLabels) { + scopedVars["__y_label_".concat(_i)] = { + value: pLabels[_i] + }; + } + var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; @@ -242,10 +250,10 @@ System.register(["d3", "jquery", "lodash"], function (_export, _context) { var valueDateVar = void 0; - for (var _i = 0; _i < bucket.values.length; _i++) { - valueDateVar = "__value_".concat(_i, "_date"); + for (var _i2 = 0; _i2 < bucket.values.length; _i2++) { + valueDateVar = "__value_".concat(_i2, "_date"); scopedVars[valueDateVar] = { - value: this.dashboard.formatDate(+bucket.values[_i], dateFormat) + value: this.dashboard.formatDate(+bucket.values[_i2], dateFormat) }; } @@ -280,6 +288,11 @@ System.register(["d3", "jquery", "lodash"], function (_export, _context) { } } + if (this.panel.tooltip.showCustomContent) { + var customContent = this.panelCtrl.templateSrv.replace(this.panel.tooltip.customContent, scopedVars); + tooltipHtml += "
".concat(customContent, "
"); + } + tooltipHtml += _.join(_.map(items, function (v) { return "\n
\n \n
\n
"); }), "\n"); diff --git a/dist/tooltip.js.map b/dist/tooltip.js.map index fffa980..e88550c 100644 --- a/dist/tooltip.js.map +++ b/dist/tooltip.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/tooltip.ts"],"names":["d3","$","_","TOOLTIP_PADDING_X","TOOLTIP_PADDING_Y","DefaultValueDateFormat","StatusmapTooltip","elem","scope","dashboard","ctrl","panelCtrl","panel","panelElem","mouseOverBucket","originalFillColor","on","onMouseOver","bind","onMouseLeave","e","tooltip","show","data","isEmpty","add","move","destroy","select","append","attr","remove","tooltipFrozen","pos","removeFrozen","displayTooltip","moveRelative","panelRelY","frozen","cardEl","target","yid","xid","bucket","bucketMatrix","get","timestamp","to","yLabel","value","values","tooltipTimeFormat","time","formatDate","tooltipClose","tooltipHtml","color","mode","statuses","seriesFilterIndex","discreteExtraSeries","convertValueToTooltips","convertValuesToTooltips","statusTitle","length","join","map","v","showItems","items","JSON","parse","stringify","scopedVars","valueVar","i","trim","retrieveTimeVar","item","urlTemplate","link","dateFormat","valueDateFormat","valueDateVar","templateSrv","replace","urlToLowerCase","toLowerCase","label","urlText","truncate","urlIcon","useMax","multipleValues","dataWarnings","title","noColorDefined","badValues","getNotColoredValues","html","event","stopPropagation","node","tooltipWidth","clientWidth","tooltipHeight","clientHeight","left","pageX","top","pageY","window","innerWidth","pageYOffset","innerHeight","style","panelX","offset","panelY","panelWidth","width","panelHeight","height","tooltipLeft","tooltipTop"],"mappings":"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","sourcesContent":["import d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\n\nimport { StatusHeatmapCtrl } from './module';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 5;\n\n// TODO rename file to tooltip_ctrl.ts\n// TODO move DefaultValueDateFormat into tooltip.ts, as it used in several places (migration, partial and tooltip render)\nlet DefaultValueDateFormat = 'YYYY/MM/DD/HH_mm_ss';\n\nexport class StatusmapTooltip {\n tooltip: any;\n scope: any;\n dashboard: any;\n panelCtrl: StatusHeatmapCtrl;\n panel: any;\n panelElem: any;\n mouseOverBucket: any;\n originalFillColor: any;\n\n tooltipWidth: number;\n tooltipFrozen: any;\n\n constructor(elem: any, scope: any) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.panelElem = elem;\n this.mouseOverBucket = false;\n this.originalFillColor = null;\n\n elem.on(\"mouseover\", this.onMouseOver.bind(this));\n elem.on(\"mouseleave\", this.onMouseLeave.bind(this));\n }\n\n onMouseOver(e) {\n if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) { return; }\n\n if (!this.tooltip) {\n this.add();\n this.move(e, this.tooltip);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) { return; }\n\n this.move(e, this.tooltip);\n }\n\n add() {\n this.tooltip = d3.select(\"body\")\n .append(\"div\")\n .attr(\"class\", \"graph-tooltip statusmap-tooltip\");\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n }\n\n removeFrozen() {\n if (this.tooltipFrozen) {\n this.tooltipFrozen.remove();\n this.tooltipFrozen = null\n }\n }\n\n showFrozen(pos: any) {\n this.removeFrozen();\n this.tooltipFrozen = d3.select(this.panelElem[0])\n .append(\"div\")\n .attr(\"class\", \"graph-tooltip statusmap-tooltip statusmap-tooltip-frozen\");\n this.displayTooltip(pos, this.tooltipFrozen, true);\n this.moveRelative(pos, this.tooltipFrozen);\n }\n\n show(pos: any) {\n if (!this.panel.tooltip.show || !this.tooltip) { return; }\n\n // TODO support for shared tooltip mode\n if (pos.panelRelY) {\n return;\n }\n\n this.displayTooltip(pos, this.tooltip, false);\n\n this.move(pos, this.tooltip);\n }\n\n // Retrieve bucket and create html content inside tooltip’s div element.\n displayTooltip(pos: any, tooltip: any, frozen: boolean) {\n let cardEl = d3.select(pos.target);\n let yid = cardEl.attr('yid');\n let xid = cardEl.attr('xid');\n let bucket = this.panelCtrl.bucketMatrix.get(yid, xid); // TODO string-to-number conversion for xid\n if (!bucket || bucket.isEmpty()) {\n this.destroy();\n return;\n }\n\n let timestamp = bucket.to;\n let yLabel = bucket.yLabel;\n let value = bucket.value;\n let values = bucket.values;\n // TODO create option for this formatting.\n let tooltipTimeFormat:string = 'YYYY-MM-DD HH:mm:ss';\n let time: Date = this.dashboard.formatDate(+timestamp, tooltipTimeFormat);\n\n // Close button for the frozen tooltip.\n let tooltipClose:string = ``;\n if (frozen) {\n tooltipClose = `\n\n \n\n`;\n }\n\n let tooltipHtml:string = `
${time}${tooltipClose}
`;\n\n if (this.panel.color.mode === 'discrete') {\n let statuses;\n if (this.panel.seriesFilterIndex >= 0) {\n statuses = this.panelCtrl.discreteExtraSeries.convertValueToTooltips(value);\n } else {\n statuses = this.panelCtrl.discreteExtraSeries.convertValuesToTooltips(values);\n }\n \n let statusTitle:string = \"status:\";\n if (statuses.length > 1) {\n statusTitle = \"statuses:\";\n }\n tooltipHtml += `\n
\n name: ${yLabel}\n
\n ${statusTitle}\n
    \n ${_.join(_.map(statuses, v => `
  • ${v.tooltip}
  • `), \"\")}\n
\n
`;\n } else {\n if (values.length === 1) {\n tooltipHtml += `
\n name: ${yLabel}
\n value: ${value}
\n
`;\n } else {\n tooltipHtml += `
\n name: ${yLabel}
\n values:\n
    \n ${_.join(_.map(values, v => `
  • ${v}
  • `), \"\")}\n
\n
`;\n }\n }\n\n tooltipHtml += `
`;\n\n if (this.panel.tooltip.showItems) {\n // Additional information: urls, etc.\n // Clone additional items\n let items: any = JSON.parse(JSON.stringify(this.panel.tooltip.items));\n\n let scopedVars = {};\n\n let valueVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueVar = `__value_${i}`;\n scopedVars[valueVar] = {value: bucket.values[i] };\n }\n scopedVars[`__value`] = {value: bucket.value};\n scopedVars[`__y_label`] = {value: yLabel};\n scopedVars[`__y_label_trim`] = {value: yLabel.trim()};\n // Grafana 7.0 compatible\n scopedVars[`__url_time_range`] = {value: this.panelCtrl.retrieveTimeVar()};\n\n for (let item of items) {\n if (_.isEmpty(item.urlTemplate)) {\n item.link = \"#\";\n } else {\n let dateFormat = item.valueDateFormat;\n if (dateFormat == '') {\n dateFormat = DefaultValueDateFormat;\n }\n let valueDateVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueDateVar = `__value_${i}_date`;\n scopedVars[valueDateVar] = {value: this.dashboard.formatDate(+bucket.values[i], dateFormat)};\n }\n scopedVars[`__value_date`] = {value: this.dashboard.formatDate(+bucket.value, dateFormat)};\n\n item.link = this.panelCtrl.templateSrv.replace(item.urlTemplate, scopedVars)\n\n // Force lowercase for link\n if (item.urlToLowerCase) {\n item.link = item.link.toLowerCase();\n }\n }\n\n item.label = item.urlText;\n if (_.isEmpty(item.label)) {\n item.label = _.isEmpty(item.urlTemplate) ? \"Empty URL\" : _.truncate(item.link);\n }\n }\n\n tooltipHtml += _.join(_.map(items, v => `\n
\n \n
\n
`), \"\\n\");\n\n }\n\n // Ambiguous state: there multiple values in bucket!\n // TODO rename useMax to expectMultipleValues\n if (!this.panel.useMax && bucket.multipleValues) {\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.multipleValues.title}
`;\n }\n\n // Discrete mode errors\n if (this.panel.color.mode === 'discrete') {\n if (bucket.noColorDefined) {\n let badValues = this.panelCtrl.discreteExtraSeries.getNotColoredValues(values);\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.noColorDefined.title}\n
not colored values:\n
    \n ${_.join(_.map(badValues, v => `
  • ${v}
  • `), \"\")}\n
\n
`;\n }\n }\n\n tooltip.html(tooltipHtml);\n\n // Assign mouse event handlers for \"frozen\" tooltip.\n if (frozen) {\n // Stop propagation mouse events up to parents to allow interaction with frozen tooltip’s elements.\n tooltip\n .on(\"click\", function(){d3.event.stopPropagation(); })\n .on(\"mousedown\", function(){d3.event.stopPropagation(); })\n .on(\"mouseup\", function(){d3.event.stopPropagation(); });\n\n // Activate close button\n tooltip.select(\"a.tooltip-close\")\n .on(\"click\", this.removeFrozen.bind(this));\n }\n }\n\n // Move tooltip as absolute positioned element.\n move(pos, tooltip) {\n if (!tooltip) { return; }\n\n let elem = $(tooltip.node())[0];\n let tooltipWidth = elem.clientWidth;\n this.tooltipWidth = tooltipWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX + TOOLTIP_PADDING_X;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth + 40 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return tooltip\n .style(\"left\", left + \"px\")\n .style(\"top\", top + \"px\");\n }\n\n // Move tooltip relative to svg element of panel.\n moveRelative(pos, tooltip) {\n if (!tooltip) { return; }\n\n let panelX = pos.pageX - this.panelElem.offset().left;\n let panelY = pos.pageY - this.panelElem.offset().top;\n let panelWidth = this.panelElem.width();\n let panelHeight = this.panelElem.height();\n\n // 'position: relative' sets tooltip’s width to 100% of panel element.\n // Restore width from floating tooltip and add more space for 'Close' button.\n let tooltipWidth = this.tooltipWidth + 25;\n\n // Left property is clamped so tooltip stays inside panel bound box.\n let tooltipLeft = panelX + TOOLTIP_PADDING_X;\n if (tooltipLeft + tooltipWidth > panelWidth) {\n tooltipLeft = panelWidth - tooltipWidth;\n }\n if (tooltipLeft < 0 ) {\n tooltipLeft = 0;\n }\n\n // Frozen tooltip’s root element is appended next to panel’s svg element,\n // so top property is adjusted to move tooltip’s root element\n // up to the mouse pointer position.\n let tooltipTop = -(panelHeight - panelY + TOOLTIP_PADDING_Y);\n\n return tooltip\n .style(\"left\", tooltipLeft + \"px\")\n .style(\"top\", tooltipTop + \"px\")\n .style(\"width\", tooltipWidth + \"px\");\n }\n\n\n}\n"],"file":"tooltip.js"} \ No newline at end of file +{"version":3,"sources":["../src/tooltip.ts"],"names":["d3","$","_","TOOLTIP_PADDING_X","TOOLTIP_PADDING_Y","DefaultValueDateFormat","StatusmapTooltip","elem","scope","dashboard","ctrl","panelCtrl","panel","panelElem","mouseOverBucket","originalFillColor","on","onMouseOver","bind","onMouseLeave","e","tooltip","show","data","isEmpty","add","move","destroy","select","append","attr","remove","tooltipFrozen","pos","removeFrozen","displayTooltip","moveRelative","panelRelY","frozen","cardEl","target","yid","xid","bucket","bucketMatrix","get","timestamp","to","yLabel","pLabels","value","values","tooltipTimeFormat","time","formatDate","tooltipClose","tooltipHtml","color","mode","statuses","seriesFilterIndex","discreteExtraSeries","convertValueToTooltips","convertValuesToTooltips","statusTitle","length","join","map","v","showItems","items","JSON","parse","stringify","scopedVars","valueVar","i","trim","retrieveTimeVar","item","urlTemplate","link","dateFormat","valueDateFormat","valueDateVar","templateSrv","replace","urlToLowerCase","toLowerCase","label","urlText","truncate","showCustomContent","customContent","urlIcon","useMax","multipleValues","dataWarnings","title","noColorDefined","badValues","getNotColoredValues","html","event","stopPropagation","node","tooltipWidth","clientWidth","tooltipHeight","clientHeight","left","pageX","top","pageY","window","innerWidth","pageYOffset","innerHeight","style","panelX","offset","panelY","panelWidth","width","panelHeight","height","tooltipLeft","tooltipTop"],"mappings":"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","sourcesContent":["import d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\n\nimport { StatusHeatmapCtrl } from './module';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 5;\n\n// TODO rename file to tooltip_ctrl.ts\n// TODO move DefaultValueDateFormat into tooltip.ts, as it used in several places (migration, partial and tooltip render)\nlet DefaultValueDateFormat = 'YYYY/MM/DD/HH_mm_ss';\n\nexport class StatusmapTooltip {\n tooltip: any;\n scope: any;\n dashboard: any;\n panelCtrl: StatusHeatmapCtrl;\n panel: any;\n panelElem: any;\n mouseOverBucket: any;\n originalFillColor: any;\n\n tooltipWidth: number;\n tooltipFrozen: any;\n\n constructor(elem: any, scope: any) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.panelElem = elem;\n this.mouseOverBucket = false;\n this.originalFillColor = null;\n\n elem.on(\"mouseover\", this.onMouseOver.bind(this));\n elem.on(\"mouseleave\", this.onMouseLeave.bind(this));\n }\n\n onMouseOver(e) {\n if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) { return; }\n\n if (!this.tooltip) {\n this.add();\n this.move(e, this.tooltip);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) { return; }\n\n this.move(e, this.tooltip);\n }\n\n add() {\n this.tooltip = d3.select(\"body\")\n .append(\"div\")\n .attr(\"class\", \"graph-tooltip statusmap-tooltip\");\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n }\n\n removeFrozen() {\n if (this.tooltipFrozen) {\n this.tooltipFrozen.remove();\n this.tooltipFrozen = null\n }\n }\n\n showFrozen(pos: any) {\n this.removeFrozen();\n this.tooltipFrozen = d3.select(this.panelElem[0])\n .append(\"div\")\n .attr(\"class\", \"graph-tooltip statusmap-tooltip statusmap-tooltip-frozen\");\n this.displayTooltip(pos, this.tooltipFrozen, true);\n this.moveRelative(pos, this.tooltipFrozen);\n }\n\n show(pos: any) {\n if (!this.panel.tooltip.show || !this.tooltip) { return; }\n\n // TODO support for shared tooltip mode\n if (pos.panelRelY) {\n return;\n }\n\n this.displayTooltip(pos, this.tooltip, false);\n\n this.move(pos, this.tooltip);\n }\n\n // Retrieve bucket and create html content inside tooltip’s div element.\n displayTooltip(pos: any, tooltip: any, frozen: boolean) {\n let cardEl = d3.select(pos.target);\n let yid = cardEl.attr('yid');\n let xid = cardEl.attr('xid');\n let bucket = this.panelCtrl.bucketMatrix.get(yid, xid); // TODO string-to-number conversion for xid\n if (!bucket || bucket.isEmpty()) {\n this.destroy();\n return;\n }\n\n let timestamp = bucket.to;\n let yLabel = bucket.yLabel;\n let pLabels = bucket.pLabels;\n let value = bucket.value;\n let values = bucket.values;\n // TODO create option for this formatting.\n let tooltipTimeFormat:string = 'YYYY-MM-DD HH:mm:ss';\n let time: Date = this.dashboard.formatDate(+timestamp, tooltipTimeFormat);\n\n // Close button for the frozen tooltip.\n let tooltipClose:string = ``;\n if (frozen) {\n tooltipClose = `\n\n \n\n`;\n }\n\n let tooltipHtml:string = `
${time}${tooltipClose}
`;\n\n if (this.panel.color.mode === 'discrete') {\n let statuses;\n if (this.panel.seriesFilterIndex >= 0) {\n statuses = this.panelCtrl.discreteExtraSeries.convertValueToTooltips(value);\n } else {\n statuses = this.panelCtrl.discreteExtraSeries.convertValuesToTooltips(values);\n }\n \n let statusTitle:string = \"status:\";\n if (statuses.length > 1) {\n statusTitle = \"statuses:\";\n }\n tooltipHtml += `\n
\n name: ${yLabel}\n
\n ${statusTitle}\n
    \n ${_.join(_.map(statuses, v => `
  • ${v.tooltip}
  • `), \"\")}\n
\n
`;\n } else {\n if (values.length === 1) {\n tooltipHtml += `
\n name: ${yLabel}
\n value: ${value}
\n
`;\n } else {\n tooltipHtml += `
\n name: ${yLabel}
\n values:\n
    \n ${_.join(_.map(values, v => `
  • ${v}
  • `), \"\")}\n
\n
`;\n }\n }\n\n tooltipHtml += `
`;\n\n if (this.panel.tooltip.showItems) {\n // Additional information: urls, etc.\n // Clone additional items\n let items: any = JSON.parse(JSON.stringify(this.panel.tooltip.items));\n\n let scopedVars = {};\n\n let valueVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueVar = `__value_${i}`;\n scopedVars[valueVar] = {value: bucket.values[i] };\n }\n scopedVars[`__value`] = {value: bucket.value};\n scopedVars[`__y_label`] = {value: yLabel};\n scopedVars[`__y_label_trim`] = {value: yLabel.trim()};\n // Grafana 7.0 compatible\n scopedVars[`__url_time_range`] = {value: this.panelCtrl.retrieveTimeVar()};\n\n //New vars based on partialLabels:\n for (let i in pLabels) {\n scopedVars[`__y_label_${i}`] = {value: pLabels[i]};\n }\n\n for (let item of items) {\n if (_.isEmpty(item.urlTemplate)) {\n item.link = \"#\";\n } else {\n let dateFormat = item.valueDateFormat;\n if (dateFormat == '') {\n dateFormat = DefaultValueDateFormat;\n }\n let valueDateVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueDateVar = `__value_${i}_date`;\n scopedVars[valueDateVar] = {value: this.dashboard.formatDate(+bucket.values[i], dateFormat)};\n }\n scopedVars[`__value_date`] = {value: this.dashboard.formatDate(+bucket.value, dateFormat)};\n\n item.link = this.panelCtrl.templateSrv.replace(item.urlTemplate, scopedVars)\n\n // Force lowercase for link\n if (item.urlToLowerCase) {\n item.link = item.link.toLowerCase();\n }\n }\n\n item.label = item.urlText;\n if (_.isEmpty(item.label)) {\n item.label = _.isEmpty(item.urlTemplate) ? \"Empty URL\" : _.truncate(item.link);\n }\n }\n\n if (this.panel.tooltip.showCustomContent) {\n let customContent: string = this.panelCtrl.templateSrv.replace(this.panel.tooltip.customContent, scopedVars)\n tooltipHtml += `
${customContent}
`\n }\n\n tooltipHtml += _.join(_.map(items, v => `\n
\n \n
\n
`), \"\\n\");\n\n }\n\n // Ambiguous state: there multiple values in bucket!\n // TODO rename useMax to expectMultipleValues\n if (!this.panel.useMax && bucket.multipleValues) {\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.multipleValues.title}
`;\n }\n\n // Discrete mode errors\n if (this.panel.color.mode === 'discrete') {\n if (bucket.noColorDefined) {\n let badValues = this.panelCtrl.discreteExtraSeries.getNotColoredValues(values);\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.noColorDefined.title}\n
not colored values:\n
    \n ${_.join(_.map(badValues, v => `
  • ${v}
  • `), \"\")}\n
\n
`;\n }\n }\n\n tooltip.html(tooltipHtml);\n\n // Assign mouse event handlers for \"frozen\" tooltip.\n if (frozen) {\n // Stop propagation mouse events up to parents to allow interaction with frozen tooltip’s elements.\n tooltip\n .on(\"click\", function(){d3.event.stopPropagation(); })\n .on(\"mousedown\", function(){d3.event.stopPropagation(); })\n .on(\"mouseup\", function(){d3.event.stopPropagation(); });\n\n // Activate close button\n tooltip.select(\"a.tooltip-close\")\n .on(\"click\", this.removeFrozen.bind(this));\n }\n }\n\n // Move tooltip as absolute positioned element.\n move(pos, tooltip) {\n if (!tooltip) { return; }\n\n let elem = $(tooltip.node())[0];\n let tooltipWidth = elem.clientWidth;\n this.tooltipWidth = tooltipWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX + TOOLTIP_PADDING_X;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth + 40 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return tooltip\n .style(\"left\", left + \"px\")\n .style(\"top\", top + \"px\");\n }\n\n // Move tooltip relative to svg element of panel.\n moveRelative(pos, tooltip) {\n if (!tooltip) { return; }\n\n let panelX = pos.pageX - this.panelElem.offset().left;\n let panelY = pos.pageY - this.panelElem.offset().top;\n let panelWidth = this.panelElem.width();\n let panelHeight = this.panelElem.height();\n\n // 'position: relative' sets tooltip’s width to 100% of panel element.\n // Restore width from floating tooltip and add more space for 'Close' button.\n let tooltipWidth = this.tooltipWidth + 25;\n\n // Left property is clamped so tooltip stays inside panel bound box.\n let tooltipLeft = panelX + TOOLTIP_PADDING_X;\n if (tooltipLeft + tooltipWidth > panelWidth) {\n tooltipLeft = panelWidth - tooltipWidth;\n }\n if (tooltipLeft < 0 ) {\n tooltipLeft = 0;\n }\n\n // Frozen tooltip’s root element is appended next to panel’s svg element,\n // so top property is adjusted to move tooltip’s root element\n // up to the mouse pointer position.\n let tooltipTop = -(panelHeight - panelY + TOOLTIP_PADDING_Y);\n\n return tooltip\n .style(\"left\", tooltipLeft + \"px\")\n .style(\"top\", tooltipTop + \"px\")\n .style(\"width\", tooltipWidth + \"px\");\n }\n\n\n}\n"],"file":"tooltip.js"} \ No newline at end of file diff --git a/src/module.ts b/src/module.ts index 7731add..819592c 100644 --- a/src/module.ts +++ b/src/module.ts @@ -125,11 +125,18 @@ class StatusHeatmapCtrl extends MetricsPanelCtrl { show: true, freezeOnClick: true, showItems: false, - items: [] // see tooltip_editor.ts + items: [], // see tooltip_editor.ts + showExtraInfo: false, + extraInfo: "", }, legend: { show: true }, + yLabel: { + usingSplitLabel: false, + delimiter: "", + labelTemplate: "", + }, // how null points should be handled nullPointMode: 'as empty', yAxisSort: 'metrics', @@ -526,6 +533,7 @@ class StatusHeatmapCtrl extends MetricsPanelCtrl { } let targetIndex: {[target: string]: number[]} = {}; + let targetPartials: {[target: string]: string[]} = {}; // Group indicies of elements in data by target (y label). @@ -535,7 +543,29 @@ class StatusHeatmapCtrl extends MetricsPanelCtrl { //}); data.map((queryResult: any, i: number) => { + // Init yLabel as the query target let yLabel = queryResult.target; + + // Check if there is some labelTemplate configured + if (this.panel.yLabel.usingSplitLabel && this.panel.yLabel.delimiter != "" ) { + let pLabels = queryResult.target.split(this.panel.yLabel.delimiter); + + // Load all possible values as scoped vars and load them into targetPartials + // to be used on different components as Bucket and BucketMatrix props + let scopedVars = [] + scopedVars[`__y_label`] = {value: yLabel} + for (let i in pLabels) { + scopedVars[`__y_label_${i}`] = {value: pLabels[i]}; + } + + if (this.panel.yLabel.labelTemplate != "") { + yLabel = this.templateSrv.replace(this.panel.yLabel.labelTemplate, scopedVars) + } + + targetPartials[yLabel] = pLabels + } + + //reset if it already exists if (!targetIndex.hasOwnProperty(yLabel)) { targetIndex[yLabel] = []; } @@ -618,6 +648,7 @@ class StatusHeatmapCtrl extends MetricsPanelCtrl { while (bucketFrom >= 0) { let b = new Bucket(); b.yLabel = target; + b.pLabels = targetPartials[target] b.relTo = lastTs - idx*intervalMs; b.relFrom = lastTs - ((idx+1) * intervalMs); b.to = b.relTo+from; @@ -681,6 +712,7 @@ class StatusHeatmapCtrl extends MetricsPanelCtrl { //console.log ("bucketMatrix with values: ", bucketMatrix); bucketMatrix.targets = targetKeys; + bucketMatrix.pLabels = targetPartials; return bucketMatrix; } } diff --git a/src/partials/options_editor.html b/src/partials/options_editor.html index cd457bc..29cc025 100644 --- a/src/partials/options_editor.html +++ b/src/partials/options_editor.html @@ -215,6 +215,60 @@
+
Y-axis label
+
+ +
+
+ + +
+
+ + +
+
Pagination
+
+
Custom content
+ + +
+ + +
+
+
+
Items
@@ -24,9 +63,6 @@
-
-
-
@@ -39,6 +75,10 @@
${__y_label} name of the time series (alias or legend in the query editor).
+ ${__y_label_trim} trimmed name of the time series (alias or legend in the query editor). +
+ ${__y_label_N} partial name of the time series (alias or legend in the query editor), only valid when custom y-label is enabled. +
${__url_time_range} refers to graph range in the form of 'from=...&to=...'.
${__value} refers to current bucket value or max value if multiple values mode is on. @@ -117,3 +157,6 @@
+
+ +
diff --git a/src/statusmap_data.ts b/src/statusmap_data.ts index 65c6f2b..c19cf02 100644 --- a/src/statusmap_data.ts +++ b/src/statusmap_data.ts @@ -12,6 +12,8 @@ class Bucket { // y label y: string = ""; yLabel: string = ""; + pLabels: string[] = []; + // This value can be used to calculate a x coordinate on a graph x: number = 0; xid: number = 0; @@ -64,6 +66,7 @@ class BucketMatrix { // An array of row labels targets: string[] = []; + pLabels: {[target: string]: string[]} = {}; rangeMs: number = 0; intervalMs: number = 0; diff --git a/src/tooltip.ts b/src/tooltip.ts index 2d2c38a..16805ba 100644 --- a/src/tooltip.ts +++ b/src/tooltip.ts @@ -112,6 +112,7 @@ export class StatusmapTooltip { let timestamp = bucket.to; let yLabel = bucket.yLabel; + let pLabels = bucket.pLabels; let value = bucket.value; let values = bucket.values; // TODO create option for this formatting. @@ -188,6 +189,11 @@ export class StatusmapTooltip { // Grafana 7.0 compatible scopedVars[`__url_time_range`] = {value: this.panelCtrl.retrieveTimeVar()}; + //New vars based on partialLabels: + for (let i in pLabels) { + scopedVars[`__y_label_${i}`] = {value: pLabels[i]}; + } + for (let item of items) { if (_.isEmpty(item.urlTemplate)) { item.link = "#"; @@ -217,6 +223,11 @@ export class StatusmapTooltip { } } + if (this.panel.tooltip.showCustomContent) { + let customContent: string = this.panelCtrl.templateSrv.replace(this.panel.tooltip.customContent, scopedVars) + tooltipHtml += `
${customContent}
` + } + tooltipHtml += _.join(_.map(items, v => `