diff --git a/dist/rendering.js b/dist/rendering.js index 431aa55..0c77222 100644 --- a/dist/rendering.js +++ b/dist/rendering.js @@ -624,8 +624,8 @@ System.register(["lodash", "jquery", "moment", "app/core/utils/kbn", "app/core/c } else if (this.panel.color.mode === 'spectrum') { return this.colorScale(b.value); } else if (this.panel.color.mode === 'discrete') { - if (this.panel.seriesFilterIndex != -1 || this.panel.seriesFilterIndex != null) { - return this.ctrl.discreteExtraSeries.getBucketColorSingle(b.values[this.panel.seriesFilterIndex]); + if (this.panel.seriesFilterIndex != null && this.panel.seriesFilterIndex != -1) { + return this.ctrl.discreteExtraSeries.getBucketColorSingle(d.values[this.panel.seriesFilterIndex]); } else { return this.ctrl.discreteExtraSeries.getBucketColor(b.values); } diff --git a/dist/rendering.js.map b/dist/rendering.js.map index 028f283..cee9dd0 100644 --- a/dist/rendering.js.map +++ b/dist/rendering.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/rendering.ts"],"names":["rendering","scope","elem","attrs","ctrl","StatusmapRenderer","grafanaTimeFormat","ticks","min","max","range","secPerTick","oneDay","oneYear","_","$","moment","kbn","appEvents","contextSrv","d3","d3ScaleChromatic","StatusmapTooltip","StatusHeatmapTooltipExtraSeries","AnnotationTooltip","MIN_CARD_SIZE","CARD_H_SPACING","CARD_V_SPACING","CARD_ROUND","DATA_RANGE_WIDING_FACTOR","DEFAULT_X_TICK_SIZE_PX","DEFAULT_Y_TICK_SIZE_PX","X_AXIS_TICK_PADDING","Y_AXIS_TICK_PADDING","MIN_SELECTION_WIDTH","Statusmap","from","to","$heatmap","find","tooltip","tooltipExtraSeries","annotationTooltip","yOffset","selection","active","x1","x2","padding","left","right","top","bottom","margin","events","on","onRender","bind","tickValueFormatter","onGraphHover","onGraphHoverClear","onMouseDown","onMouseMove","onMouseLeave","onMouseClick","clearCrosshair","event","drawSharedCrosshair","pos","render","renderingCompleted","height","panel","row","isString","parseInt","replace","legend","show","css","e","axisText","selectAll","nodes","maxTextWidth","map","text","getBBox","width","Math","ceil","axisLine","select","empty","axisLinePosition","parseFloat","attr","canvasWidth","xScale","scaleTime","domain","timeRange","xGridSize","chartWidth","grafanaTimeFormatter","timeFormat","dashboardTimeZone","dashboard","getTimezone","utcFormat","xAxis","axisBottom","tickFormat","tickPadding","tickSize","chartHeight","posY","chartTop","posX","yAxisWidth","heatmap","append","call","remove","step","length","push","i","scaleOrdinal","bucketMatrix","targets","yAxisSort","sort","a","b","localeCompare","ignorePunctuation","numeric","yAxisScale","getYAxisScale","yScale","getYScale","yAxis","axisLeft","tickValues","tickSizeInner","getYAxisWidth","tickInterval","y_widing","dataRangeWidingFactor","y_min","y_max","floor","decimals","scaledDecimals","format","value","valueFormats","heatmap_elem","chartBottom","cardHSpacing","cards","cardVSpacing","cardRound","yGridSize","cardHeight","addYAxis","xBucketSize","cardWidth","addXAxis","xAxisHeight","getXAxisHeight","style","maxValue","color","minValue","mode","colorScale","getColorScale","setOpacityScale","data","enter","target","buckets","id","xid","yLabel","getCardX","getCardWidth","getCardY","getCardHeight","isEmpty","getCardColor","getCardOpacity","$cards","mouseOverBucket","highlightCard","resetCardHighLight","_renderAnnotations","emit","highlightColor","darker","strokeColor","brighter","current_card","originalFillColor","toString","colorScheme","colorSchemes","colorInterpolator","colorScaleInverted","invert","user","lightTheme","start","end","scaleSequential","opacityScale","scaleLinear","scalePow","exponent","x","rightX","relTo","rangeMs","cx","w","cutted_width","ys","y","h","cardColor","seriesFilterIndex","discreteExtraSeries","getBucketColorSingle","values","getBucketColor","nullPointMode","elemOffset","offset","clientX","clientY","getEventOffset","mouseUpHandler","onMouseUp","document","one","unbind","selectionRange","abs","timeFrom","timeTo","timeSrv","setTime","utc","clearSelection","relatedTarget","className","destroy","limitSelection","offsetX","drawSelection","emitGraphHoverEvent","drawCrosshair","usingUrl","valueOf","pageX","pageY","y1","panelRelY","offsetY","posX1","posX2","selectionX","selectionWidth","position","graphTooltip","setElementHeight","addStatusmapCanvas","noDatapoints","addStatusmap","annotations","annoData","d","time","source","anno","iconColor","join","$ticks","mouseOverAnnotationTick"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport $ from 'jquery';\nimport moment from 'moment';\nimport kbn from 'app/core/utils/kbn';\nimport {appEvents, contextSrv} from 'app/core/core';\nimport {tickStep, getScaledDecimals, getFlotTickSize} from 'app/core/utils/ticks';\nimport * as d3 from 'd3';\nimport * as d3ScaleChromatic from './libs/d3-scale-chromatic/index';\nimport {StatusmapTooltip} from './tooltip';\nimport {StatusHeatmapTooltipExtraSeries} from './tooltipextraseries';\nimport {AnnotationTooltip} from './annotations';\nimport { Bucket, BucketMatrix } from './statusmap_data';\nimport { StatusHeatmapCtrl } from './module';\n\nlet MIN_CARD_SIZE = 5,\n CARD_H_SPACING = 2,\n CARD_V_SPACING = 2,\n CARD_ROUND = 0,\n DATA_RANGE_WIDING_FACTOR = 1.2,\n DEFAULT_X_TICK_SIZE_PX = 100,\n DEFAULT_Y_TICK_SIZE_PX = 50,\n X_AXIS_TICK_PADDING = 10,\n Y_AXIS_TICK_PADDING = 5,\n MIN_SELECTION_WIDTH = 2;\n\nexport default function rendering(scope: any, elem: any, attrs: any, ctrl: any) {\n return new StatusmapRenderer(scope, elem, attrs, ctrl);\n}\n\nclass Statusmap {\n $svg: any;\n svg: any;\n bucketMatrix: BucketMatrix;\n\n timeRange: {from: number, to: number} = {from:0, to:0};\n \n constructor() {\n\n }\n}\n\nexport class StatusmapRenderer {\n width: number = 0;\n height: number = 0;\n yScale: any;\n xScale: any;\n chartWidth: number = 0;\n chartHeight: number = 0;\n chartTop: number = 0;\n chartBottom: number = 0;\n yAxisWidth: number = 0;\n xAxisHeight: number = 0;\n cardVSpacing: number = 0;\n cardHSpacing: number = 0;\n cardRound: number = 0;\n cardWidth: number = 0;\n cardHeight: number = 0;\n colorScale: any;\n opacityScale: any;\n mouseUpHandler: any;\n xGridSize: number = 0;\n yGridSize: number = 0;\n\n bucketMatrix: BucketMatrix;\n panel: any;\n $heatmap: any;\n tooltip: StatusmapTooltip;\n tooltipExtraSeries:StatusHeatmapTooltipExtraSeries;\n annotationTooltip: AnnotationTooltip;\n heatmap: any;\n timeRange: any;\n\n yOffset: number;\n selection: any;\n padding: any;\n margin: any;\n dataRangeWidingFactor: number = DATA_RANGE_WIDING_FACTOR;\n\n constructor(private scope: any, private elem: any, attrs: any, private ctrl: StatusHeatmapCtrl) {\n // $heatmap is JQuery object, but heatmap is D3\n this.$heatmap = this.elem.find('.statusmap-panel');\n this.tooltip = new StatusmapTooltip(this.$heatmap, this.scope);\n this.tooltipExtraSeries = new StatusHeatmapTooltipExtraSeries(this.$heatmap, this.scope);\n this.annotationTooltip = new AnnotationTooltip(this.$heatmap, this.scope);\n\n this.yOffset = 0;\n\n this.selection = {\n active: false,\n x1: -1,\n x2: -1,\n };\n\n this.padding = { left: 0, right: 0, top: 0, bottom: 0 };\n this.margin = { left: 25, right: 15, top: 10, bottom: 20 };\n\n this.ctrl.events.on('render', this.onRender.bind(this));\n\n this.ctrl.tickValueFormatter = this.tickValueFormatter.bind(this);\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n // Shared crosshair and tooltip this.empty = true;\n\n appEvents.on('graph-hover', this.onGraphHover.bind(this), this.scope);\n\n appEvents.on('graph-hover-clear', this.onGraphHoverClear.bind(this), this.scope);\n\n // Register selection listeners\n this.$heatmap.on('mousedown', this.onMouseDown.bind(this));\n this.$heatmap.on('mousemove', this.onMouseMove.bind(this));\n this.$heatmap.on('mouseleave', this.onMouseLeave.bind(this));\n this.$heatmap.on('click', this.onMouseClick.bind(this));\n }\n\n onGraphHoverClear() {\n this.clearCrosshair();\n }\n\n onGraphHover(event: { pos: any }) {\n this.drawSharedCrosshair(event.pos);\n }\n\n onRender() {\n this.render();\n this.ctrl.renderingCompleted();\n }\n\n\n setElementHeight(): boolean {\n try {\n var height = this.ctrl.height || this.panel.height || this.ctrl.row.height;\n if (_.isString(height)) {\n height = parseInt(height.replace('px', ''), 10);\n }\n\n height -= this.panel.legend.show ? 32 : 10; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n\n this.$heatmap.css('height', height + 'px');\n\n return true;\n } catch (e) { // IE throws errors sometimes\n return false;\n }\n }\n\n getYAxisWidth(elem: any): number {\n const axisText = elem.selectAll(\".axis-y text\").nodes();\n const maxTextWidth = _.max(_.map(axisText, text => {\n // Use SVG getBBox method\n return text.getBBox().width;\n }));\n\n return Math.ceil(maxTextWidth);\n }\n\n getXAxisHeight(elem: any): number {\n let axisLine = elem.select(\".axis-x line\");\n if (!axisLine.empty()) {\n let axisLinePosition = parseFloat(elem.select(\".axis-x line\").attr(\"y2\"));\n let canvasWidth = parseFloat(elem.attr(\"height\"));\n return canvasWidth - axisLinePosition;\n } else {\n // Default height\n return 30;\n }\n }\n\n addXAxis() {\n // Scale timestamps to cards centers\n //this.scope.xScale = this.xScale = d3.scaleTime()\n // .domain([this.timeRange.from, this.timeRange.to])\n // .range([this.xGridSize/2, this.chartWidth-this.xGridSize/2]);\n // Buckets without the most recent\n this.scope.xScale = this.xScale = d3.scaleTime()\n .domain([this.timeRange.from, this.timeRange.to])\n .range([this.xGridSize/2, this.chartWidth-this.xGridSize/2]);\n\n let ticks = this.chartWidth / DEFAULT_X_TICK_SIZE_PX;\n let grafanaTimeFormatter = grafanaTimeFormat(ticks, this.timeRange.from, this.timeRange.to);\n let timeFormat;\n let dashboardTimeZone = this.ctrl.dashboard.getTimezone();\n if (dashboardTimeZone === 'utc') {\n timeFormat = d3.utcFormat(grafanaTimeFormatter);\n } else {\n timeFormat = d3.timeFormat(grafanaTimeFormatter);\n }\n\n let xAxis = d3\n .axisBottom(this.xScale)\n .ticks(ticks)\n .tickFormat(timeFormat)\n .tickPadding(X_AXIS_TICK_PADDING)\n .tickSize(this.chartHeight);\n\n let posY = this.chartTop; // this.margin.top !\n let posX = this.yAxisWidth;\n\n this.heatmap.append(\"g\")\n .attr(\"class\", \"axis axis-x\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n // Remove horizontal line in the top of axis labels (called domain in d3)\n this.heatmap\n .select(\".axis-x\")\n .select(\".domain\")\n .remove();\n }\n\n // divide chart height by ticks for cards drawing\n getYScale(ticks: any[]) {\n let range:any[] = [];\n let step = this.chartHeight / ticks.length;\n // svg has y=0 on the top, so top card should have a minimal value in range\n range.push(step);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * (i+1));\n }\n return d3.scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n // divide chart height by ticks with offset for ticks drawing\n getYAxisScale(ticks: any[]) {\n let range:any[] = [];\n let step = this.chartHeight / ticks.length;\n // svg has y=0 on the top, so top tick should have a minimal value in range\n range.push(this.yOffset);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * i + this.yOffset);\n }\n return d3.scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n addYAxis() {\n let ticks = this.bucketMatrix.targets;\n\n if (this.panel.yAxisSort == 'a → z') {\n ticks.sort((a, b) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));\n } else if (this.panel.yAxisSort == 'z → a') {\n ticks.sort((b, a) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));\n }\n\n let yAxisScale = this.getYAxisScale(ticks);\n this.scope.yScale = this.yScale = this.getYScale(ticks);\n\n let yAxis = d3\n .axisLeft(yAxisScale)\n .tickValues(ticks)\n .tickSizeInner(0 - this.width)\n .tickPadding(Y_AXIS_TICK_PADDING);\n\n this.heatmap\n .append(\"g\")\n .attr(\"class\", \"axis axis-y\")\n .call(yAxis);\n\n // Calculate Y axis width first, then move axis into visible area\n let posY = this.margin.top;\n let posX = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;\n this.heatmap.select(\".axis-y\").attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\");\n\n // Remove vertical line in the right of axis labels (called domain in d3)\n this.heatmap.select(\".axis-y\").select(\".domain\").remove();\n this.heatmap.select(\".axis-y\").selectAll(\".tick line\").remove();\n }\n\n // Wide Y values range and adjust to bucket size\n wideYAxisRange(min: number, max: number, tickInterval: number) {\n let y_widing = (max * (this.dataRangeWidingFactor - 1) - min * (this.dataRangeWidingFactor - 1)) / 2;\n let y_min, y_max;\n\n if (tickInterval === 0) {\n y_max = max * this.dataRangeWidingFactor;\n y_min = min - min * (this.dataRangeWidingFactor - 1);\n tickInterval = (y_max - y_min) / 2;\n } else {\n y_max = Math.ceil((max + y_widing) / tickInterval) * tickInterval;\n y_min = Math.floor((min - y_widing) / tickInterval) * tickInterval;\n }\n\n // Don't wide axis below 0 if all values are positive\n if (min >= 0 && y_min < 0) {\n y_min = 0;\n }\n\n return {y_min, y_max};\n }\n\n tickValueFormatter(decimals, scaledDecimals = null) {\n let format = this.panel.yAxis.format;\n return function(value) {\n return kbn.valueFormats[format](value, decimals, scaledDecimals);\n };\n }\n\n // Create svg element, add axes and\n // calculate sizes for cards drawing\n addStatusmapCanvas() {\n let heatmap_elem = this.$heatmap[0];\n\n this.width = Math.floor(this.$heatmap.width()) - this.padding.right;\n this.height = Math.floor(this.$heatmap.height()) - this.padding.bottom;\n\n if (this.heatmap) {\n this.heatmap.remove();\n }\n\n this.heatmap = d3.select(heatmap_elem)\n .append(\"svg\")\n .attr(\"width\", this.width)\n .attr(\"height\", this.height);\n\n this.chartHeight = this.height - this.margin.top - this.margin.bottom;\n this.chartTop = this.margin.top;\n this.chartBottom = this.chartTop + this.chartHeight;\n\n this.cardHSpacing = this.panel.cards.cardHSpacing !== null ? this.panel.cards.cardHSpacing : CARD_H_SPACING;\n this.cardVSpacing = this.panel.cards.cardVSpacing !== null ? this.panel.cards.cardVSpacing : CARD_V_SPACING;\n this.cardRound = this.panel.cards.cardRound !== null ? this.panel.cards.cardRound : CARD_ROUND;\n\n // calculate yOffset for YAxis\n this.yGridSize = this.chartHeight;\n if (this.bucketMatrix.targets.length > 0) {\n this.yGridSize = Math.floor(this.chartHeight / this.bucketMatrix.targets.length);\n }\n this.cardHeight = this.yGridSize ? this.yGridSize - this.cardVSpacing : 0;\n this.yOffset = this.cardHeight / 2;\n\n this.addYAxis();\n\n this.yAxisWidth = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;\n this.chartWidth = this.width - this.yAxisWidth - this.margin.right;\n\n // TODO allow per-y cardWidth!\n // we need to fill chartWidth with xBucketSize cards.\n this.xGridSize = this.chartWidth / (this.bucketMatrix.xBucketSize+1);\n this.cardWidth = this.xGridSize - this.cardHSpacing;\n\n this.addXAxis();\n this.xAxisHeight = this.getXAxisHeight(this.heatmap);\n\n if (!this.panel.yAxis.show) {\n this.heatmap.select(\".axis-y\").selectAll(\"line\").style(\"opacity\", 0);\n }\n\n if (!this.panel.xAxis.show) {\n this.heatmap.select(\".axis-x\").selectAll(\"line\").style(\"opacity\", 0);\n }\n }\n\n addStatusmap():void {\n let maxValue = this.panel.color.max || this.bucketMatrix.maxValue;\n let minValue = this.panel.color.min || this.bucketMatrix.minValue;\n\n if (this.panel.color.mode !== 'discrete') {\n this.colorScale = this.getColorScale(maxValue, minValue);\n }\n this.setOpacityScale(maxValue);\n\n // Draw cards from buckets.\n this.heatmap.selectAll(\".statusmap-cards-row\").data(this.bucketMatrix.targets)\n .enter()\n .selectAll(\".statustmap-card\")\n .data((target:string) => this.bucketMatrix.buckets[target])\n .enter()\n .append(\"rect\")\n .attr(\"cardId\", (b:Bucket) => b.id)\n .attr(\"xid\", (b:Bucket) => b.xid)\n .attr(\"yid\", (b:Bucket) => b.yLabel)\n .attr(\"x\", this.getCardX.bind(this))\n .attr(\"width\", this.getCardWidth.bind(this))\n .attr(\"y\", this.getCardY.bind(this))\n .attr(\"height\", this.getCardHeight.bind(this))\n .attr(\"rx\", this.cardRound)\n .attr(\"ry\", this.cardRound)\n .attr(\"class\", (b:Bucket) => b.isEmpty() ? \"empty-card\" : \"bordered statusmap-card\")\n .style(\"fill\", this.getCardColor.bind(this))\n .style(\"stroke\", this.getCardColor.bind(this))\n .style(\"stroke-width\", 0)\n //.style(\"stroke-width\", getCardStrokeWidth)\n //.style(\"stroke-dasharray\", \"3,3\")\n .style(\"opacity\", this.getCardOpacity.bind(this));\n\n // Set mouse events on cards.\n let $cards = this.$heatmap.find(\".statusmap-card + .bordered\");\n $cards\n .on(\"mouseenter\", (event) => {\n this.tooltip.mouseOverBucket = true;\n this.highlightCard(event);\n })\n .on(\"mouseleave\", (event) => {\n this.tooltip.mouseOverBucket = false;\n this.resetCardHighLight(event);\n });\n\n this._renderAnnotations();\n\n this.ctrl.events.emit('render-complete', {\n \"chartWidth\": this.chartWidth\n });\n }\n\n highlightCard(event) {\n const color = d3.select(event.target).style(\"fill\");\n const highlightColor = d3.color(color).darker(2);\n const strokeColor = d3.color(color).brighter(4);\n const current_card = d3.select(event.target);\n this.tooltip.originalFillColor = color;\n current_card\n .style(\"fill\", highlightColor.toString())\n .style(\"stroke\", strokeColor.toString())\n .style(\"stroke-width\", 1);\n }\n\n resetCardHighLight(event) {\n d3.select(event.target)\n .style(\"fill\", this.tooltip.originalFillColor)\n .style(\"stroke\", this.tooltip.originalFillColor)\n .style(\"stroke-width\", 0);\n }\n\n getColorScale(maxValue, minValue = 0) {\n let colorScheme = _.find(this.ctrl.colorSchemes, {value: this.panel.color.colorScheme});\n // if (!colorScheme) {\n //\n // }\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted = colorScheme.invert === 'always' ||\n (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n if (maxValue == minValue)\n maxValue = minValue + 1;\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n }\n\n setOpacityScale(maxValue) {\n if (this.panel.color.colorScale === 'linear') {\n this.opacityScale = d3.scaleLinear()\n .domain([0, maxValue])\n .range([0, 1]);\n } else if (this.panel.color.colorScale === 'sqrt') {\n this.opacityScale = d3.scalePow().exponent(this.panel.color.exponent)\n .domain([0, maxValue])\n .range([0, 1]);\n }\n }\n\n getCardX(b: Bucket) {\n let x;\n // cx is the center of the card. Card should be placed to the left.\n //let cx = this.xScale(d.x);\n let rightX = (b.relTo / this.bucketMatrix.rangeMs) * this.chartWidth;\n let cx = rightX - this.cardWidth/2;\n\n if (cx - this.cardWidth/2 < 0) {\n x = this.yAxisWidth + this.cardHSpacing/2;\n } else {\n x = this.yAxisWidth + cx - this.cardWidth/2;\n }\n\n return x;\n }\n\n // xScale returns card center. Adjust cardWidth in case of overlaping.\n getCardWidth(b: Bucket) {\n //return 20;\n let w;\n\n let rightX = (b.relTo / this.bucketMatrix.rangeMs) * this.chartWidth;\n let cx = rightX - this.cardWidth/2;\n //let cx = this.xScale(d.x);\n\n if (cx < this.cardWidth/2) {\n // Center should not exceed half of card.\n // Cut card to the left to prevent overlay of y axis.\n let cutted_width = (cx - this.cardHSpacing/2) + this.cardWidth/2;\n w = cutted_width > 0 ? cutted_width : 0;\n } else if (this.chartWidth - cx < this.cardWidth/2) {\n // Cut card to the right to prevent overlay of right graph edge.\n w = this.cardWidth/2 + (this.chartWidth - cx - this.cardHSpacing/2);\n } else {\n w = this.cardWidth;\n }\n\n // Card width should be MIN_CARD_SIZE at least\n w = Math.max(w, MIN_CARD_SIZE);\n\n if (this.cardHSpacing == 0) {\n w = w+1;\n }\n\n return w;\n }\n\n // Top y for card.\n // yScale gives ???\n // \n getCardY(b: Bucket) {\n return this.yScale(b.yLabel) + this.chartTop - this.cardHeight - this.cardVSpacing/2;\n }\n\n getCardHeight(b: Bucket) {\n //return 20;\n let ys = this.yScale(b.yLabel);\n let y = ys + this.chartTop - this.cardHeight - this.cardVSpacing/2;\n let h = this.cardHeight;\n\n // Cut card height to prevent overlay\n if (y < this.chartTop) {\n h = ys - this.cardVSpacing/2;\n } else if (ys > this.chartBottom) {\n h = this.chartBottom - y;\n } else if (y + this.cardHeight > this.chartBottom) {\n h = this.chartBottom - y;\n }\n\n // Height can't be more than chart height\n h = Math.min(h, this.chartHeight);\n // Card height should be MIN_CARD_SIZE at least\n h = Math.max(h, MIN_CARD_SIZE);\n\n if (this.cardVSpacing == 0) {\n h = h+1\n }\n\n return h;\n }\n\n getCardColor(b: Bucket) {\n if (this.panel.color.mode === 'opacity') {\n return this.panel.color.cardColor;\n } else if (this.panel.color.mode === 'spectrum') {\n return this.colorScale(b.value);\n } else if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex != -1 || this.panel.seriesFilterIndex != null) {\n return this.ctrl.discreteExtraSeries.getBucketColorSingle(b.values[this.panel.seriesFilterIndex]);\n } else {\n return this.ctrl.discreteExtraSeries.getBucketColor(b.values);\n }\n }\n }\n\n getCardOpacity(b: Bucket) {\n if (this.panel.nullPointMode === 'as empty' && b.value == null ) {\n return 0;\n }\n if (this.panel.color.mode === 'opacity') {\n return this.opacityScale(b.value);\n } else {\n return 1;\n }\n }\n\n getCardStrokeWidth(b: Bucket) {\n if (this.panel.color.mode === 'discrete') {\n return '1';\n }\n return '0';\n }\n\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n getEventOffset(event) {\n const elemOffset = this.$heatmap.offset();\n const x = Math.floor(event.clientX - elemOffset.left);\n const y = Math.floor(event.clientY - elemOffset.top);\n return { x, y };\n }\n\n onMouseDown(event) {\n const offset = this.getEventOffset(event);\n this.selection.active = true;\n this.selection.x1 = offset.x;\n\n this.mouseUpHandler = () => {\n this.onMouseUp();\n };\n\n $(document).one(\"mouseup\", this.mouseUpHandler.bind(this));\n }\n\n onMouseUp() {\n $(document).unbind(\"mouseup\", this.mouseUpHandler.bind(this));\n this.mouseUpHandler = null;\n this.selection.active = false;\n\n let selectionRange = Math.abs(this.selection.x2 - this.selection.x1);\n if (this.selection.x2 >= 0 && selectionRange > MIN_SELECTION_WIDTH) {\n let timeFrom = this.xScale.invert(Math.min(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize/2);\n let timeTo = this.xScale.invert(Math.max(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize/2);\n\n this.ctrl.timeSrv.setTime({\n from: moment.utc(timeFrom),\n to: moment.utc(timeTo)\n });\n }\n\n this.clearSelection();\n }\n\n onMouseLeave(e) {\n appEvents.emit('graph-hover-clear');\n this.clearCrosshair();\n //annotationTooltip.destroy();\n if (e.relatedTarget) {\n if (e.relatedTarget.className == \"statusmap-tooltip-extraseries graph-tooltip grafana-tooltip\" || e.relatedTarget.className == \"graph-tooltip-time\" ) {\n } else {\n this.tooltipExtraSeries.destroy();\n }\n }\n this.annotationTooltip.destroy(); \n }\n\n onMouseMove(event) {\n if (!this.heatmap) { return; }\n\n const offset = this.getEventOffset(event);\n if (this.selection.active) {\n // Clear crosshair and tooltip\n this.clearCrosshair();\n this.tooltip.destroy();\n this.annotationTooltip.destroy();\n\n this.selection.x2 = this.limitSelection(event.offsetX);\n this.drawSelection(this.selection.x1, this.selection.x2);\n } else {\n //const pos = this.getEventPos(event, offset);\n this.emitGraphHoverEvent(event);\n this.drawCrosshair(offset.x);\n this.tooltip.show(event);\n this.annotationTooltip.show(event);\n }\n }\n\n public onMouseClick(event) {\n this.tooltipExtraSeries.show(event)\n if (this.ctrl.panel.usingUrl) {\n this.tooltip.destroy();\n }\n }\n\n getEventPos(event, offset) {\n const x = this.xScale.invert(offset.x - this.yAxisWidth).valueOf();\n const y = this.yScale.invert(offset.y - this.chartTop);\n const pos = {\n pageX: event.pageX,\n pageY: event.pageY,\n x: x,\n x1: x,\n y: y,\n y1: y,\n panelRelY: null,\n offset,\n };\n\n return pos;\n }\n\n emitGraphHoverEvent(event) {\n let x = this.xScale.invert(event.offsetX - this.yAxisWidth - this.xGridSize/2).valueOf();\n let y = this.yScale(event.offsetY);\n let pos = {\n pageX: event.pageX,\n pageY: event.pageY,\n x: x, x1: x,\n y: y, y1: y,\n panelRelY: 0\n };\n\n // Set minimum offset to prevent showing legend from another panel\n pos.panelRelY = Math.max(event.offsetY / this.height, 0.001);\n\n // broadcast to other graph panels that we are hovering\n appEvents.emit('graph-hover', {pos: pos, panel: this.panel});\n }\n\n limitSelection(x2) {\n x2 = Math.max(x2, this.yAxisWidth);\n x2 = Math.min(x2, this.chartWidth + this.yAxisWidth);\n return x2;\n }\n\n drawSelection(posX1, posX2) {\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-selection\").remove();\n let selectionX = Math.min(posX1, posX2);\n let selectionWidth = Math.abs(posX1 - posX2);\n\n if (selectionWidth > MIN_SELECTION_WIDTH) {\n this.heatmap.append(\"rect\")\n .attr(\"class\", \"status-heatmap-selection\")\n .attr(\"x\", selectionX)\n .attr(\"width\", selectionWidth)\n .attr(\"y\", this.chartTop)\n .attr(\"height\", this.chartHeight);\n }\n }\n }\n\n clearSelection() {\n this.selection.x1 = -1;\n this.selection.x2 = -1;\n\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-selection\").remove();\n }\n }\n\n\n drawCrosshair(position) {\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-crosshair\").remove();\n\n let posX = position;\n posX = Math.max(posX, this.yAxisWidth);\n posX = Math.min(posX, this.chartWidth + this.yAxisWidth);\n\n this.heatmap.append(\"g\")\n .attr(\"class\", \"status-heatmap-crosshair\")\n .attr(\"transform\", \"translate(\" + posX + \",0)\")\n .append(\"line\")\n .attr(\"x1\", 1)\n .attr(\"y1\", this.chartTop)\n .attr(\"x2\", 1)\n .attr(\"y2\", this.chartBottom)\n .attr(\"stroke-width\", 1);\n }\n }\n\n // map time to X\n drawSharedCrosshair(pos) {\n if (this.heatmap && this.ctrl.dashboard.graphTooltip !== 0) {\n const posX = this.xScale(pos.x) + this.yAxisWidth;\n this.drawCrosshair(posX);\n }\n }\n\n clearCrosshair() {\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-crosshair\").remove();\n }\n }\n\n\n render() {\n this.panel = this.ctrl.panel;\n this.timeRange = this.ctrl.range;\n this.bucketMatrix = this.ctrl.bucketMatrix;\n\n if (!this.bucketMatrix || !this.setElementHeight()) {\n return;\n }\n\n // Draw default axes and return if no data\n this.addStatusmapCanvas();\n if (this.bucketMatrix.noDatapoints) {\n return;\n }\n\n this.addStatusmap();\n this.scope.yAxisWidth = this.yAxisWidth;\n this.scope.xAxisHeight = this.xAxisHeight;\n this.scope.chartHeight = this.chartHeight;\n this.scope.chartWidth = this.chartWidth;\n this.scope.chartTop = this.chartTop;\n }\n\n _renderAnnotations() {\n if (!this.ctrl.annotations || this.ctrl.annotations.length == 0) {\n return;\n }\n\n if (!this.heatmap) {\n return;\n }\n\n\n\n let annoData = _.map(this.ctrl.annotations, (d,i) => ({\"x\": Math.floor(this.yAxisWidth + this.xScale(d.time)), \"id\":i, \"anno\": d.source}));\n\n //({\"ctrl_annotations\": this.ctrl.annotations, \"annoData\": annoData});\n\n let anno = this.heatmap\n .append(\"g\")\n .attr(\"class\", \"statusmap-annotations\")\n .attr(\"transform\", \"translate(0.5,0)\")\n .selectAll(\".statusmap-annotations\")\n .data(annoData)\n .enter().append(\"g\")\n ;\n anno.append(\"line\")\n //.attr(\"class\", \"statusmap-annotation-tick\")\n .attr(\"x1\", d => d.x)\n .attr(\"y1\", this.chartTop)\n .attr(\"x2\", d => d.x)\n .attr(\"y2\", this.chartBottom)\n .style(\"stroke\", d => d.anno.iconColor)\n .style(\"stroke-width\", 1)\n .style(\"stroke-dasharray\", \"3,3\")\n ;\n anno.append(\"polygon\")\n .attr(\"points\", d => [[d.x, this.chartBottom+1], [d.x-5, this.chartBottom+6], [d.x+5, this.chartBottom+6]].join(\" \"))\n .style(\"stroke-width\", 0)\n .style(\"fill\", d => d.anno.iconColor)\n ;\n // Polygons didn't fire mouseevents\n anno.append(\"rect\")\n .attr(\"x\", d => d.x-5)\n .attr(\"width\", 10)\n .attr(\"y\", this.chartBottom+1)\n .attr(\"height\", 5)\n .attr(\"class\", \"statusmap-annotation-tick\")\n .attr(\"annoId\", d => d.id)\n .style(\"opacity\", 0)\n ;\n\n let $ticks = this.$heatmap.find(\".statusmap-annotation-tick\");\n $ticks\n .on(\"mouseenter\", (event) => {\n this.annotationTooltip.mouseOverAnnotationTick = true;\n })\n .on(\"mouseleave\", (event) => {\n this.annotationTooltip.mouseOverAnnotationTick = false;\n });\n }\n}\n\nfunction grafanaTimeFormat(ticks, min, max) {\n if (min && max && ticks) {\n let range = max - min;\n let secPerTick = (range/ticks) / 1000;\n let oneDay = 86400000;\n let oneYear = 31536000000;\n\n if (secPerTick <= 45) {\n return \"%H:%M:%S\";\n }\n if (secPerTick <= 7200 || range <= oneDay) {\n return \"%H:%M\";\n }\n if (secPerTick <= 80000) {\n return \"%m/%d %H:%M\";\n }\n if (secPerTick <= 2419200 || range <= oneYear) {\n return \"%m/%d\";\n }\n return \"%Y-%m\";\n }\n\n return \"%H:%M\";\n}\n"],"file":"rendering.js"} \ No newline at end of file +{"version":3,"sources":["../src/rendering.ts"],"names":["rendering","scope","elem","attrs","ctrl","StatusmapRenderer","grafanaTimeFormat","ticks","min","max","range","secPerTick","oneDay","oneYear","_","$","moment","kbn","appEvents","contextSrv","d3","d3ScaleChromatic","StatusmapTooltip","StatusHeatmapTooltipExtraSeries","AnnotationTooltip","MIN_CARD_SIZE","CARD_H_SPACING","CARD_V_SPACING","CARD_ROUND","DATA_RANGE_WIDING_FACTOR","DEFAULT_X_TICK_SIZE_PX","DEFAULT_Y_TICK_SIZE_PX","X_AXIS_TICK_PADDING","Y_AXIS_TICK_PADDING","MIN_SELECTION_WIDTH","$heatmap","find","tooltip","tooltipExtraSeries","annotationTooltip","yOffset","selection","active","x1","x2","padding","left","right","top","bottom","margin","events","on","onRender","bind","tickValueFormatter","onGraphHover","onGraphHoverClear","onMouseDown","onMouseMove","onMouseLeave","onMouseClick","clearCrosshair","event","drawSharedCrosshair","pos","render","renderingCompleted","height","panel","row","isString","parseInt","replace","legend","show","css","e","axisText","selectAll","nodes","maxTextWidth","map","text","getBBox","width","Math","ceil","axisLine","select","empty","axisLinePosition","parseFloat","attr","canvasWidth","xScale","scaleTime","domain","timeRange","from","to","xGridSize","chartWidth","grafanaTimeFormatter","timeFormat","dashboardTimeZone","dashboard","getTimezone","utcFormat","xAxis","axisBottom","tickFormat","tickPadding","tickSize","chartHeight","posY","chartTop","posX","yAxisWidth","heatmap","append","call","remove","step","length","push","i","scaleOrdinal","uniq","data","d","target","isEmpty","yAxisSort","sort","a","b","localeCompare","ignorePunctuation","numeric","yAxisScale","getYAxisScale","yScale","getYScale","yAxis","axisLeft","tickValues","tickSizeInner","getYAxisWidth","tickInterval","y_widing","dataRangeWidingFactor","y_min","y_max","floor","decimals","scaledDecimals","format","value","valueFormats","heatmap_elem","chartBottom","cardHSpacing","cards","cardVSpacing","cardRound","yGridSize","cardsData","yBucketSize","cardHeight","addYAxis","xBucketSize","cardWidth","addXAxis","xAxisHeight","getXAxisHeight","style","addHeatmapCanvas","maxValue","color","minValue","mode","colorScale","getColorScale","setOpacityScale","enter","c","id","getCardX","getCardWidth","getCardY","getCardHeight","getCardColor","getCardOpacity","$cards","mouseOverBucket","highlightCard","resetCardHighLight","_renderAnnotations","emit","highlightColor","darker","strokeColor","brighter","current_card","originalFillColor","toString","colorScheme","colorSchemes","colorInterpolator","colorScaleInverted","invert","user","lightTheme","start","end","scaleSequential","opacityScale","scaleLinear","scalePow","exponent","x","cx","w","cutted_width","y","ys","h","cardColor","seriesFilterIndex","discreteExtraSeries","getBucketColorSingle","values","getBucketColor","nullPointMode","elemOffset","offset","clientX","clientY","getEventOffset","mouseUpHandler","onMouseUp","document","one","unbind","selectionRange","abs","timeFrom","timeTo","timeSrv","setTime","utc","clearSelection","relatedTarget","className","destroy","limitSelection","offsetX","drawSelection","emitGraphHoverEvent","drawCrosshair","usingUrl","valueOf","pageX","pageY","y1","panelRelY","offsetY","posX1","posX2","selectionX","selectionWidth","position","graphTooltip","setElementHeight","addHeatmap","annotations","annoData","time","source","anno","iconColor","join","$ticks","mouseOverAnnotationTick"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport $ from 'jquery';\nimport moment from 'moment';\nimport kbn from 'app/core/utils/kbn';\nimport {appEvents, contextSrv} from 'app/core/core';\nimport {tickStep, getScaledDecimals, getFlotTickSize} from 'app/core/utils/ticks';\nimport * as d3 from 'd3';\nimport * as d3ScaleChromatic from './libs/d3-scale-chromatic/index';\nimport {StatusmapTooltip} from './tooltip';\nimport {StatusHeatmapTooltipExtraSeries} from './tooltipextraseries';\nimport {AnnotationTooltip} from './annotations';\n\nlet MIN_CARD_SIZE = 5,\n CARD_H_SPACING = 2,\n CARD_V_SPACING = 2,\n CARD_ROUND = 0,\n DATA_RANGE_WIDING_FACTOR = 1.2,\n DEFAULT_X_TICK_SIZE_PX = 100,\n DEFAULT_Y_TICK_SIZE_PX = 50,\n X_AXIS_TICK_PADDING = 10,\n Y_AXIS_TICK_PADDING = 5,\n MIN_SELECTION_WIDTH = 2;\n\nexport default function rendering(scope: any, elem: any, attrs: any, ctrl: any) {\n return new StatusmapRenderer(scope, elem, attrs, ctrl);\n}\n\nexport class StatusmapRenderer {\n width: number = 0;\n height: number = 0;\n yScale: any;\n xScale: any;\n chartWidth: number = 0;\n chartHeight: number = 0;\n chartTop: number = 0;\n chartBottom: number = 0;\n yAxisWidth: number = 0;\n xAxisHeight: number = 0;\n cardVSpacing: number = 0;\n cardHSpacing: number = 0;\n cardRound: number = 0;\n cardWidth: number = 0;\n cardHeight: number = 0;\n colorScale: any;\n opacityScale: any;\n mouseUpHandler: any;\n xGridSize: number = 0;\n yGridSize: number = 0;\n data: any;\n cardsData: any;\n panel: any;\n $heatmap: any;\n tooltip: StatusmapTooltip;\n tooltipExtraSeries:StatusHeatmapTooltipExtraSeries;\n annotationTooltip: AnnotationTooltip;\n heatmap: any;\n timeRange: any;\n\n yOffset: number;\n selection: any;\n padding: any;\n margin: any;\n dataRangeWidingFactor: number = DATA_RANGE_WIDING_FACTOR;\n\n constructor(private scope: any, private elem: any, attrs: any, private ctrl: any) {\n // $heatmap is JQuery object, but heatmap is D3\n this.$heatmap = this.elem.find('.status-heatmap-panel');\n this.tooltip = new StatusmapTooltip(this.$heatmap, this.scope);\n this.tooltipExtraSeries = new StatusHeatmapTooltipExtraSeries(this.$heatmap, this.scope);\n this.annotationTooltip = new AnnotationTooltip(this.$heatmap, this.scope);\n\n this.yOffset = 0;\n\n this.selection = {\n active: false,\n x1: -1,\n x2: -1,\n };\n\n this.padding = { left: 0, right: 0, top: 0, bottom: 0 };\n this.margin = { left: 25, right: 15, top: 10, bottom: 20 };\n\n this.ctrl.events.on('render', this.onRender.bind(this));\n\n this.ctrl.tickValueFormatter = this.tickValueFormatter.bind(this);\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n // Shared crosshair and tooltip\n appEvents.on('graph-hover', this.onGraphHover.bind(this), this.scope);\n\n appEvents.on('graph-hover-clear', this.onGraphHoverClear.bind(this), this.scope);\n\n // Register selection listeners\n this.$heatmap.on('mousedown', this.onMouseDown.bind(this));\n this.$heatmap.on('mousemove', this.onMouseMove.bind(this));\n this.$heatmap.on('mouseleave', this.onMouseLeave.bind(this));\n this.$heatmap.on('click', this.onMouseClick.bind(this));\n }\n\n onGraphHoverClear() {\n this.clearCrosshair();\n }\n\n onGraphHover(event: { pos: any }) {\n this.drawSharedCrosshair(event.pos);\n }\n\n onRender() {\n this.render();\n this.ctrl.renderingCompleted();\n }\n\n\n setElementHeight() {\n try {\n var height = this.ctrl.height || this.panel.height || this.ctrl.row.height;\n if (_.isString(height)) {\n height = parseInt(height.replace('px', ''), 10);\n }\n\n height -= this.panel.legend.show ? 32 : 10; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n\n this.$heatmap.css('height', height + 'px');\n\n return true;\n } catch (e) { // IE throws errors sometimes\n return false;\n }\n }\n\n getYAxisWidth(elem: any) {\n const axisText = elem.selectAll(\".axis-y text\").nodes();\n const maxTextWidth = _.max(_.map(axisText, text => {\n // Use SVG getBBox method\n return text.getBBox().width;\n }));\n\n return Math.ceil(maxTextWidth);\n }\n\n getXAxisHeight(elem: any) {\n let axisLine = elem.select(\".axis-x line\");\n if (!axisLine.empty()) {\n let axisLinePosition = parseFloat(elem.select(\".axis-x line\").attr(\"y2\"));\n let canvasWidth = parseFloat(elem.attr(\"height\"));\n return canvasWidth - axisLinePosition;\n } else {\n // Default height\n return 30;\n }\n }\n\n addXAxis() {\n // Scale timestamps to cards centers\n this.scope.xScale = this.xScale = d3.scaleTime()\n .domain([this.timeRange.from, this.timeRange.to])\n .range([this.xGridSize/2, this.chartWidth-this.xGridSize/2]);\n\n let ticks = this.chartWidth / DEFAULT_X_TICK_SIZE_PX;\n let grafanaTimeFormatter = grafanaTimeFormat(ticks, this.timeRange.from, this.timeRange.to);\n let timeFormat;\n let dashboardTimeZone = this.ctrl.dashboard.getTimezone();\n if (dashboardTimeZone === 'utc') {\n timeFormat = d3.utcFormat(grafanaTimeFormatter);\n } else {\n timeFormat = d3.timeFormat(grafanaTimeFormatter);\n }\n\n let xAxis = d3\n .axisBottom(this.xScale)\n .ticks(ticks)\n .tickFormat(timeFormat)\n .tickPadding(X_AXIS_TICK_PADDING)\n .tickSize(this.chartHeight);\n\n let posY = this.chartTop; // this.margin.top !\n let posX = this.yAxisWidth;\n\n this.heatmap.append(\"g\")\n .attr(\"class\", \"axis axis-x\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n // Remove horizontal line in the top of axis labels (called domain in d3)\n this.heatmap\n .select(\".axis-x\")\n .select(\".domain\")\n .remove();\n }\n\n // divide chart height by ticks for cards drawing\n getYScale(ticks) {\n let range:any[] = [];\n let step = this.chartHeight / ticks.length;\n // svg has y=0 on the top, so top card should have a minimal value in range\n range.push(step);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * (i+1));\n }\n return d3.scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n // divide chart height by ticks with offset for ticks drawing\n getYAxisScale(ticks) {\n let range:any[] = [];\n let step = this.chartHeight / ticks.length;\n // svg has y=0 on the top, so top tick should have a minimal value in range\n range.push(this.yOffset);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * i + this.yOffset);\n }\n return d3.scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n addYAxis() {\n let ticks = _.uniq(_.map(this.data, d => d.target));\n\n // Set default Y min and max if no data\n if (_.isEmpty(this.data)) {\n ticks = [''];\n }\n\n if (this.panel.yAxisSort == 'a → z') {\n ticks.sort((a, b) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));\n } else if (this.panel.yAxisSort == 'z → a') {\n ticks.sort((b, a) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));\n }\n\n let yAxisScale = this.getYAxisScale(ticks);\n this.scope.yScale = this.yScale = this.getYScale(ticks);\n\n let yAxis = d3\n .axisLeft(yAxisScale)\n .tickValues(ticks)\n .tickSizeInner(0 - this.width)\n .tickPadding(Y_AXIS_TICK_PADDING);\n\n this.heatmap\n .append(\"g\")\n .attr(\"class\", \"axis axis-y\")\n .call(yAxis);\n\n // Calculate Y axis width first, then move axis into visible area\n let posY = this.margin.top;\n let posX = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;\n this.heatmap.select(\".axis-y\").attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\");\n\n // Remove vertical line in the right of axis labels (called domain in d3)\n this.heatmap.select(\".axis-y\").select(\".domain\").remove();\n this.heatmap.select(\".axis-y\").selectAll(\".tick line\").remove();\n }\n\n // Wide Y values range and adjust to bucket size\n wideYAxisRange(min, max, tickInterval) {\n let y_widing = (max * (this.dataRangeWidingFactor - 1) - min * (this.dataRangeWidingFactor - 1)) / 2;\n let y_min, y_max;\n\n if (tickInterval === 0) {\n y_max = max * this.dataRangeWidingFactor;\n y_min = min - min * (this.dataRangeWidingFactor - 1);\n tickInterval = (y_max - y_min) / 2;\n } else {\n y_max = Math.ceil((max + y_widing) / tickInterval) * tickInterval;\n y_min = Math.floor((min - y_widing) / tickInterval) * tickInterval;\n }\n\n // Don't wide axis below 0 if all values are positive\n if (min >= 0 && y_min < 0) {\n y_min = 0;\n }\n\n return {y_min, y_max};\n }\n\n tickValueFormatter(decimals, scaledDecimals = null) {\n let format = this.panel.yAxis.format;\n return function(value) {\n return kbn.valueFormats[format](value, decimals, scaledDecimals);\n };\n }\n\n // Create svg element, add axes and\n // calculate sizes for cards drawing\n addHeatmapCanvas() {\n let heatmap_elem = this.$heatmap[0];\n\n this.width = Math.floor(this.$heatmap.width()) - this.padding.right;\n this.height = Math.floor(this.$heatmap.height()) - this.padding.bottom;\n\n if (this.heatmap) {\n this.heatmap.remove();\n }\n\n this.heatmap = d3.select(heatmap_elem)\n .append(\"svg\")\n .attr(\"width\", this.width)\n .attr(\"height\", this.height);\n\n this.chartHeight = this.height - this.margin.top - this.margin.bottom;\n this.chartTop = this.margin.top;\n this.chartBottom = this.chartTop + this.chartHeight;\n\n this.cardHSpacing = this.panel.cards.cardHSpacing !== null ? this.panel.cards.cardHSpacing : CARD_H_SPACING;\n this.cardVSpacing = this.panel.cards.cardVSpacing !== null ? this.panel.cards.cardVSpacing : CARD_V_SPACING;\n this.cardRound = this.panel.cards.cardRound !== null ? this.panel.cards.cardRound : CARD_ROUND;\n\n // calculate yOffset for YAxis\n this.yGridSize = Math.floor(this.chartHeight / this.cardsData.yBucketSize);\n this.cardHeight = this.yGridSize ? this.yGridSize - this.cardVSpacing : 0;\n this.yOffset = this.cardHeight / 2;\n\n this.addYAxis();\n\n this.yAxisWidth = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;\n this.chartWidth = this.width - this.yAxisWidth - this.margin.right;\n\n // TODO allow per-y cardWidth!\n // we need to fill chartWidth with xBucketSize cards.\n this.xGridSize = this.chartWidth / (this.cardsData.xBucketSize+1);\n this.cardWidth = this.xGridSize - this.cardHSpacing;\n\n this.addXAxis();\n this.xAxisHeight = this.getXAxisHeight(this.heatmap);\n\n if (!this.panel.yAxis.show) {\n this.heatmap.select(\".axis-y\").selectAll(\"line\").style(\"opacity\", 0);\n }\n\n if (!this.panel.xAxis.show) {\n this.heatmap.select(\".axis-x\").selectAll(\"line\").style(\"opacity\", 0);\n }\n }\n\n addHeatmap() {\n this.addHeatmapCanvas();\n\n let maxValue = this.panel.color.max || this.cardsData.maxValue;\n let minValue = this.panel.color.min || this.cardsData.minValue;\n\n if (this.panel.color.mode !== 'discrete') {\n this.colorScale = this.getColorScale(maxValue, minValue);\n }\n this.setOpacityScale(maxValue);\n\n let cards = this.heatmap.selectAll(\".status-heatmap-card\").data(this.cardsData.cards);\n cards.append(\"title\");\n cards = cards.enter().append(\"rect\")\n .attr(\"cardId\", c => c.id)\n .attr(\"x\", this.getCardX.bind(this))\n .attr(\"width\", this.getCardWidth.bind(this))\n .attr(\"y\", this.getCardY.bind(this))\n .attr(\"height\", this.getCardHeight.bind(this))\n .attr(\"rx\", this.cardRound)\n .attr(\"ry\", this.cardRound)\n .attr(\"class\", \"bordered status-heatmap-card\")\n .style(\"fill\", this.getCardColor.bind(this))\n .style(\"stroke\", this.getCardColor.bind(this))\n .style(\"stroke-width\", 0)\n //.style(\"stroke-width\", getCardStrokeWidth)\n //.style(\"stroke-dasharray\", \"3,3\")\n .style(\"opacity\", this.getCardOpacity.bind(this));\n\n let $cards = this.$heatmap.find(\".status-heatmap-card\");\n $cards\n .on(\"mouseenter\", (event) => {\n this.tooltip.mouseOverBucket = true;\n this.highlightCard(event);\n })\n .on(\"mouseleave\", (event) => {\n this.tooltip.mouseOverBucket = false;\n this.resetCardHighLight(event);\n });\n\n this._renderAnnotations();\n\n this.ctrl.events.emit('render-complete', {\n \"chartWidth\": this.chartWidth\n });\n }\n\n highlightCard(event) {\n const color = d3.select(event.target).style(\"fill\");\n const highlightColor = d3.color(color).darker(2);\n const strokeColor = d3.color(color).brighter(4);\n const current_card = d3.select(event.target);\n this.tooltip.originalFillColor = color;\n current_card\n .style(\"fill\", highlightColor.toString())\n .style(\"stroke\", strokeColor.toString())\n .style(\"stroke-width\", 1);\n }\n\n resetCardHighLight(event) {\n d3.select(event.target)\n .style(\"fill\", this.tooltip.originalFillColor)\n .style(\"stroke\", this.tooltip.originalFillColor)\n .style(\"stroke-width\", 0);\n }\n\n getColorScale(maxValue, minValue = 0) {\n let colorScheme = _.find(this.ctrl.colorSchemes, {value: this.panel.color.colorScheme});\n // if (!colorScheme) {\n //\n // }\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted = colorScheme.invert === 'always' ||\n (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n if (maxValue == minValue)\n maxValue = minValue + 1;\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n }\n\n setOpacityScale(maxValue) {\n if (this.panel.color.colorScale === 'linear') {\n this.opacityScale = d3.scaleLinear()\n .domain([0, maxValue])\n .range([0, 1]);\n } else if (this.panel.color.colorScale === 'sqrt') {\n this.opacityScale = d3.scalePow().exponent(this.panel.color.exponent)\n .domain([0, maxValue])\n .range([0, 1]);\n }\n }\n\n getCardX(d) {\n let x;\n // cx is the center of the card. Card should be placed to the left.\n let cx = this.xScale(d.x);\n\n if (cx - this.cardWidth/2 < 0) {\n x = this.yAxisWidth + this.cardHSpacing/2;\n } else {\n x = this.yAxisWidth + cx - this.cardWidth/2;\n }\n\n return x;\n }\n\n // xScale returns card center. Adjust cardWidth in case of overlaping.\n getCardWidth(d) {\n let w;\n let cx = this.xScale(d.x);\n\n if (cx < this.cardWidth/2) {\n // Center should not exceed half of card.\n // Cut card to the left to prevent overlay of y axis.\n let cutted_width = (cx - this.cardHSpacing/2) + this.cardWidth/2;\n w = cutted_width > 0 ? cutted_width : 0;\n } else if (this.chartWidth - cx < this.cardWidth/2) {\n // Cut card to the right to prevent overlay of right graph edge.\n w = this.cardWidth/2 + (this.chartWidth - cx - this.cardHSpacing/2);\n } else {\n w = this.cardWidth;\n }\n\n // Card width should be MIN_CARD_SIZE at least\n w = Math.max(w, MIN_CARD_SIZE);\n\n if (this.cardHSpacing == 0) {\n w = w+1;\n }\n\n return w;\n }\n\n getCardY(d) {\n return this.yScale(d.y) + this.chartTop - this.cardHeight - this.cardVSpacing/2;\n }\n\n getCardHeight(d) {\n let ys = this.yScale(d.y);\n let y = ys + this.chartTop - this.cardHeight - this.cardVSpacing/2;\n let h = this.cardHeight;\n\n // Cut card height to prevent overlay\n if (y < this.chartTop) {\n h = ys - this.cardVSpacing/2;\n } else if (ys > this.chartBottom) {\n h = this.chartBottom - y;\n } else if (y + this.cardHeight > this.chartBottom) {\n h = this.chartBottom - y;\n }\n\n // Height can't be more than chart height\n h = Math.min(h, this.chartHeight);\n // Card height should be MIN_CARD_SIZE at least\n h = Math.max(h, MIN_CARD_SIZE);\n\n if (this.cardVSpacing == 0) {\n h = h+1\n }\n\n return h;\n }\n\n getCardColor(d) {\n if (this.panel.color.mode === 'opacity') {\n return this.panel.color.cardColor;\n } else if (this.panel.color.mode === 'spectrum') {\n return this.colorScale(d.value);\n } else if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex != -1 && this.panel.seriesFilterIndex != null) {\n return this.ctrl.discreteExtraSeries.getBucketColorSingle(d.values[this.panel.seriesFilterIndex]);\n } else {\n return this.ctrl.discreteExtraSeries.getBucketColor(d.values);\n }\n }\n }\n\n getCardOpacity(d) {\n if (this.panel.nullPointMode === 'as empty' && d.value == null ) {\n return 0;\n }\n if (this.panel.color.mode === 'opacity') {\n return this.opacityScale(d.value);\n } else {\n return 1;\n }\n }\n\n getCardStrokeWidth(d) {\n if (this.panel.color.mode === 'discrete') {\n return '1';\n }\n return '0';\n }\n\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n getEventOffset(event) {\n const elemOffset = this.$heatmap.offset();\n const x = Math.floor(event.clientX - elemOffset.left);\n const y = Math.floor(event.clientY - elemOffset.top);\n return { x, y };\n }\n\n onMouseDown(event) {\n const offset = this.getEventOffset(event);\n this.selection.active = true;\n this.selection.x1 = offset.x;\n\n this.mouseUpHandler = () => {\n this.onMouseUp();\n };\n\n $(document).one(\"mouseup\", this.mouseUpHandler.bind(this));\n }\n\n onMouseUp() {\n $(document).unbind(\"mouseup\", this.mouseUpHandler.bind(this));\n this.mouseUpHandler = null;\n this.selection.active = false;\n\n let selectionRange = Math.abs(this.selection.x2 - this.selection.x1);\n if (this.selection.x2 >= 0 && selectionRange > MIN_SELECTION_WIDTH) {\n let timeFrom = this.xScale.invert(Math.min(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize/2);\n let timeTo = this.xScale.invert(Math.max(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize/2);\n\n this.ctrl.timeSrv.setTime({\n from: moment.utc(timeFrom),\n to: moment.utc(timeTo)\n });\n }\n\n this.clearSelection();\n }\n\n onMouseLeave(e) {\n appEvents.emit('graph-hover-clear');\n this.clearCrosshair();\n //annotationTooltip.destroy();\n if (e.relatedTarget) {\n if (e.relatedTarget.className == \"statusmap-tooltip-extraseries graph-tooltip grafana-tooltip\" || e.relatedTarget.className == \"graph-tooltip-time\" ) {\n } else {\n this.tooltipExtraSeries.destroy();\n }\n }\n this.annotationTooltip.destroy(); \n }\n\n onMouseMove(event) {\n if (!this.heatmap) { return; }\n\n const offset = this.getEventOffset(event);\n if (this.selection.active) {\n // Clear crosshair and tooltip\n this.clearCrosshair();\n this.tooltip.destroy();\n this.annotationTooltip.destroy();\n\n this.selection.x2 = this.limitSelection(event.offsetX);\n this.drawSelection(this.selection.x1, this.selection.x2);\n } else {\n //const pos = this.getEventPos(event, offset);\n this.emitGraphHoverEvent(event);\n this.drawCrosshair(offset.x);\n this.tooltip.show(event); //, data); // pos, this.data\n this.annotationTooltip.show(event);\n }\n }\n\n public onMouseClick(event) {\n this.tooltipExtraSeries.show(event)\n if (this.ctrl.panel.usingUrl) {\n this.tooltip.destroy();\n }\n }\n\n getEventPos(event, offset) {\n const x = this.xScale.invert(offset.x - this.yAxisWidth).valueOf();\n const y = this.yScale.invert(offset.y - this.chartTop);\n const pos = {\n pageX: event.pageX,\n pageY: event.pageY,\n x: x,\n x1: x,\n y: y,\n y1: y,\n panelRelY: null,\n offset,\n };\n\n return pos;\n }\n\n emitGraphHoverEvent(event) {\n let x = this.xScale.invert(event.offsetX - this.yAxisWidth - this.xGridSize/2).valueOf();\n let y = this.yScale(event.offsetY);\n let pos = {\n pageX: event.pageX,\n pageY: event.pageY,\n x: x, x1: x,\n y: y, y1: y,\n panelRelY: 0\n };\n\n // Set minimum offset to prevent showing legend from another panel\n pos.panelRelY = Math.max(event.offsetY / this.height, 0.001);\n\n // broadcast to other graph panels that we are hovering\n appEvents.emit('graph-hover', {pos: pos, panel: this.panel});\n }\n\n limitSelection(x2) {\n x2 = Math.max(x2, this.yAxisWidth);\n x2 = Math.min(x2, this.chartWidth + this.yAxisWidth);\n return x2;\n }\n\n drawSelection(posX1, posX2) {\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-selection\").remove();\n let selectionX = Math.min(posX1, posX2);\n let selectionWidth = Math.abs(posX1 - posX2);\n\n if (selectionWidth > MIN_SELECTION_WIDTH) {\n this.heatmap.append(\"rect\")\n .attr(\"class\", \"status-heatmap-selection\")\n .attr(\"x\", selectionX)\n .attr(\"width\", selectionWidth)\n .attr(\"y\", this.chartTop)\n .attr(\"height\", this.chartHeight);\n }\n }\n }\n\n clearSelection() {\n this.selection.x1 = -1;\n this.selection.x2 = -1;\n\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-selection\").remove();\n }\n }\n\n\n drawCrosshair(position) {\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-crosshair\").remove();\n\n let posX = position;\n posX = Math.max(posX, this.yAxisWidth);\n posX = Math.min(posX, this.chartWidth + this.yAxisWidth);\n\n this.heatmap.append(\"g\")\n .attr(\"class\", \"status-heatmap-crosshair\")\n .attr(\"transform\", \"translate(\" + posX + \",0)\")\n .append(\"line\")\n .attr(\"x1\", 1)\n .attr(\"y1\", this.chartTop)\n .attr(\"x2\", 1)\n .attr(\"y2\", this.chartBottom)\n .attr(\"stroke-width\", 1);\n }\n }\n\n // map time to X\n drawSharedCrosshair(pos) {\n if (this.heatmap && this.ctrl.dashboard.graphTooltip !== 0) {\n const posX = this.xScale(pos.x) + this.yAxisWidth;\n this.drawCrosshair(posX);\n }\n }\n\n clearCrosshair() {\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-crosshair\").remove();\n }\n }\n\n\n render() {\n this.data = this.ctrl.data;\n this.panel = this.ctrl.panel;\n this.timeRange = this.ctrl.range;\n this.cardsData = this.ctrl.cardsData;\n\n if (!this.data || !this.cardsData || !this.setElementHeight()) {\n return;\n }\n\n // Draw default axes and return if no data\n if (_.isEmpty(this.cardsData.cards)) {\n this.addHeatmapCanvas();\n return;\n }\n\n this.addHeatmap();\n this.scope.yAxisWidth = this.yAxisWidth;\n this.scope.xAxisHeight = this.xAxisHeight;\n this.scope.chartHeight = this.chartHeight;\n this.scope.chartWidth = this.chartWidth;\n this.scope.chartTop = this.chartTop;\n }\n\n _renderAnnotations() {\n if (!this.ctrl.annotations || this.ctrl.annotations.length == 0) {\n return;\n }\n\n if (!this.heatmap) {\n return;\n }\n\n\n\n let annoData = _.map(this.ctrl.annotations, (d,i) => ({\"x\": Math.floor(this.yAxisWidth + this.xScale(d.time)), \"id\":i, \"anno\": d.source}));\n\n //({\"ctrl_annotations\": this.ctrl.annotations, \"annoData\": annoData});\n\n let anno = this.heatmap\n .append(\"g\")\n .attr(\"class\", \"statusmap-annotations\")\n .attr(\"transform\", \"translate(0.5,0)\")\n .selectAll(\".statusmap-annotations\")\n .data(annoData)\n .enter().append(\"g\")\n ;\n anno.append(\"line\")\n //.attr(\"class\", \"statusmap-annotation-tick\")\n .attr(\"x1\", d => d.x)\n .attr(\"y1\", this.chartTop)\n .attr(\"x2\", d => d.x)\n .attr(\"y2\", this.chartBottom)\n .style(\"stroke\", d => d.anno.iconColor)\n .style(\"stroke-width\", 1)\n .style(\"stroke-dasharray\", \"3,3\")\n ;\n anno.append(\"polygon\")\n .attr(\"points\", d => [[d.x, this.chartBottom+1], [d.x-5, this.chartBottom+6], [d.x+5, this.chartBottom+6]].join(\" \"))\n .style(\"stroke-width\", 0)\n .style(\"fill\", d => d.anno.iconColor)\n ;\n // Polygons didn't fire mouseevents\n anno.append(\"rect\")\n .attr(\"x\", d => d.x-5)\n .attr(\"width\", 10)\n .attr(\"y\", this.chartBottom+1)\n .attr(\"height\", 5)\n .attr(\"class\", \"statusmap-annotation-tick\")\n .attr(\"annoId\", d => d.id)\n .style(\"opacity\", 0)\n ;\n\n let $ticks = this.$heatmap.find(\".statusmap-annotation-tick\");\n $ticks\n .on(\"mouseenter\", (event) => {\n this.annotationTooltip.mouseOverAnnotationTick = true;\n })\n .on(\"mouseleave\", (event) => {\n this.annotationTooltip.mouseOverAnnotationTick = false;\n });\n }\n}\n\nfunction grafanaTimeFormat(ticks, min, max) {\n if (min && max && ticks) {\n let range = max - min;\n let secPerTick = (range/ticks) / 1000;\n let oneDay = 86400000;\n let oneYear = 31536000000;\n\n if (secPerTick <= 45) {\n return \"%H:%M:%S\";\n }\n if (secPerTick <= 7200 || range <= oneDay) {\n return \"%H:%M\";\n }\n if (secPerTick <= 80000) {\n return \"%m/%d %H:%M\";\n }\n if (secPerTick <= 2419200 || range <= oneYear) {\n return \"%m/%d\";\n }\n return \"%Y-%m\";\n }\n\n return \"%H:%M\";\n}\n"],"file":"rendering.js"} diff --git a/src/rendering.ts b/src/rendering.ts index 0c7311e..4eb7328 100644 --- a/src/rendering.ts +++ b/src/rendering.ts @@ -543,8 +543,8 @@ export class StatusmapRenderer { } else if (this.panel.color.mode === 'spectrum') { return this.colorScale(b.value); } else if (this.panel.color.mode === 'discrete') { - if (this.panel.seriesFilterIndex != -1 || this.panel.seriesFilterIndex != null) { - return this.ctrl.discreteExtraSeries.getBucketColorSingle(b.values[this.panel.seriesFilterIndex]); + if (this.panel.seriesFilterIndex != null && this.panel.seriesFilterIndex != -1) { + return this.ctrl.discreteExtraSeries.getBucketColorSingle(d.values[this.panel.seriesFilterIndex]); } else { return this.ctrl.discreteExtraSeries.getBucketColor(b.values); }