Refactor API calls
This commit is contained in:
@@ -170,6 +170,12 @@ func GetQueryType(tsdbReq *datasource.DatasourceRequest) (string, error) {
|
||||
// }, nil
|
||||
// }
|
||||
|
||||
func BuildAPIResponse(responseData *interface{}) (*ZabbixAPIResourceResponse, error) {
|
||||
return &ZabbixAPIResourceResponse{
|
||||
Result: *responseData,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// BuildResponse transforms a Zabbix API response to a DatasourceResponse
|
||||
func BuildResponse(responseData interface{}) (*datasource.DatasourceResponse, error) {
|
||||
jsonBytes, err := json.Marshal(responseData)
|
||||
|
||||
@@ -115,6 +115,10 @@ type ZabbixAPIRequest struct {
|
||||
Params map[string]interface{} `json:"params,omitempty"`
|
||||
}
|
||||
|
||||
type ZabbixAPIResourceResponse struct {
|
||||
Result interface{} `json:"result,omitempty"`
|
||||
}
|
||||
|
||||
func (r *ZabbixAPIRequest) String() string {
|
||||
jsonRequest, _ := json.Marshal(r.Params)
|
||||
return r.Method + string(jsonRequest)
|
||||
|
||||
@@ -32,16 +32,17 @@ func (ds *ZabbixDatasource) zabbixAPIHandler(rw http.ResponseWriter, req *http.R
|
||||
var reqData ZabbixAPIResourceRequest
|
||||
err = json.Unmarshal(body, &reqData)
|
||||
if err != nil {
|
||||
ds.logger.Error("Cannot unmarshal request", "error", err.Error())
|
||||
WriteError(rw, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
pluginCxt := httpadapter.PluginConfigFromContext(req.Context())
|
||||
ds.logger.Debug("Received Zabbix API call", "ds", pluginCxt.DataSourceInstanceSettings.Name)
|
||||
|
||||
dsInstance, err := ds.GetDatasource(pluginCxt.OrgID, pluginCxt.DataSourceInstanceSettings)
|
||||
ds.logger.Debug("Data source found", "ds", dsInstance.dsInfo.Name)
|
||||
|
||||
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)
|
||||
if err != nil {
|
||||
@@ -52,7 +53,7 @@ func (ds *ZabbixDatasource) zabbixAPIHandler(rw http.ResponseWriter, req *http.R
|
||||
WriteResponse(rw, result)
|
||||
}
|
||||
|
||||
func WriteResponse(rw http.ResponseWriter, result *interface{}) {
|
||||
func WriteResponse(rw http.ResponseWriter, result *ZabbixAPIResourceResponse) {
|
||||
resultJson, err := json.Marshal(*result)
|
||||
if err != nil {
|
||||
WriteError(rw, http.StatusInternalServerError, err)
|
||||
|
||||
@@ -25,7 +25,7 @@ type FunctionCategories struct {
|
||||
}
|
||||
|
||||
// ZabbixAPIQuery handles query requests to Zabbix
|
||||
func (dsInstance *ZabbixDatasourceInstance) ZabbixAPIQuery(ctx context.Context, apiReq *ZabbixAPIRequest) (*interface{}, error) {
|
||||
func (dsInstance *ZabbixDatasourceInstance) ZabbixAPIQuery(ctx context.Context, apiReq *ZabbixAPIRequest) (*ZabbixAPIResourceResponse, error) {
|
||||
var result interface{}
|
||||
var err error
|
||||
var queryExistInCache bool
|
||||
@@ -41,8 +41,7 @@ func (dsInstance *ZabbixDatasourceInstance) ZabbixAPIQuery(ctx context.Context,
|
||||
}
|
||||
}
|
||||
|
||||
// return BuildResponse(result)
|
||||
return &result, nil
|
||||
return BuildAPIResponse(&result)
|
||||
}
|
||||
|
||||
func (ds *ZabbixDatasourceInstance) ZabbixAPIQueryOld(ctx context.Context, tsdbReq *datasource.DatasourceRequest) (*datasource.DatasourceResponse, error) {
|
||||
|
||||
@@ -68,6 +68,11 @@ func (ds *ZabbixDatasourceInstance) ZabbixRequest(ctx context.Context, method st
|
||||
var result *simplejson.Json
|
||||
var err error
|
||||
|
||||
// Skip auth for methods that are not required it
|
||||
if method == "apiinfo.version" {
|
||||
return ds.ZabbixAPIRequest(ctx, method, params, ds.authToken)
|
||||
}
|
||||
|
||||
for attempt := 0; attempt <= 3; attempt++ {
|
||||
if ds.authToken == "" {
|
||||
// Authenticate
|
||||
|
||||
Reference in New Issue
Block a user