From 1d15f3c11b241b24adfc91fa747accfebe569a2e Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Tue, 22 Dec 2020 16:29:22 +0300 Subject: [PATCH] Fill trends with null values --- src/datasource-zabbix/datasource.ts | 16 ++++++++++++--- src/datasource-zabbix/timeseries.ts | 30 +++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/datasource-zabbix/datasource.ts b/src/datasource-zabbix/datasource.ts index 9e587a0..afc39d4 100644 --- a/src/datasource-zabbix/datasource.ts +++ b/src/datasource-zabbix/datasource.ts @@ -6,7 +6,7 @@ import * as utils from './utils'; import * as migrations from './migrations'; import * as metricFunctions from './metricFunctions'; import * as c from './constants'; -import { align } from './timeseries'; +import { align, fillTrendsWithNulls } from './timeseries'; import dataProcessor from './dataProcessor'; import responseHandler from './responseHandler'; import problemsHandler from './problemsHandler'; @@ -251,13 +251,16 @@ export class ZabbixDatasource extends DataSourceApi { + return !disableDataAlignment ? this.fillTrendTimeSeriesWithNulls(timeseries) : timeseries; + }); } else { getHistoryPromise = this.zabbix.getHistoryTS(items, timeRange, options) .then(timeseries => { - const disableDataAlignment = this.disableDataAlignment || target.options?.disableDataAlignment; return !disableDataAlignment ? this.alignTimeSeriesData(timeseries) : timeseries; }); } @@ -284,6 +287,13 @@ export class ZabbixDatasource extends DataSourceApi frame_ts) { + // Move frame window to next non-empty interval and fill empty by null + while (frame_ts < point_frame_ts) { + filled_ts.push([null, frame_ts]); + frame_ts += interval; + } + } + + filled_ts.push(point); + frame_ts += interval; + } + return filled_ts; +} + /** * Group points by given time interval * datapoints: [[, ], ...]