From 3e0b92d6feca7da9603ca2038099fbdc6e6c40e6 Mon Sep 17 00:00:00 2001 From: Chris Burkhart Date: Mon, 24 Jul 2017 09:55:57 -0700 Subject: [PATCH] Enable datasources to be able to round off to a UTC day properly --- public/app/core/utils/datemath.ts | 8 ++++++-- public/app/features/dashboard/time_srv.ts | 5 +++-- public/app/features/panel/metrics_panel_ctrl.ts | 3 +++ public/test/core/utils/datemath_specs.ts | 8 ++++++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/public/app/core/utils/datemath.ts b/public/app/core/utils/datemath.ts index 2aa793016ba..f5608443f49 100644 --- a/public/app/core/utils/datemath.ts +++ b/public/app/core/utils/datemath.ts @@ -5,7 +5,7 @@ import moment from 'moment'; var units = ['y', 'M', 'w', 'd', 'h', 'm', 's']; -export function parse(text, roundUp?) { +export function parse(text, roundUp?, timezone?) { if (!text) { return undefined; } if (moment.isMoment(text)) { return text; } if (_.isDate(text)) { return moment(text); } @@ -16,7 +16,11 @@ export function parse(text, roundUp?) { var parseString; if (text.substring(0, 3) === 'now') { - time = moment(); + if (timezone === 'utc') { + time = moment.utc(); + } else { + time = moment(); + } mathString = text.substring('now'.length); } else { index = text.indexOf('||'); diff --git a/public/app/features/dashboard/time_srv.ts b/public/app/features/dashboard/time_srv.ts index abde4152b63..ef5dead40a7 100644 --- a/public/app/features/dashboard/time_srv.ts +++ b/public/app/features/dashboard/time_srv.ts @@ -199,10 +199,11 @@ class TimeSrv { from: moment.isMoment(this.time.from) ? moment(this.time.from) : this.time.from, to: moment.isMoment(this.time.to) ? moment(this.time.to) : this.time.to, }; + var timezone = this.dashboard && this.dashboard.getTimezone ? this.dashboard.getTimezone() : 'local'; return { - from: dateMath.parse(raw.from, false), - to: dateMath.parse(raw.to, true), + from: dateMath.parse(raw.from, false, timezone), + to: dateMath.parse(raw.to, true, timezone), raw: raw }; } diff --git a/public/app/features/panel/metrics_panel_ctrl.ts b/public/app/features/panel/metrics_panel_ctrl.ts index 0e94df437a8..1ae24066bb9 100644 --- a/public/app/features/panel/metrics_panel_ctrl.ts +++ b/public/app/features/panel/metrics_panel_ctrl.ts @@ -221,7 +221,10 @@ class MetricsPanelCtrl extends PanelCtrl { "__interval_ms": {text: this.intervalMs, value: this.intervalMs}, }); + var timezone = this.dashboard.getTimezone ? this.dashboard.getTimezone() : 'local'; + var metricsQuery = { + timezone: timezone, panelId: this.panel.id, range: this.range, rangeRaw: this.range.raw, diff --git a/public/test/core/utils/datemath_specs.ts b/public/test/core/utils/datemath_specs.ts index c6096485f65..b919653c2c8 100644 --- a/public/test/core/utils/datemath_specs.ts +++ b/public/test/core/utils/datemath_specs.ts @@ -46,6 +46,14 @@ describe("DateMath", () => { expect(startOfDay).to.be(expected.getTime()); }); + it("now/d on a utc dashboard should be start of the current day in UTC time", () => { + var today = new Date(); + var expected = new Date(Date.UTC(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0, 0)); + + var startOfDay = dateMath.parse('now/d', false, 'utc').valueOf(); + expect(startOfDay).to.be(expected.getTime()); + }); + describe('subtraction', () => { var now; var anchored;