[v11.4.x] Azure/GCM: Improve error display (#97594)

* Azure/GCM: Improve error display (#96921)

Improve handling of errors

(cherry picked from commit 9f75a448d4)

* Update var name and import

---------

Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
pull/97624/head
grafana-delivery-bot[bot] 8 months ago committed by GitHub
parent ac481509c7
commit 626c15c1a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 17
      pkg/tsdb/azuremonitor/azuremonitor-resource-handler.go
  2. 20
      pkg/tsdb/cloud-monitoring/resource_handler.go

@ -1,6 +1,7 @@
package azuremonitor
import (
"encoding/json"
"fmt"
"io"
"net/http"
@ -82,9 +83,13 @@ func (s *Service) getDataSourceFromHTTPReq(req *http.Request) (types.DatasourceI
return ds, nil
}
func writeResponse(rw http.ResponseWriter, code int, msg string) {
func writeErrorResponse(rw http.ResponseWriter, code int, msg string) {
rw.WriteHeader(http.StatusBadRequest)
_, err := rw.Write([]byte(msg))
errorBody := map[string]string{
"error": msg,
}
jsonRes, _ := json.Marshal(errorBody)
_, err := rw.Write(jsonRes)
if err != nil {
backend.Logger.Error("Unable to write HTTP response", "error", err)
}
@ -96,20 +101,20 @@ func (s *Service) handleResourceReq(subDataSource string) func(rw http.ResponseW
newPath, err := getTarget(req.URL.Path)
if err != nil {
writeResponse(rw, http.StatusBadRequest, err.Error())
writeErrorResponse(rw, http.StatusBadRequest, err.Error())
return
}
dsInfo, err := s.getDataSourceFromHTTPReq(req)
if err != nil {
writeResponse(rw, http.StatusInternalServerError, fmt.Sprintf("unexpected error %v", err))
writeErrorResponse(rw, http.StatusInternalServerError, fmt.Sprintf("unexpected error %v", err))
return
}
service := dsInfo.Services[subDataSource]
serviceURL, err := url.Parse(service.URL)
if err != nil {
writeResponse(rw, http.StatusInternalServerError, fmt.Sprintf("unexpected error %v", err))
writeErrorResponse(rw, http.StatusInternalServerError, fmt.Sprintf("unexpected error %v", err))
return
}
req.URL.Path = newPath
@ -118,7 +123,7 @@ func (s *Service) handleResourceReq(subDataSource string) func(rw http.ResponseW
rw, err = s.executors[subDataSource].ResourceRequest(rw, req, service.HTTPClient)
if err != nil {
writeResponse(rw, http.StatusInternalServerError, fmt.Sprintf("unexpected error %v", err))
writeErrorResponse(rw, http.StatusInternalServerError, fmt.Sprintf("unexpected error %v", err))
return
}
}

@ -38,13 +38,13 @@ func (s *Service) newResourceMux() *http.ServeMux {
func (s *Service) getGCEDefaultProject(rw http.ResponseWriter, req *http.Request) {
project, err := s.gceDefaultProjectGetter(req.Context(), resourceManagerScope)
if err != nil {
writeResponse(rw, http.StatusBadRequest, fmt.Sprintf("unexpected error %v", err))
writeErrorResponse(rw, http.StatusBadRequest, fmt.Sprintf("unexpected error %v", err))
return
}
encoded, err := json.Marshal(project)
if err != nil {
writeResponse(rw, http.StatusBadRequest, fmt.Sprintf("error retrieving default project %v", err))
writeErrorResponse(rw, http.StatusBadRequest, fmt.Sprintf("error retrieving default project %v", err))
return
}
writeResponseBytes(rw, http.StatusOK, encoded)
@ -54,7 +54,7 @@ func (s *Service) handleResourceReq(subDataSource string, responseFn processResp
return func(rw http.ResponseWriter, req *http.Request) {
client, code, err := s.setRequestVariables(req, subDataSource)
if err != nil {
writeResponse(rw, code, fmt.Sprintf("unexpected error %v", err))
writeErrorResponse(rw, code, fmt.Sprintf("unexpected error %v", err))
return
}
getResources(rw, req, client, responseFn)
@ -63,19 +63,19 @@ func (s *Service) handleResourceReq(subDataSource string, responseFn processResp
func getResources(rw http.ResponseWriter, req *http.Request, cli *http.Client, responseFn processResponse) http.ResponseWriter {
if responseFn == nil {
writeResponse(rw, http.StatusInternalServerError, "responseFn should not be nil")
writeErrorResponse(rw, http.StatusInternalServerError, "responseFn should not be nil")
return rw
}
responses, headers, encoding, code, err := getResponses(req, cli, responseFn)
if err != nil {
writeResponse(rw, code, fmt.Sprintf("unexpected error %v", err))
writeErrorResponse(rw, code, fmt.Sprintf("unexpected error %v", err))
return rw
}
body, err := buildResponse(responses, encoding)
if err != nil {
writeResponse(rw, http.StatusInternalServerError, fmt.Sprintf("error formatting responose %v", err))
writeErrorResponse(rw, http.StatusInternalServerError, fmt.Sprintf("error formatting responose %v", err))
return rw
}
writeResponseBytes(rw, code, body)
@ -390,8 +390,12 @@ func writeResponseBytes(rw http.ResponseWriter, code int, msg []byte) {
}
}
func writeResponse(rw http.ResponseWriter, code int, msg string) {
writeResponseBytes(rw, code, []byte(msg))
func writeErrorResponse(rw http.ResponseWriter, code int, msg string) {
errorBody := map[string]string{
"error": msg,
}
json, _ := json.Marshal(errorBody)
writeResponseBytes(rw, code, json)
}
func (s *Service) getDataSourceFromHTTPReq(req *http.Request) (*datasourceInfo, error) {

Loading…
Cancel
Save