From 6d91e06f4d6f299304c382b87e16af4cd446ee64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Tue, 13 Nov 2018 16:01:52 +0100 Subject: [PATCH] refactoring back the interval calculation, needs to be different for react panels --- public/app/features/dashboard/utils/panel.ts | 40 +++++-------------- .../app/features/panel/metrics_panel_ctrl.ts | 35 ++++++++-------- 2 files changed, 27 insertions(+), 48 deletions(-) diff --git a/public/app/features/dashboard/utils/panel.ts b/public/app/features/dashboard/utils/panel.ts index 6e0138eeec8..0b0f127e2aa 100644 --- a/public/app/features/dashboard/utils/panel.ts +++ b/public/app/features/dashboard/utils/panel.ts @@ -11,7 +11,6 @@ import { isString as _isString } from 'lodash'; import * as rangeUtil from 'app/core/utils/rangeutil'; import * as dateMath from 'app/core/utils/datemath'; import appEvents from 'app/core/app_events'; -import kbn from 'app/core/utils/kbn'; // Services import templateSrv from 'app/features/templating/template_srv'; @@ -100,10 +99,12 @@ export const toggleLegend = (panel: PanelModel) => { refreshPanel(panel); }; -export const applyPanelTimeOverrides = ( - panel: PanelModel, - timeRange: TimeRange -): { timeInfo: string; timeRange: TimeRange } => { +export interface TimeOverrideResult { + timeRange: TimeRange; + timeInfo: string; +} + +export function applyPanelTimeOverrides(panel: PanelModel, timeRange: TimeRange): TimeOverrideResult { const newTimeData = { timeInfo: '', timeRange: timeRange, @@ -156,34 +157,11 @@ export const applyPanelTimeOverrides = ( } return newTimeData; -}; +} -export const getResolution = (panel: PanelModel): number => { +export function getResolution(panel: PanelModel): number { const htmlEl = document.getElementsByTagName('html')[0]; const width = htmlEl.getBoundingClientRect().width; // https://stackoverflow.com/a/21454625 return panel.maxDataPoints ? panel.maxDataPoints : Math.ceil(width * (panel.gridPos.w / 24)); -}; - -export const calculateInterval = ( - panel: PanelModel, - datasource, - timeRange: TimeRange, - resolution: number -): { interval: string; intervalMs: number } => { - let intervalOverride = panel.interval; - - // if no panel interval check datasource - if (intervalOverride) { - intervalOverride = templateSrv.replace(intervalOverride, panel.scopedVars); - } else if (datasource && datasource.interval) { - intervalOverride = datasource.interval; - } - - const res = kbn.calculateInterval(timeRange, resolution, intervalOverride); - - return { - interval: res.interval, - intervalMs: res.intervalMs, - }; -}; +} diff --git a/public/app/features/panel/metrics_panel_ctrl.ts b/public/app/features/panel/metrics_panel_ctrl.ts index 6168ddf27d5..e19a36294ce 100644 --- a/public/app/features/panel/metrics_panel_ctrl.ts +++ b/public/app/features/panel/metrics_panel_ctrl.ts @@ -1,15 +1,12 @@ import _ from 'lodash'; +import kbn from 'app/core/utils/kbn'; import config from 'app/core/config'; -// import kbn from 'app/core/utils/kbn'; + import { PanelCtrl } from 'app/features/panel/panel_ctrl'; import { getExploreUrl } from 'app/core/utils/explore'; import { metricsTabDirective } from './metrics_tab'; -import { - applyPanelTimeOverrides as applyPanelTimeOverridesUtil, - calculateInterval as calculateIntervalUtil, - getResolution, -} from 'app/features/dashboard/utils/panel'; +import { applyPanelTimeOverrides, getResolution } from 'app/features/dashboard/utils/panel'; class MetricsPanelCtrl extends PanelCtrl { scope: any; @@ -136,26 +133,30 @@ class MetricsPanelCtrl extends PanelCtrl { updateTimeRange(datasource?) { this.datasource = datasource || this.datasource; this.range = this.timeSrv.timeRange(); - - this.applyPanelTimeOverrides(); - this.resolution = getResolution(this.panel); + const newTimeData = applyPanelTimeOverrides(this.panel, this.range); + this.timeInfo = newTimeData.timeInfo; + this.range = newTimeData.timeRange; + this.calculateInterval(); return this.datasource; } calculateInterval() { - const interval = calculateIntervalUtil(this.panel, this.datasource, this.range, this.resolution); - this.interval = interval.interval; - this.intervalMs = this.intervalMs; - } + let intervalOverride = this.panel.interval; - applyPanelTimeOverrides() { - const newTimeData = applyPanelTimeOverridesUtil(this.panel, this.range); - this.timeInfo = newTimeData.timeInfo; - this.range = newTimeData.timeRange; + // if no panel interval check datasource + if (intervalOverride) { + intervalOverride = this.templateSrv.replace(intervalOverride, this.panel.scopedVars); + } else if (this.datasource && this.datasource.interval) { + intervalOverride = this.datasource.interval; + } + + const res = kbn.calculateInterval(this.range, this.resolution, intervalOverride); + this.interval = res.interval; + this.intervalMs = res.intervalMs; } issueQueries(datasource) {