From ee2cc49ba1d7ce640992250413acda372fefee96 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Mon, 1 Jun 2020 12:50:22 +0300 Subject: [PATCH] do not cache history requests --- pkg/datasource.go | 2 +- pkg/resource_handler.go | 1 - pkg/zabbix_api.go | 14 ++++++++++++-- pkg/zabbix_api_core.go | 1 + 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pkg/datasource.go b/pkg/datasource.go index 8ee827e..82b1e5f 100644 --- a/pkg/datasource.go +++ b/pkg/datasource.go @@ -131,7 +131,7 @@ func newZabbixDatasource(dsInfo *backend.DataSourceInstanceSettings) (*ZabbixDat url: zabbixURL, dsInfo: dsInfo, Settings: zabbixSettings, - queryCache: NewCache(10*time.Minute, 10*time.Minute), + queryCache: NewCache(zabbixSettings.CacheTTL, 10*time.Minute), httpClient: &http.Client{ Transport: &http.Transport{ TLSClientConfig: &tls.Config{ diff --git a/pkg/resource_handler.go b/pkg/resource_handler.go index bc7e290..b90790c 100644 --- a/pkg/resource_handler.go +++ b/pkg/resource_handler.go @@ -38,7 +38,6 @@ func (ds *ZabbixDatasource) zabbixAPIHandler(rw http.ResponseWriter, req *http.R pluginCxt := httpadapter.PluginConfigFromContext(req.Context()) dsInstance, err := ds.GetDatasource(pluginCxt) - ds.logger.Debug("Invoke Zabbix API call", "ds", pluginCxt.DataSourceInstanceSettings.Name, "method", reqData.Method) apiReq := &ZabbixAPIRequest{Method: reqData.Method, Params: reqData.Params} result, err := dsInstance.ZabbixAPIQuery(req.Context(), apiReq) diff --git a/pkg/zabbix_api.go b/pkg/zabbix_api.go index aac286f..d048490 100644 --- a/pkg/zabbix_api.go +++ b/pkg/zabbix_api.go @@ -13,16 +13,26 @@ import ( "golang.org/x/net/context" ) +var NotCachedMethods = map[string]bool{ + "history.get": true, + "trend.get": true, +} + // ZabbixAPIQuery handles query requests to Zabbix func (ds *ZabbixDatasourceInstance) ZabbixAPIQuery(ctx context.Context, apiReq *ZabbixAPIRequest) (*ZabbixAPIResourceResponse, error) { var result interface{} var err error var queryExistInCache bool - result, queryExistInCache = ds.queryCache.Get(HashString(apiReq.String())) + requestHash := HashString(apiReq.String()) + result, queryExistInCache = ds.queryCache.Get(requestHash) if !queryExistInCache { result, err = ds.ZabbixRequest(ctx, apiReq.Method, apiReq.Params) - ds.queryCache.Set(HashString(apiReq.String()), result) + + if _, ok := NotCachedMethods[apiReq.Method]; !ok { + ds.logger.Debug("Write result to cache", "method", apiReq.Method) + ds.queryCache.Set(HashString(apiReq.String()), result) + } if err != nil { return nil, err } diff --git a/pkg/zabbix_api_core.go b/pkg/zabbix_api_core.go index eb145ed..848e27f 100644 --- a/pkg/zabbix_api_core.go +++ b/pkg/zabbix_api_core.go @@ -16,6 +16,7 @@ import ( // ZabbixRequest checks authentication and makes a request to the Zabbix API func (ds *ZabbixDatasourceInstance) ZabbixRequest(ctx context.Context, method string, params ZabbixAPIParams) (*simplejson.Json, error) { + ds.logger.Debug("Invoke Zabbix API request", "ds", ds.dsInfo.Name, "method", method) var result *simplejson.Json var err error