web(api): Make query and range api errors match
@@ -284,15 +284,7 @@ func (api *API) query(r *http.Request) (interface{}, *apiError, func()) {
res := qry.Exec(ctx)
if res.Err != nil {
- switch res.Err.(type) {
- case promql.ErrQueryCanceled:
- return nil, &apiError{errorCanceled, res.Err}, qry.Close
- case promql.ErrQueryTimeout:
- return nil, &apiError{errorTimeout, res.Err}, qry.Close
- case promql.ErrStorage:
- return nil, &apiError{errorInternal, res.Err}, qry.Close
- }
- return nil, &apiError{errorExec, res.Err}, qry.Close
+ return nil, returnAPIError(res.Err), qry.Close
}
// Optional stats field in response if parameter "stats" is not empty.
@@ -358,13 +350,7 @@ func (api *API) queryRange(r *http.Request) (interface{}, *apiError, func()) {
res := qry.Exec(ctx)
if res.Err != nil {
- switch res.Err.(type) {
- case promql.ErrQueryCanceled:
- return nil, &apiError{errorCanceled, res.Err}, qry.Close
- case promql.ErrQueryTimeout:
- return nil, &apiError{errorTimeout, res.Err}, qry.Close
- }
- return nil, &apiError{errorExec, res.Err}, qry.Close
+ return nil, returnAPIError(res.Err), qry.Close
}
// Optional stats field in response if parameter "stats" is not empty.
@@ -380,6 +366,23 @@ func (api *API) queryRange(r *http.Request) (interface{}, *apiError, func()) {
}, nil, qry.Close
}
+func returnAPIError(err error) *apiError {
+ if err == nil {
+ return nil
+ }
+
+ switch err.(type) {
+ case promql.ErrQueryCanceled:
+ return &apiError{errorCanceled, err}
+ case promql.ErrQueryTimeout:
+ return &apiError{errorTimeout, err}
+ case promql.ErrStorage:
+ return &apiError{errorInternal, err}
+ }
+
+ return &apiError{errorExec, err}
+}
+
func (api *API) labelValues(r *http.Request) (interface{}, *apiError, func()) {
ctx := r.Context()
name := route.Param(ctx, "name")
