mirror of
https://github.com/timberjoegithub/grafana-statusmap.git
synced 2026-07-21 23:42:03 +00:00
override interval to specify minimal card width
This commit is contained in:
@@ -87,4 +87,67 @@ export class ColorModeDiscrete {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
roundIntervalCeil(interval) {
|
||||||
|
switch (true) {
|
||||||
|
case interval <= 10:
|
||||||
|
return 10; // 0.01s
|
||||||
|
case interval <= 20:
|
||||||
|
return 20; // 0.02s
|
||||||
|
case interval <= 50:
|
||||||
|
return 50; // 0.05s
|
||||||
|
case interval <= 100:
|
||||||
|
return 100; // 0.1s
|
||||||
|
case interval <= 200:
|
||||||
|
return 200; // 0.2s
|
||||||
|
case interval <= 500:
|
||||||
|
return 500; // 0.5s
|
||||||
|
case interval <= 1000:
|
||||||
|
return 1000; // 1s
|
||||||
|
case interval <= 2000:
|
||||||
|
return 2000; // 2s
|
||||||
|
case interval <= 5000:
|
||||||
|
return 5000; // 5s
|
||||||
|
case interval <= 10000:
|
||||||
|
return 10000; // 10s
|
||||||
|
case interval <= 15000:
|
||||||
|
return 15000; // 15s
|
||||||
|
case interval <= 20000:
|
||||||
|
return 20000; // 20s
|
||||||
|
case interval <= 30000:
|
||||||
|
return 30000; // 30s
|
||||||
|
case interval <= 60000:
|
||||||
|
return 60000; // 1m
|
||||||
|
case interval <= 120000:
|
||||||
|
return 120000; // 2m
|
||||||
|
case interval <= 300000:
|
||||||
|
return 300000; // 5m
|
||||||
|
case interval <= 600000:
|
||||||
|
return 600000; // 10m
|
||||||
|
case interval <= 900000:
|
||||||
|
return 900000; // 15m
|
||||||
|
case interval <= 1200000:
|
||||||
|
return 1200000; // 20m
|
||||||
|
case interval <= 1800000:
|
||||||
|
return 1800000; // 30m
|
||||||
|
case interval <= 3600000:
|
||||||
|
return 3600000; // 1h
|
||||||
|
case interval <= 7200000:
|
||||||
|
return 7200000; // 2h
|
||||||
|
case interval <= 10800000:
|
||||||
|
return 10800000; // 3h
|
||||||
|
case interval <= 21600000:
|
||||||
|
return 21600000; // 6h
|
||||||
|
case interval <= 43200000:
|
||||||
|
return 43200000; // 12h
|
||||||
|
case interval <= 86400000:
|
||||||
|
return 86400000; // 1d
|
||||||
|
case interval <= 604800000:
|
||||||
|
return 604800000; // 1w
|
||||||
|
case interval <= 2592000000:
|
||||||
|
return 2592000000; // 30d
|
||||||
|
default:
|
||||||
|
return 31536000000; // 1y
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -297,6 +297,10 @@ export default function link(scope, elem, attrs, ctrl) {
|
|||||||
tooltip.mouseOverBucket = false;
|
tooltip.mouseOverBucket = false;
|
||||||
resetCardHighLight(event);
|
resetCardHighLight(event);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ctrl.events.emit('render-complete', {
|
||||||
|
"chartWidth": chartWidth
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function highlightCard(event) {
|
function highlightCard(event) {
|
||||||
|
|||||||
@@ -105,6 +105,11 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl {
|
|||||||
this.colorModes = colorModes;
|
this.colorModes = colorModes;
|
||||||
this.colorSchemes = colorSchemes;
|
this.colorSchemes = colorSchemes;
|
||||||
|
|
||||||
|
// default graph width for discrete card width calculation
|
||||||
|
this.graph = {
|
||||||
|
"chartWidth" : -1
|
||||||
|
};
|
||||||
|
|
||||||
this.multipleValues = false;
|
this.multipleValues = false;
|
||||||
this.noColorDefined = false;
|
this.noColorDefined = false;
|
||||||
|
|
||||||
@@ -127,8 +132,58 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl {
|
|||||||
this.events.on('init-edit-mode', this.onInitEditMode);
|
this.events.on('init-edit-mode', this.onInitEditMode);
|
||||||
this.events.on('render', this.onRender);
|
this.events.on('render', this.onRender);
|
||||||
this.events.on('refresh', this.postRefresh);
|
this.events.on('refresh', this.postRefresh);
|
||||||
|
this.events.on('render-complete', this.onRenderComplete);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onRenderComplete = (data) => {
|
||||||
|
this.graph.chartWidth = data.chartWidth;
|
||||||
|
};
|
||||||
|
|
||||||
|
// override calculateInterval for discrete color mode
|
||||||
|
calculateInterval = () => {
|
||||||
|
let chartWidth = this.graph.chartWidth;
|
||||||
|
|
||||||
|
if (chartWidth == -1) {
|
||||||
|
// approximate panel width
|
||||||
|
chartWidth = Math.ceil($(window).width() * (this.panel.gridPos.w / 24));
|
||||||
|
}
|
||||||
|
|
||||||
|
let minCardWidth = 5;
|
||||||
|
let minSpacing = 2;
|
||||||
|
let maxCardsCount = Math.ceil(chartWidth / (minCardWidth + minSpacing));
|
||||||
|
|
||||||
|
let intervalMs;
|
||||||
|
let rangeMs = this.range.to.valueOf() - this.range.from.valueOf();
|
||||||
|
|
||||||
|
// this is minimal interval! kbn.round_interval will lower it.
|
||||||
|
intervalMs = this.discreteHelper.roundIntervalCeil(rangeMs / maxCardsCount);
|
||||||
|
|
||||||
|
// Calculate low limit of interval
|
||||||
|
let lowLimitMs = 1; // 1 millisecond default low limit
|
||||||
|
let intervalOverride = this.panel.interval;
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intervalOverride) {
|
||||||
|
if (intervalOverride[0] === '>') {
|
||||||
|
intervalOverride = intervalOverride.slice(1);
|
||||||
|
}
|
||||||
|
lowLimitMs = kbn.interval_to_ms(intervalOverride);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lowLimitMs > intervalMs) {
|
||||||
|
intervalMs = lowLimitMs;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.intervalMs = intervalMs;
|
||||||
|
this.interval = kbn.secondsToHms(intervalMs / 1000);
|
||||||
|
};
|
||||||
|
|
||||||
onDataReceived = (dataList) => {
|
onDataReceived = (dataList) => {
|
||||||
this.data = dataList;
|
this.data = dataList;
|
||||||
this.cardsData = this.convertToCards(this.data);
|
this.cardsData = this.convertToCards(this.data);
|
||||||
@@ -268,5 +323,4 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl {
|
|||||||
|
|
||||||
return cardsData;
|
return cardsData;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user