Browse Source

refactoring back the interval calculation, needs to be different for react panels

Torkel Ödegaard 7 years ago
parent
commit
6d91e06f4d

+ 9 - 31
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,
-  };
-};
+}

+ 18 - 17
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) {