diff --git a/src/datasource-zabbix/datasource.ts b/src/datasource-zabbix/datasource.ts
index 97b415d..6ad2cc5 100644
--- a/src/datasource-zabbix/datasource.ts
+++ b/src/datasource-zabbix/datasource.ts
@@ -351,6 +351,8 @@ export class ZabbixDatasource {
itServiceFilter = this.replaceTemplateVars(target.itServiceFilter, options.scopedVars);
}
+ options.slaInterval = target.slaInterval;
+
return this.zabbix.getITServices(itServiceFilter)
.then(itservices => {
if (options.isOldVersion) {
diff --git a/src/datasource-zabbix/migrations.ts b/src/datasource-zabbix/migrations.ts
index 3023b90..0d300b0 100644
--- a/src/datasource-zabbix/migrations.ts
+++ b/src/datasource-zabbix/migrations.ts
@@ -48,7 +48,12 @@ function migrateQueryType(target) {
delete target.mode;
}
}
+}
+function migrateSLA(target) {
+ if (target.queryType === c.MODE_ITSERVICE && !target.slaInterval) {
+ target.slaInterval = 'none';
+ }
}
export function migrate(target) {
@@ -59,6 +64,7 @@ export function migrate(target) {
}
migratePercentileAgg(target);
migrateQueryType(target);
+ migrateSLA(target);
return target;
}
diff --git a/src/datasource-zabbix/partials/query.editor.html b/src/datasource-zabbix/partials/query.editor.html
index 2841971..c7b0b37 100644
--- a/src/datasource-zabbix/partials/query.editor.html
+++ b/src/datasource-zabbix/partials/query.editor.html
@@ -40,7 +40,7 @@
+
diff --git a/src/datasource-zabbix/query.controller.js b/src/datasource-zabbix/query.controller.js
index a4bf66e..2515869 100644
--- a/src/datasource-zabbix/query.controller.js
+++ b/src/datasource-zabbix/query.controller.js
@@ -35,6 +35,7 @@ function getTargetDefaults() {
function getSLATargetDefaults() {
return {
slaProperty: { name: "SLA", property: "sla" },
+ slaInterval: 'none',
};
}
@@ -93,6 +94,16 @@ export class ZabbixQueryController extends QueryCtrl {
{name: "Down time", property: "downtimeTime"}
];
+ this.slaIntervals = [
+ { text: 'No interval', value: 'none' },
+ { text: 'Auto', value: 'auto' },
+ { text: '1 hour', value: '1h' },
+ { text: '12 hours', value: '12h' },
+ { text: '24 hours', value: '1d' },
+ { text: '1 week', value: '1w' },
+ { text: '1 month', value: '1M' },
+ ];
+
this.ackFilters = [
{text: 'all triggers', value: 2},
{text: 'unacknowledged', value: 0},
diff --git a/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts b/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts
index 657fdab..89dc84f 100644
--- a/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts
+++ b/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.ts
@@ -366,11 +366,21 @@ export class ZabbixAPIConnector {
}
getSLA(serviceids, timeRange, options) {
- const intervals = buildSLAIntervals(timeRange, options.intervalMs);
- const params = {
+ const [timeFrom, timeTo] = timeRange;
+ let intervals = [{ from: timeFrom, to: timeTo }];
+ if (options.slaInterval === 'auto') {
+ const interval = getSLAInterval(options.intervalMs);
+ intervals = buildSLAIntervals(timeRange, interval);
+ } else if (options.slaInterval !== 'none') {
+ const interval = utils.parseInterval(options.slaInterval) / 1000;
+ intervals = buildSLAIntervals(timeRange, interval);
+ }
+
+ const params: any = {
serviceids,
intervals
};
+
return this.request('service.getsla', params);
}
@@ -667,19 +677,18 @@ function getSLAInterval(intervalMs) {
return Math.max(interval, MIN_SLA_INTERVAL);
}
-function buildSLAIntervals(timeRange, intervalMs) {
+function buildSLAIntervals(timeRange, interval) {
let [timeFrom, timeTo] = timeRange;
- const slaInterval = getSLAInterval(intervalMs);
const intervals = [];
// Align time range with calculated interval
- timeFrom = Math.floor(timeFrom / slaInterval) * slaInterval;
- timeTo = Math.ceil(timeTo / slaInterval) * slaInterval;
+ timeFrom = Math.floor(timeFrom / interval) * interval;
+ timeTo = Math.ceil(timeTo / interval) * interval;
- for (let i = timeFrom; i <= timeTo - slaInterval; i += slaInterval) {
+ for (let i = timeFrom; i <= timeTo - interval; i += interval) {
intervals.push({
from : i,
- to : (i + slaInterval)
+ to : (i + interval)
});
}