mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Errors: Introduce error type with Grafana specific metadata (#47504)
This commit is contained in:
@@ -3,12 +3,17 @@ package response
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"reflect"
|
||||
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/tracing"
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"github.com/grafana/grafana/pkg/util/errutil"
|
||||
)
|
||||
|
||||
// Response is an HTTP response interface.
|
||||
@@ -82,7 +87,13 @@ func (r *NormalResponse) WriteTo(ctx *models.ReqContext) {
|
||||
r.body = bytes.NewBuffer(b)
|
||||
}
|
||||
}
|
||||
ctx.Logger.Error(r.errMessage, "error", r.err, "remote_addr", ctx.RemoteAddr(), "traceID", traceID)
|
||||
|
||||
logger := ctx.Logger.Error
|
||||
var gfErr *errutil.Error
|
||||
if errors.As(r.err, &gfErr) {
|
||||
logger = gfErr.LogLevel.LogFunc(ctx.Logger)
|
||||
}
|
||||
logger(r.errMessage, "error", r.err, "remote_addr", ctx.RemoteAddr(), "traceID", traceID)
|
||||
}
|
||||
|
||||
header := ctx.Resp.Header()
|
||||
@@ -214,6 +225,20 @@ func Error(status int, message string, err error) *NormalResponse {
|
||||
return resp
|
||||
}
|
||||
|
||||
// Err creates an error response based on an errutil.Error error.
|
||||
func Err(err error) *NormalResponse {
|
||||
grafanaErr := &errutil.Error{}
|
||||
if !errors.As(err, grafanaErr) {
|
||||
return Error(http.StatusInternalServerError, "", fmt.Errorf("unexpected error type [%s]: %w", reflect.TypeOf(err), err))
|
||||
}
|
||||
|
||||
resp := JSON(grafanaErr.Reason.Status().HTTPStatus(), grafanaErr.Public())
|
||||
resp.errMessage = string(grafanaErr.Reason.Status())
|
||||
resp.err = grafanaErr
|
||||
|
||||
return resp
|
||||
}
|
||||
|
||||
// Empty creates an empty NormalResponse.
|
||||
func Empty(status int) *NormalResponse {
|
||||
return Respond(status, nil)
|
||||
|
||||
Reference in New Issue
Block a user