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

pull/14020/head
Torkel Ödegaard 7 years ago
parent f026be3790
commit 6d91e06f4d
  1. 40
      public/app/features/dashboard/utils/panel.ts
  2. 35
      public/app/features/panel/metrics_panel_ctrl.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,
};
};
}

@ -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) {

Loading…
Cancel
Save