Alerting: Consistently return Prometheus-style responses from rules APIs. (#86600)

* Alerting: Consistently return Prometheus-style responses from rules APIs.

This commit is part refactor and part fix. The /rules API occasionally returns
error responses which are inconsistent with other error responses. This fixes
that, and adds a function to map from Prometheus error type and HTTP code.

* Fix integration tests

* Linter happiness

* Make linter more happy

* Fix up one more place returning non-Prometheus responses
This commit is contained in:
Steve Simpson
2024-04-19 21:03:20 +02:00
committed by GitHub
parent 9ed616a7b3
commit 6ea97e41fb
4 changed files with 116 additions and 34 deletions
@@ -625,7 +625,10 @@ func TestIntegrationPrometheusRulesFilterByDashboard(t *testing.T) {
require.NoError(t, err)
var res map[string]any
require.NoError(t, json.Unmarshal(b, &res))
require.Equal(t, `invalid panel_id: strconv.ParseInt: parsing "invalid": invalid syntax`, res["message"])
// These APIs return Prometheus-like errors.
require.Equal(t, "error", res["status"])
require.Equal(t, "bad_data", res["errorType"])
require.Equal(t, `invalid panel_id: strconv.ParseInt: parsing "invalid": invalid syntax`, res["error"])
}
// Now, let's check a panel_id without dashboard_uid returns a 400 Bad Request response
@@ -643,7 +646,10 @@ func TestIntegrationPrometheusRulesFilterByDashboard(t *testing.T) {
require.NoError(t, err)
var res map[string]any
require.NoError(t, json.Unmarshal(b, &res))
require.Equal(t, "panel_id must be set with dashboard_uid", res["message"])
// These APIs return Prometheus-like errors.
require.Equal(t, "error", res["status"])
require.Equal(t, "bad_data", res["errorType"])
require.Equal(t, "panel_id must be set with dashboard_uid", res["error"])
}
}