mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Merge branch 'ms-detection' of https://github.com/utkarshcmu/grafana into utkarshcmu-ms-detection
This commit is contained in:
commit
b6ac0860c6
@ -168,4 +168,14 @@ export default class TimeSeries {
|
||||
formatValue(value) {
|
||||
return this.valueFormater(value, this.decimals, this.scaledDecimals);
|
||||
}
|
||||
|
||||
isMsResolutionNeeded() {
|
||||
for (var i = 0; i<this.datapoints.length; i++) {
|
||||
var timestamp = this.datapoints[i][0].toString();
|
||||
if (timestamp.length === 13 && (timestamp % 1000) !== 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -109,7 +109,13 @@ function ($) {
|
||||
var plot = elem.data().plot;
|
||||
var plotData = plot.getData();
|
||||
var seriesList = getSeriesFn();
|
||||
var group, value, absoluteTime, relativeTime, hoverInfo, i, series, seriesHtml;
|
||||
var group, value, absoluteTime, relativeTime, hoverInfo, i, series, seriesHtml, tooltipFormat;
|
||||
|
||||
if (panel.tooltip.msResolution) {
|
||||
tooltipFormat = 'YYYY-MM-DD HH:mm:ss.SSS';
|
||||
} else {
|
||||
tooltipFormat = 'YYYY-MM-DD HH:mm:ss';
|
||||
}
|
||||
|
||||
if (dashboard.sharedCrosshair) {
|
||||
ctrl.publishAppEvent('setCrosshair', { pos: pos, scope: scope });
|
||||
@ -127,7 +133,7 @@ function ($) {
|
||||
seriesHtml = '';
|
||||
|
||||
relativeTime = dashboard.getRelativeTime(seriesHoverInfo.time);
|
||||
absoluteTime = dashboard.formatDate(seriesHoverInfo.time);
|
||||
absoluteTime = dashboard.formatDate(seriesHoverInfo.time, tooltipFormat);
|
||||
|
||||
for (i = 0; i < seriesHoverInfo.length; i++) {
|
||||
hoverInfo = seriesHoverInfo[i];
|
||||
@ -164,7 +170,7 @@ function ($) {
|
||||
value = series.formatValue(value);
|
||||
|
||||
relativeTime = dashboard.getRelativeTime(item.datapoint[0]);
|
||||
absoluteTime = dashboard.formatDate(item.datapoint[0]);
|
||||
absoluteTime = dashboard.formatDate(item.datapoint[0], tooltipFormat);
|
||||
|
||||
group += '<div class="graph-tooltip-value">' + value + '</div>';
|
||||
|
||||
|
@ -69,6 +69,7 @@ var panelDefaults = {
|
||||
tooltip : {
|
||||
value_type: 'cumulative',
|
||||
shared: true,
|
||||
msResolution: false,
|
||||
},
|
||||
// time overrides
|
||||
timeFrom: null,
|
||||
@ -200,6 +201,8 @@ class GraphCtrl extends MetricsPanelCtrl {
|
||||
}
|
||||
|
||||
this.datapointsCount += datapoints.length;
|
||||
|
||||
this.panel.tooltip.msResolution = this.panel.tooltip.msResolution || series.isMsResolutionNeeded();
|
||||
}
|
||||
|
||||
return series;
|
||||
|
@ -43,4 +43,78 @@ describe('GraphCtrl', function() {
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
describe('msResolution with second resolution timestamps', function() {
|
||||
beforeEach(function() {
|
||||
ctx.datasource.query = sinon.stub().returns(ctx.$q.when({
|
||||
data: [
|
||||
{ target: 'test.cpu1', datapoints: [[1234567890, 45], [1234567899, 60]]},
|
||||
{ target: 'test.cpu2', datapoints: [[1236547890, 55], [1234456709, 90]]}
|
||||
]
|
||||
}));
|
||||
ctx.ctrl.panel.tooltip.msResolution = false;
|
||||
ctx.ctrl.refreshData(ctx.datasource);
|
||||
ctx.scope.$digest();
|
||||
});
|
||||
|
||||
it('should not show millisecond resolution tooltip', function() {
|
||||
expect(ctx.ctrl.panel.tooltip.msResolution).to.be(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('msResolution with millisecond resolution timestamps', function() {
|
||||
beforeEach(function() {
|
||||
ctx.datasource.query = sinon.stub().returns(ctx.$q.when({
|
||||
data: [
|
||||
{ target: 'test.cpu1', datapoints: [[1234567890000, 45], [1234567899000, 60]]},
|
||||
{ target: 'test.cpu2', datapoints: [[1236547890001, 55], [1234456709000, 90]]}
|
||||
]
|
||||
}));
|
||||
ctx.ctrl.panel.tooltip.msResolution = false;
|
||||
ctx.ctrl.refreshData(ctx.datasource);
|
||||
ctx.scope.$digest();
|
||||
});
|
||||
|
||||
it('should show millisecond resolution tooltip', function() {
|
||||
expect(ctx.ctrl.panel.tooltip.msResolution).to.be(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('msResolution with millisecond resolution timestamps but with trailing zeroes', function() {
|
||||
beforeEach(function() {
|
||||
ctx.datasource.query = sinon.stub().returns(ctx.$q.when({
|
||||
data: [
|
||||
{ target: 'test.cpu1', datapoints: [[1234567890000, 45], [1234567899000, 60]]},
|
||||
{ target: 'test.cpu2', datapoints: [[1236547890000, 55], [1234456709000, 90]]}
|
||||
]
|
||||
}));
|
||||
ctx.ctrl.panel.tooltip.msResolution = false;
|
||||
ctx.ctrl.refreshData(ctx.datasource);
|
||||
ctx.scope.$digest();
|
||||
});
|
||||
|
||||
it('should not show millisecond resolution tooltip', function() {
|
||||
expect(ctx.ctrl.panel.tooltip.msResolution).to.be(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('msResolution with millisecond resolution timestamps in one of the series', function() {
|
||||
beforeEach(function() {
|
||||
ctx.datasource.query = sinon.stub().returns(ctx.$q.when({
|
||||
data: [
|
||||
{ target: 'test.cpu1', datapoints: [[1234567890000, 45], [1234567899000, 60]]},
|
||||
{ target: 'test.cpu2', datapoints: [[1236547890010, 55], [1234456709000, 90]]},
|
||||
{ target: 'test.cpu3', datapoints: [[1236547890000, 65], [1234456709000, 120]]}
|
||||
]
|
||||
}));
|
||||
ctx.ctrl.panel.tooltip.msResolution = false;
|
||||
ctx.ctrl.refreshData(ctx.datasource);
|
||||
ctx.scope.$digest();
|
||||
});
|
||||
|
||||
it('should show millisecond resolution tooltip', function() {
|
||||
expect(ctx.ctrl.panel.tooltip.msResolution).to.be(true);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -323,5 +323,27 @@ define([
|
||||
});
|
||||
});
|
||||
|
||||
describe('Formatting epoch timestamp when timezone is set as utc', function() {
|
||||
var dashboard;
|
||||
|
||||
beforeEach(function() {
|
||||
dashboard = _dashboardSrv.create({
|
||||
timezone: 'utc',
|
||||
});
|
||||
});
|
||||
|
||||
it('Should format timestamp with second resolution by default', function() {
|
||||
expect(dashboard.formatDate(1234567890000)).to.be('2009-02-13 23:31:30');
|
||||
});
|
||||
|
||||
it('Should format timestamp with second resolution even if second format is passed as parameter', function() {
|
||||
expect(dashboard.formatDate(1234567890007,'YYYY-MM-DD HH:mm:ss')).to.be('2009-02-13 23:31:30');
|
||||
});
|
||||
|
||||
it('Should format timestamp with millisecond resolution if format is passed as parameter', function() {
|
||||
expect(dashboard.formatDate(1234567890007,'YYYY-MM-DD HH:mm:ss.SSS')).to.be('2009-02-13 23:31:30.007');
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user