Handle backend api errors

This commit is contained in:
Alexander Zobnin
2020-05-29 11:09:43 +03:00
parent 3a50146df7
commit efb4d41da5
2 changed files with 40 additions and 8 deletions

View File

@@ -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)
}