From 7a1405405764cef5005adc78ff39b118f60e8093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Fri, 20 Feb 2015 14:07:24 +0100 Subject: [PATCH] Graph: Shared tooltip improvement, can now support metrics of different resolution/intervals, Closes #978, Fixes #1499 --- CHANGELOG.md | 1 + src/app/panels/graph/graph.tooltip.js | 54 ++++----------------------- src/test/specs/graph-tooltip-specs.js | 18 --------- 3 files changed, 9 insertions(+), 64 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e1f1f9aade..dc509eb001a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Dashboard title change & save will no longer create a new dashboard, it will just change the title. **Enhancements** +- [Issue #978](https://github.com/grafana/grafana/issues/978). Graph: Shared tooltip improvement, can now support metrics of different resolution/intervals - [Issue #1297](https://github.com/grafana/grafana/issues/1297). Graphite: Added cumulative and minimumBelow graphite functions - [Issue #1296](https://github.com/grafana/grafana/issues/1296). InfluxDB: Auto escape column names with special characters. Thanks @steven-aerts - [Issue #1321](https://github.com/grafana/grafana/issues/1321). SingleStatPanel: You can now use template variables in pre & postfix diff --git a/src/app/panels/graph/graph.tooltip.js b/src/app/panels/graph/graph.tooltip.js index 9e0ff0b8c7b..d4690bea96d 100644 --- a/src/app/panels/graph/graph.tooltip.js +++ b/src/app/panels/graph/graph.tooltip.js @@ -9,7 +9,7 @@ function ($) { var $tooltip = $('
'); - this.findHoverIndexFromDataPoints = function(posX, series,last) { + this.findHoverIndexFromDataPoints = function(posX, series, last) { var ps = series.datapoints.pointsize; var initial = last*ps; var len = series.datapoints.points.length; @@ -38,34 +38,10 @@ function ($) { }; this.getMultiSeriesPlotHoverInfo = function(seriesList, pos) { - var value, i, series, hoverIndex, seriesTmp; + var value, i, series, hoverIndex; var results = []; - var pointCount; - for (i = 0; i < seriesList.length; i++) { - seriesTmp = seriesList[i]; - if (!seriesTmp.data.length) { continue; } - - if (!pointCount) { - series = seriesTmp; - pointCount = series.data.length; - continue; - } - - if (seriesTmp.data.length !== pointCount) { - results.pointCountMismatch = true; - return results; - } - } - - hoverIndex = this.findHoverIndexFromData(pos.x, series); - var lasthoverIndex = 0; - if(!scope.panel.steppedLine) { - lasthoverIndex = hoverIndex; - } - //now we know the current X (j) position for X and Y values - results.time = series.data[hoverIndex][0]; var last_value = 0; //needed for stacked values for (i = 0; i < seriesList.length; i++) { @@ -76,6 +52,9 @@ function ($) { continue; } + hoverIndex = this.findHoverIndexFromData(pos.x, series); + results.time = series.data[hoverIndex][0]; + if (scope.panel.stack) { if (scope.panel.tooltip.value_type === 'individual') { value = series.data[hoverIndex][1]; @@ -90,19 +69,9 @@ function ($) { // Highlighting multiple Points depending on the plot type if (scope.panel.steppedLine || (scope.panel.stack && scope.panel.nullPointMode == "null")) { // stacked and steppedLine plots can have series with different length. - // Stacked series can increase its length on each new stacked serie if null points found, - // to speed the index search we begin always on the las found hoverIndex. - var newhoverIndex = this.findHoverIndexFromDataPoints(pos.x, series,lasthoverIndex); - // update lasthoverIndex depends also on the plot type. - if(!scope.panel.steppedLine) { - // on stacked graphs new will be always greater than last - lasthoverIndex = newhoverIndex; - } else { - // if steppeLine, not always series increases its length, so we should begin - // to search correct index from the original hoverIndex on each serie. - lasthoverIndex = hoverIndex; - } - + // Stacked series can increase its length on each new stacked serie if null points found, + // to speed the index search we begin always on the last found hoverIndex. + var newhoverIndex = this.findHoverIndexFromDataPoints(pos.x, series, hoverIndex); results.push({ value: value, hoverIndex: newhoverIndex}); } else { results.push({ value: value, hoverIndex: hoverIndex}); @@ -141,13 +110,6 @@ function ($) { plot.unhighlight(); var seriesHoverInfo = self.getMultiSeriesPlotHoverInfo(plotData, pos); - if (seriesHoverInfo.pointCountMismatch) { - self.showTooltip('Shared tooltip error', '', pos); - return; - } seriesHtml = ''; timestamp = dashboard.formatDate(seriesHoverInfo.time); diff --git a/src/test/specs/graph-tooltip-specs.js b/src/test/specs/graph-tooltip-specs.js index 155469f18a7..da02b9f2e0a 100644 --- a/src/test/specs/graph-tooltip-specs.js +++ b/src/test/specs/graph-tooltip-specs.js @@ -60,20 +60,6 @@ define([ }); }); - describeSharedTooltip("point count missmatch", function(ctx) { - ctx.setup(function() { - ctx.data = [ - { data: [[10, 15], [12, 20]], }, - { data: [[10, 2]] } - ]; - ctx.pos = { x: 11 }; - }); - - it('should set pointCountMismatch to true', function() { - expect(ctx.results.pointCountMismatch).to.be(true); - }); - }); - describeSharedTooltip("one series is hidden", function(ctx) { ctx.setup(function() { ctx.data = [ @@ -82,10 +68,6 @@ define([ ]; ctx.pos = { x: 11 }; }); - - it('should set pointCountMismatch to false', function() { - expect(ctx.results.pointCountMismatch).to.be(undefined); - }); }); describeSharedTooltip("steppedLine false, stack true, individual false", function(ctx) {