From 762ea252b20e687808441686042ded09e0f23fbc Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Wed, 19 May 2021 09:49:12 +0300 Subject: [PATCH] Separate Zabbix API and HTTP client --- pkg/datasource/datasource.go | 8 +++++++- pkg/httpclient/httpclient.go | 8 ++++---- pkg/zabbixapi/zabbix_api.go | 12 ++---------- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/pkg/datasource/datasource.go b/pkg/datasource/datasource.go index 5d890f3..c862ce3 100644 --- a/pkg/datasource/datasource.go +++ b/pkg/datasource/datasource.go @@ -8,6 +8,7 @@ import ( "time" "github.com/alexanderzobnin/grafana-zabbix/pkg/gtime" + "github.com/alexanderzobnin/grafana-zabbix/pkg/httpclient" "github.com/alexanderzobnin/grafana-zabbix/pkg/zabbixapi" "github.com/grafana/grafana-plugin-sdk-go/backend" @@ -55,7 +56,12 @@ func newZabbixDatasourceInstance(settings backend.DataSourceInstanceSettings) (i return nil, err } - zabbixAPI, err := zabbixapi.New(&settings, zabbixSettings.Timeout) + client, err := httpclient.NewHttpClient(&settings, zabbixSettings.Timeout) + if err != nil { + return nil, err + } + + zabbixAPI, err := zabbixapi.New(settings.URL, client) if err != nil { logger.Error("Error initializing Zabbix API", "error", err) return nil, err diff --git a/pkg/httpclient/httpclient.go b/pkg/httpclient/httpclient.go index d7240c2..dc8ad36 100644 --- a/pkg/httpclient/httpclient.go +++ b/pkg/httpclient/httpclient.go @@ -46,9 +46,9 @@ var ptc = proxyTransportCache{ cache: make(map[int64]cachedTransport), } -// GetHttpClient returns new http.Client. Transport either initialized or got from cache. -func GetHttpClient(ds *backend.DataSourceInstanceSettings, timeout time.Duration) (*http.Client, error) { - transport, err := getHttpTransport(ds) +// NewHttpClient returns new http.Client. Transport either initialized or got from cache. +func NewHttpClient(ds *backend.DataSourceInstanceSettings, timeout time.Duration) (*http.Client, error) { + transport, err := newHttpTransport(ds) if err != nil { return nil, err } @@ -61,7 +61,7 @@ func GetHttpClient(ds *backend.DataSourceInstanceSettings, timeout time.Duration }, nil } -func getHttpTransport(ds *backend.DataSourceInstanceSettings) (*dataSourceTransport, error) { +func newHttpTransport(ds *backend.DataSourceInstanceSettings) (*dataSourceTransport, error) { ptc.Lock() defer ptc.Unlock() diff --git a/pkg/zabbixapi/zabbix_api.go b/pkg/zabbixapi/zabbix_api.go index 812d41d..88310d1 100644 --- a/pkg/zabbixapi/zabbix_api.go +++ b/pkg/zabbixapi/zabbix_api.go @@ -9,11 +9,8 @@ import ( "io/ioutil" "net/http" "net/url" - "time" - "github.com/alexanderzobnin/grafana-zabbix/pkg/httpclient" "github.com/bitly/go-simplejson" - "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend/log" "golang.org/x/net/context/ctxhttp" ) @@ -32,14 +29,9 @@ type ZabbixAPI struct { type ZabbixAPIParams = map[string]interface{} // New returns new ZabbixAPI instance initialized with given URL or error. -func New(dsInfo *backend.DataSourceInstanceSettings, timeout time.Duration) (*ZabbixAPI, error) { +func New(apiURL string, client *http.Client) (*ZabbixAPI, error) { apiLogger := log.New() - zabbixURL, err := url.Parse(dsInfo.URL) - if err != nil { - return nil, err - } - - client, err := httpclient.GetHttpClient(dsInfo, timeout) + zabbixURL, err := url.Parse(apiURL) if err != nil { return nil, err }