From 736f05d398155772d227ffc2f6737b4424a5a084 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 6 Aug 2021 12:31:05 +0300 Subject: [PATCH] Fix data alignment for db connection queries --- pkg/datasource/models.go | 10 ++++++++-- pkg/datasource/resource_handler.go | 4 ++++ src/datasource-zabbix/datasource.ts | 19 ++++++++++++------- src/datasource-zabbix/responseHandler.ts | 5 ++++- src/datasource-zabbix/utils.ts | 15 ++++++++------- 5 files changed, 36 insertions(+), 17 deletions(-) diff --git a/pkg/datasource/models.go b/pkg/datasource/models.go index 577d692..e6bef47 100644 --- a/pkg/datasource/models.go +++ b/pkg/datasource/models.go @@ -46,8 +46,14 @@ type ZabbixDatasourceSettings struct { } type DBConnectionPostProcessingRequest struct { - Query QueryModel `json:"query"` - Series []*timeseries.TimeSeriesData `json:"series"` + Query QueryModel `json:"query"` + TimeRange TimeRangePostProcessingRequest `json:"timeRange"` + Series []*timeseries.TimeSeriesData `json:"series"` +} + +type TimeRangePostProcessingRequest struct { + From int64 + To int64 } type ZabbixAPIResourceRequest struct { diff --git a/pkg/datasource/resource_handler.go b/pkg/datasource/resource_handler.go index e01389f..92f3b59 100644 --- a/pkg/datasource/resource_handler.go +++ b/pkg/datasource/resource_handler.go @@ -4,6 +4,7 @@ import ( "encoding/json" "io/ioutil" "net/http" + "time" "github.com/alexanderzobnin/grafana-zabbix/pkg/zabbix" "github.com/grafana/grafana-plugin-sdk-go/backend/resource/httpadapter" @@ -88,6 +89,9 @@ func (ds *ZabbixDatasource) DBConnectionPostProcessingHandler(rw http.ResponseWr return } + reqData.Query.TimeRange.From = time.Unix(reqData.TimeRange.From, 0) + reqData.Query.TimeRange.To = time.Unix(reqData.TimeRange.To, 0) + frames, err := dsInstance.applyDataProcessing(req.Context(), &reqData.Query, reqData.Series) resultJson, err := json.Marshal(frames) diff --git a/src/datasource-zabbix/datasource.ts b/src/datasource-zabbix/datasource.ts index dc0a172..7feffc0 100644 --- a/src/datasource-zabbix/datasource.ts +++ b/src/datasource-zabbix/datasource.ts @@ -319,21 +319,25 @@ export class ZabbixDatasource extends DataSourceApi 2 ? parsedInterval[2] : 's'); } +// Returns interval in milliseconds export function parseInterval(interval: string): number { const intervalPattern = /(^[\d]+)(y|M|w|d|h|m|s)/g; const momentInterval: any[] = intervalPattern.exec(interval); @@ -315,7 +316,7 @@ export function convertToZabbixAPIUrl(url) { * when waiting for result. */ export function callOnce(func, promiseKeeper) { - return function() { + return function () { if (!promiseKeeper) { promiseKeeper = Promise.resolve( func.apply(this, arguments) @@ -337,7 +338,7 @@ export function callOnce(func, promiseKeeper) { * @param {*} funcsArray functions to apply */ export function sequence(funcsArray) { - return function(result) { + return function (result) { for (let i = 0; i < funcsArray.length; i++) { result = funcsArray[i].call(this, result); } @@ -399,7 +400,7 @@ export function parseTags(tagStr: string): any[] { let tags: any[] = _.map(tagStr.split(','), (tag) => tag.trim()); tags = _.map(tags, (tag) => { const tagParts = tag.split(':'); - return {tag: tagParts[0].trim(), value: tagParts[1].trim()}; + return { tag: tagParts[0].trim(), value: tagParts[1].trim() }; }); return tags; }