From bf69d9037aeaf38c32f103a2cbb3db3b1cd3bb88 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Mon, 1 Jun 2020 12:01:10 +0300 Subject: [PATCH] implement CheckHealth --- pkg/datasource.go | 20 ++++++++++++++------ pkg/zabbix_api.go | 15 +++++---------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/pkg/datasource.go b/pkg/datasource.go index ee2e0c8..b721d84 100644 --- a/pkg/datasource.go +++ b/pkg/datasource.go @@ -50,16 +50,24 @@ type ZabbixDatasourceInstance struct { func (ds *ZabbixDatasource) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult, error) { res := &backend.CheckHealthResult{} - // Just checking that the plugin exe is alive and running - if req.PluginContext.DataSourceInstanceSettings == nil { - res.Status = backend.HealthStatusOk - res.Message = "Plugin is running" + dsInstance, err := ds.GetDatasource(req.PluginContext) + if err != nil { + res.Status = backend.HealthStatusError + res.Message = "Error getting datasource instance" + ds.logger.Error("Error getting datasource instance", "err", err) + return res, nil + } + + message, err := dsInstance.TestConnection(ctx) + if err != nil { + res.Status = backend.HealthStatusError + res.Message = err.Error() + ds.logger.Error("Error connecting zabbix", "err", err) return res, nil } - // TODO? actually check datasource settings? res.Status = backend.HealthStatusOk - res.Message = "Success" + res.Message = message return res, nil } diff --git a/pkg/zabbix_api.go b/pkg/zabbix_api.go index cf05ce7..ac570c2 100644 --- a/pkg/zabbix_api.go +++ b/pkg/zabbix_api.go @@ -78,26 +78,21 @@ func (ds *ZabbixDatasourceInstance) ZabbixAPIQueryOld(ctx context.Context, tsdbR } // TestConnection checks authentication and version of the Zabbix API and returns that info -func (ds *ZabbixDatasourceInstance) TestConnection(ctx context.Context, tsdbReq *datasource.DatasourceRequest) (*datasource.DatasourceResponse, error) { - err := ds.loginWithDs(ctx) +func (ds *ZabbixDatasourceInstance) TestConnection(ctx context.Context) (string, error) { + _, err := ds.getAllGroups(ctx) if err != nil { - return BuildErrorResponse(fmt.Errorf("Authentication failed: %s", err)), nil + return "", err } response, err := ds.ZabbixAPIRequest(ctx, "apiinfo.version", ZabbixAPIParams{}, "") if err != nil { - ds.logger.Debug("TestConnection", "error", err) - return BuildErrorResponse(fmt.Errorf("Version check failed: %s", err)), nil + return "", err } resultByte, _ := response.MarshalJSON() ds.logger.Debug("TestConnection", "result", string(resultByte)) - testResponse := connectionTestResponse{ - ZabbixVersion: response.MustString(), - } - - return BuildResponse(testResponse) + return string(resultByte), nil } func (ds *ZabbixDatasourceInstance) queryNumericItems(ctx context.Context, query *QueryModel) (*data.Frame, error) {