Separate Zabbix API and HTTP client

This commit is contained in:
Alexander Zobnin
2021-05-19 09:49:12 +03:00
parent 68c7e20d27
commit 762ea252b2
3 changed files with 13 additions and 15 deletions

View File

@@ -8,6 +8,7 @@ import (
"time" "time"
"github.com/alexanderzobnin/grafana-zabbix/pkg/gtime" "github.com/alexanderzobnin/grafana-zabbix/pkg/gtime"
"github.com/alexanderzobnin/grafana-zabbix/pkg/httpclient"
"github.com/alexanderzobnin/grafana-zabbix/pkg/zabbixapi" "github.com/alexanderzobnin/grafana-zabbix/pkg/zabbixapi"
"github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend"
@@ -55,7 +56,12 @@ func newZabbixDatasourceInstance(settings backend.DataSourceInstanceSettings) (i
return nil, err 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 { if err != nil {
logger.Error("Error initializing Zabbix API", "error", err) logger.Error("Error initializing Zabbix API", "error", err)
return nil, err return nil, err

View File

@@ -46,9 +46,9 @@ var ptc = proxyTransportCache{
cache: make(map[int64]cachedTransport), cache: make(map[int64]cachedTransport),
} }
// GetHttpClient returns new http.Client. Transport either initialized or got from cache. // NewHttpClient returns new http.Client. Transport either initialized or got from cache.
func GetHttpClient(ds *backend.DataSourceInstanceSettings, timeout time.Duration) (*http.Client, error) { func NewHttpClient(ds *backend.DataSourceInstanceSettings, timeout time.Duration) (*http.Client, error) {
transport, err := getHttpTransport(ds) transport, err := newHttpTransport(ds)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -61,7 +61,7 @@ func GetHttpClient(ds *backend.DataSourceInstanceSettings, timeout time.Duration
}, nil }, nil
} }
func getHttpTransport(ds *backend.DataSourceInstanceSettings) (*dataSourceTransport, error) { func newHttpTransport(ds *backend.DataSourceInstanceSettings) (*dataSourceTransport, error) {
ptc.Lock() ptc.Lock()
defer ptc.Unlock() defer ptc.Unlock()

View File

@@ -9,11 +9,8 @@ import (
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"net/url" "net/url"
"time"
"github.com/alexanderzobnin/grafana-zabbix/pkg/httpclient"
"github.com/bitly/go-simplejson" "github.com/bitly/go-simplejson"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/log" "github.com/grafana/grafana-plugin-sdk-go/backend/log"
"golang.org/x/net/context/ctxhttp" "golang.org/x/net/context/ctxhttp"
) )
@@ -32,14 +29,9 @@ type ZabbixAPI struct {
type ZabbixAPIParams = map[string]interface{} type ZabbixAPIParams = map[string]interface{}
// New returns new ZabbixAPI instance initialized with given URL or error. // 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() apiLogger := log.New()
zabbixURL, err := url.Parse(dsInfo.URL) zabbixURL, err := url.Parse(apiURL)
if err != nil {
return nil, err
}
client, err := httpclient.GetHttpClient(dsInfo, timeout)
if err != nil { if err != nil {
return nil, err return nil, err
} }