The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/pkg/services/ngalert/api/errors.go

45 lines
1.3 KiB

package api
import (
"errors"
"fmt"
"github.com/grafana/grafana/pkg/api/response"
"github.com/grafana/grafana/pkg/services/datasources"
apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
"github.com/grafana/grafana/pkg/util/errutil"
)
var (
errUnexpectedDatasourceType = errors.New("unexpected datasource type")
// errFolderAccess is used as a wrapper to propagate folder related errors and correctly map to the response status
errFolderAccess = errors.New("cannot get folder")
)
func unexpectedDatasourceTypeError(actual string, expected string) error {
return fmt.Errorf("%w '%s', expected %s", errUnexpectedDatasourceType, actual, expected)
}
func backendTypeDoesNotMatchPayloadTypeError(backendType apimodels.Backend, payloadType string) error {
return fmt.Errorf("unexpected backend type (%s) for payload type (%s)",
backendType.String(),
payloadType,
)
}
func errorToResponse(err error) response.Response {
if errors.As(err, &errutil.Error{}) {
return response.Err(err)
}
if errors.Is(err, datasources.ErrDataSourceNotFound) {
return ErrResp(404, err, "")
}
if errors.Is(err, errUnexpectedDatasourceType) {
return ErrResp(400, err, "")
}
if errors.Is(err, errFolderAccess) {
return toNamespaceErrorResponse(err)
}
return ErrResp(500, err, "")
}