Handle backend api errors
This commit is contained in:
@@ -25,11 +25,16 @@ func (ds *ZabbixDatasource) zabbixAPIHandler(rw http.ResponseWriter, req *http.R
|
||||
body, err := ioutil.ReadAll(req.Body)
|
||||
defer req.Body.Close()
|
||||
if err != nil || len(body) == 0 {
|
||||
rw.WriteHeader(http.StatusBadRequest)
|
||||
WriteError(rw, http.StatusBadRequest, err)
|
||||
return
|
||||
}
|
||||
|
||||
var reqData ZabbixAPIResourceRequest
|
||||
err = json.Unmarshal(body, &reqData)
|
||||
if err != nil {
|
||||
WriteError(rw, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
pluginCxt := httpadapter.PluginConfigFromContext(req.Context())
|
||||
ds.logger.Debug("Received Zabbix API call", "ds", pluginCxt.DataSourceInstanceSettings.Name)
|
||||
@@ -39,11 +44,38 @@ func (ds *ZabbixDatasource) zabbixAPIHandler(rw http.ResponseWriter, req *http.R
|
||||
|
||||
apiReq := &ZabbixAPIRequest{Method: reqData.Method, Params: reqData.Params}
|
||||
result, err := dsInstance.ZabbixAPIQuery(req.Context(), apiReq)
|
||||
resultJson, err := json.Marshal(*result)
|
||||
ds.logger.Debug("Got response", "result", result)
|
||||
if err != nil {
|
||||
WriteError(rw, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
ds.logger.Debug("Received Zabbix API call", "ds", reqData.DatasourceId, "method", reqData.Method, "params", reqData.Params)
|
||||
|
||||
rw.Write(resultJson)
|
||||
rw.WriteHeader(http.StatusOK)
|
||||
WriteResponse(rw, result)
|
||||
}
|
||||
|
||||
func WriteResponse(rw http.ResponseWriter, result *interface{}) {
|
||||
resultJson, err := json.Marshal(*result)
|
||||
if err != nil {
|
||||
WriteError(rw, http.StatusInternalServerError, err)
|
||||
}
|
||||
|
||||
rw.Header().Add("Content-Type", "application/json")
|
||||
rw.WriteHeader(http.StatusOK)
|
||||
rw.Write(resultJson)
|
||||
}
|
||||
|
||||
func WriteError(rw http.ResponseWriter, statusCode int, err error) {
|
||||
data := make(map[string]interface{})
|
||||
|
||||
data["error"] = "Internal Server Error"
|
||||
data["message"] = err.Error()
|
||||
|
||||
var b []byte
|
||||
if b, err = json.Marshal(data); err != nil {
|
||||
rw.WriteHeader(statusCode)
|
||||
return
|
||||
}
|
||||
|
||||
rw.Header().Add("Content-Type", "application/json")
|
||||
rw.WriteHeader(http.StatusInternalServerError)
|
||||
rw.Write(b)
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ func (dsInstance *ZabbixDatasourceInstance) ZabbixAPIQuery(ctx context.Context,
|
||||
dsInstance.queryCache.Set(HashString(apiReq.String()), result)
|
||||
if err != nil {
|
||||
dsInstance.logger.Debug("ZabbixAPIQuery", "error", err)
|
||||
return nil, errors.New("ZabbixAPIQuery is not implemented yet")
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user