Alerting: Add version segment to all provisioning routes (#49121)

Co-authored-by: Jean-Philippe Quémémer <jeanphilippe.quemener@grafana.com>
This commit is contained in:
Alexander Weaver
2022-06-03 09:45:08 -05:00
committed by GitHub
parent b1e1a97c63
commit 67290aa49f
10 changed files with 1399 additions and 1399 deletions

View File

@@ -179,28 +179,28 @@ func (api *API) authorize(method, path string) web.Handler {
return middleware.ReqOrgAdmin
// Grafana-only Provisioning Read Paths
case http.MethodGet + "/api/provisioning/policies",
http.MethodGet + "/api/provisioning/contact-points",
http.MethodGet + "/api/provisioning/templates",
http.MethodGet + "/api/provisioning/templates/{name}",
http.MethodGet + "/api/provisioning/mute-timings",
http.MethodGet + "/api/provisioning/mute-timings/{name}",
http.MethodGet + "/api/provisioning/alert-rules/{UID}":
case http.MethodGet + "/api/v1/provisioning/policies",
http.MethodGet + "/api/v1/provisioning/contact-points",
http.MethodGet + "/api/v1/provisioning/templates",
http.MethodGet + "/api/v1/provisioning/templates/{name}",
http.MethodGet + "/api/v1/provisioning/mute-timings",
http.MethodGet + "/api/v1/provisioning/mute-timings/{name}",
http.MethodGet + "/api/v1/provisioning/alert-rules/{UID}":
return middleware.ReqSignedIn
case http.MethodPut + "/api/provisioning/policies",
http.MethodPost + "/api/provisioning/contact-points",
http.MethodPut + "/api/provisioning/contact-points/{UID}",
http.MethodDelete + "/api/provisioning/contact-points/{UID}",
http.MethodPut + "/api/provisioning/templates/{name}",
http.MethodDelete + "/api/provisioning/templates/{name}",
http.MethodPost + "/api/provisioning/mute-timings",
http.MethodPut + "/api/provisioning/mute-timings/{name}",
http.MethodDelete + "/api/provisioning/mute-timings/{name}",
http.MethodPost + "/api/provisioning/alert-rules",
http.MethodPut + "/api/provisioning/alert-rules/{UID}",
http.MethodDelete + "/api/provisioning/alert-rules/{UID}",
http.MethodPut + "/api/provisioning/folder/{FolderUID}/rule-groups/{Group}":
case http.MethodPut + "/api/v1/provisioning/policies",
http.MethodPost + "/api/v1/provisioning/contact-points",
http.MethodPut + "/api/v1/provisioning/contact-points/{UID}",
http.MethodDelete + "/api/v1/provisioning/contact-points/{UID}",
http.MethodPut + "/api/v1/provisioning/templates/{name}",
http.MethodDelete + "/api/v1/provisioning/templates/{name}",
http.MethodPost + "/api/v1/provisioning/mute-timings",
http.MethodPut + "/api/v1/provisioning/mute-timings/{name}",
http.MethodDelete + "/api/v1/provisioning/mute-timings/{name}",
http.MethodPost + "/api/v1/provisioning/alert-rules",
http.MethodPut + "/api/v1/provisioning/alert-rules/{UID}",
http.MethodDelete + "/api/v1/provisioning/alert-rules/{UID}",
http.MethodPut + "/api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group}":
return middleware.ReqEditorRole
}

View File

@@ -141,201 +141,201 @@ func (f *ForkedProvisioningApi) RoutePutTemplate(ctx *models.ReqContext) respons
func (api *API) RegisterProvisioningApiEndpoints(srv ProvisioningApiForkingService, m *metrics.API) {
api.RouteRegister.Group("", func(group routing.RouteRegister) {
group.Delete(
toMacaronPath("/api/provisioning/alert-rules/{UID}"),
api.authorize(http.MethodDelete, "/api/provisioning/alert-rules/{UID}"),
toMacaronPath("/api/v1/provisioning/alert-rules/{UID}"),
api.authorize(http.MethodDelete, "/api/v1/provisioning/alert-rules/{UID}"),
metrics.Instrument(
http.MethodDelete,
"/api/provisioning/alert-rules/{UID}",
"/api/v1/provisioning/alert-rules/{UID}",
srv.RouteDeleteAlertRule,
m,
),
)
group.Delete(
toMacaronPath("/api/provisioning/contact-points/{UID}"),
api.authorize(http.MethodDelete, "/api/provisioning/contact-points/{UID}"),
toMacaronPath("/api/v1/provisioning/contact-points/{UID}"),
api.authorize(http.MethodDelete, "/api/v1/provisioning/contact-points/{UID}"),
metrics.Instrument(
http.MethodDelete,
"/api/provisioning/contact-points/{UID}",
"/api/v1/provisioning/contact-points/{UID}",
srv.RouteDeleteContactpoints,
m,
),
)
group.Delete(
toMacaronPath("/api/provisioning/mute-timings/{name}"),
api.authorize(http.MethodDelete, "/api/provisioning/mute-timings/{name}"),
toMacaronPath("/api/v1/provisioning/mute-timings/{name}"),
api.authorize(http.MethodDelete, "/api/v1/provisioning/mute-timings/{name}"),
metrics.Instrument(
http.MethodDelete,
"/api/provisioning/mute-timings/{name}",
"/api/v1/provisioning/mute-timings/{name}",
srv.RouteDeleteMuteTiming,
m,
),
)
group.Delete(
toMacaronPath("/api/provisioning/templates/{name}"),
api.authorize(http.MethodDelete, "/api/provisioning/templates/{name}"),
toMacaronPath("/api/v1/provisioning/templates/{name}"),
api.authorize(http.MethodDelete, "/api/v1/provisioning/templates/{name}"),
metrics.Instrument(
http.MethodDelete,
"/api/provisioning/templates/{name}",
"/api/v1/provisioning/templates/{name}",
srv.RouteDeleteTemplate,
m,
),
)
group.Get(
toMacaronPath("/api/provisioning/alert-rules/{UID}"),
api.authorize(http.MethodGet, "/api/provisioning/alert-rules/{UID}"),
toMacaronPath("/api/v1/provisioning/alert-rules/{UID}"),
api.authorize(http.MethodGet, "/api/v1/provisioning/alert-rules/{UID}"),
metrics.Instrument(
http.MethodGet,
"/api/provisioning/alert-rules/{UID}",
"/api/v1/provisioning/alert-rules/{UID}",
srv.RouteGetAlertRule,
m,
),
)
group.Get(
toMacaronPath("/api/provisioning/contact-points"),
api.authorize(http.MethodGet, "/api/provisioning/contact-points"),
toMacaronPath("/api/v1/provisioning/contact-points"),
api.authorize(http.MethodGet, "/api/v1/provisioning/contact-points"),
metrics.Instrument(
http.MethodGet,
"/api/provisioning/contact-points",
"/api/v1/provisioning/contact-points",
srv.RouteGetContactpoints,
m,
),
)
group.Get(
toMacaronPath("/api/provisioning/mute-timings/{name}"),
api.authorize(http.MethodGet, "/api/provisioning/mute-timings/{name}"),
toMacaronPath("/api/v1/provisioning/mute-timings/{name}"),
api.authorize(http.MethodGet, "/api/v1/provisioning/mute-timings/{name}"),
metrics.Instrument(
http.MethodGet,
"/api/provisioning/mute-timings/{name}",
"/api/v1/provisioning/mute-timings/{name}",
srv.RouteGetMuteTiming,
m,
),
)
group.Get(
toMacaronPath("/api/provisioning/mute-timings"),
api.authorize(http.MethodGet, "/api/provisioning/mute-timings"),
toMacaronPath("/api/v1/provisioning/mute-timings"),
api.authorize(http.MethodGet, "/api/v1/provisioning/mute-timings"),
metrics.Instrument(
http.MethodGet,
"/api/provisioning/mute-timings",
"/api/v1/provisioning/mute-timings",
srv.RouteGetMuteTimings,
m,
),
)
group.Get(
toMacaronPath("/api/provisioning/policies"),
api.authorize(http.MethodGet, "/api/provisioning/policies"),
toMacaronPath("/api/v1/provisioning/policies"),
api.authorize(http.MethodGet, "/api/v1/provisioning/policies"),
metrics.Instrument(
http.MethodGet,
"/api/provisioning/policies",
"/api/v1/provisioning/policies",
srv.RouteGetPolicyTree,
m,
),
)
group.Get(
toMacaronPath("/api/provisioning/templates/{name}"),
api.authorize(http.MethodGet, "/api/provisioning/templates/{name}"),
toMacaronPath("/api/v1/provisioning/templates/{name}"),
api.authorize(http.MethodGet, "/api/v1/provisioning/templates/{name}"),
metrics.Instrument(
http.MethodGet,
"/api/provisioning/templates/{name}",
"/api/v1/provisioning/templates/{name}",
srv.RouteGetTemplate,
m,
),
)
group.Get(
toMacaronPath("/api/provisioning/templates"),
api.authorize(http.MethodGet, "/api/provisioning/templates"),
toMacaronPath("/api/v1/provisioning/templates"),
api.authorize(http.MethodGet, "/api/v1/provisioning/templates"),
metrics.Instrument(
http.MethodGet,
"/api/provisioning/templates",
"/api/v1/provisioning/templates",
srv.RouteGetTemplates,
m,
),
)
group.Post(
toMacaronPath("/api/provisioning/alert-rules"),
api.authorize(http.MethodPost, "/api/provisioning/alert-rules"),
toMacaronPath("/api/v1/provisioning/alert-rules"),
api.authorize(http.MethodPost, "/api/v1/provisioning/alert-rules"),
metrics.Instrument(
http.MethodPost,
"/api/provisioning/alert-rules",
"/api/v1/provisioning/alert-rules",
srv.RoutePostAlertRule,
m,
),
)
group.Post(
toMacaronPath("/api/provisioning/contact-points"),
api.authorize(http.MethodPost, "/api/provisioning/contact-points"),
toMacaronPath("/api/v1/provisioning/contact-points"),
api.authorize(http.MethodPost, "/api/v1/provisioning/contact-points"),
metrics.Instrument(
http.MethodPost,
"/api/provisioning/contact-points",
"/api/v1/provisioning/contact-points",
srv.RoutePostContactpoints,
m,
),
)
group.Post(
toMacaronPath("/api/provisioning/mute-timings"),
api.authorize(http.MethodPost, "/api/provisioning/mute-timings"),
toMacaronPath("/api/v1/provisioning/mute-timings"),
api.authorize(http.MethodPost, "/api/v1/provisioning/mute-timings"),
metrics.Instrument(
http.MethodPost,
"/api/provisioning/mute-timings",
"/api/v1/provisioning/mute-timings",
srv.RoutePostMuteTiming,
m,
),
)
group.Put(
toMacaronPath("/api/provisioning/alert-rules/{UID}"),
api.authorize(http.MethodPut, "/api/provisioning/alert-rules/{UID}"),
toMacaronPath("/api/v1/provisioning/alert-rules/{UID}"),
api.authorize(http.MethodPut, "/api/v1/provisioning/alert-rules/{UID}"),
metrics.Instrument(
http.MethodPut,
"/api/provisioning/alert-rules/{UID}",
"/api/v1/provisioning/alert-rules/{UID}",
srv.RoutePutAlertRule,
m,
),
)
group.Put(
toMacaronPath("/api/provisioning/folder/{FolderUID}/rule-groups/{Group}"),
api.authorize(http.MethodPut, "/api/provisioning/folder/{FolderUID}/rule-groups/{Group}"),
toMacaronPath("/api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group}"),
api.authorize(http.MethodPut, "/api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group}"),
metrics.Instrument(
http.MethodPut,
"/api/provisioning/folder/{FolderUID}/rule-groups/{Group}",
"/api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group}",
srv.RoutePutAlertRuleGroup,
m,
),
)
group.Put(
toMacaronPath("/api/provisioning/contact-points/{UID}"),
api.authorize(http.MethodPut, "/api/provisioning/contact-points/{UID}"),
toMacaronPath("/api/v1/provisioning/contact-points/{UID}"),
api.authorize(http.MethodPut, "/api/v1/provisioning/contact-points/{UID}"),
metrics.Instrument(
http.MethodPut,
"/api/provisioning/contact-points/{UID}",
"/api/v1/provisioning/contact-points/{UID}",
srv.RoutePutContactpoint,
m,
),
)
group.Put(
toMacaronPath("/api/provisioning/mute-timings/{name}"),
api.authorize(http.MethodPut, "/api/provisioning/mute-timings/{name}"),
toMacaronPath("/api/v1/provisioning/mute-timings/{name}"),
api.authorize(http.MethodPut, "/api/v1/provisioning/mute-timings/{name}"),
metrics.Instrument(
http.MethodPut,
"/api/provisioning/mute-timings/{name}",
"/api/v1/provisioning/mute-timings/{name}",
srv.RoutePutMuteTiming,
m,
),
)
group.Put(
toMacaronPath("/api/provisioning/policies"),
api.authorize(http.MethodPut, "/api/provisioning/policies"),
toMacaronPath("/api/v1/provisioning/policies"),
api.authorize(http.MethodPut, "/api/v1/provisioning/policies"),
metrics.Instrument(
http.MethodPut,
"/api/provisioning/policies",
"/api/v1/provisioning/policies",
srv.RoutePutPolicyTree,
m,
),
)
group.Put(
toMacaronPath("/api/provisioning/templates/{name}"),
api.authorize(http.MethodPut, "/api/provisioning/templates/{name}"),
toMacaronPath("/api/v1/provisioning/templates/{name}"),
api.authorize(http.MethodPut, "/api/v1/provisioning/templates/{name}"),
metrics.Instrument(
http.MethodPut,
"/api/provisioning/templates/{name}",
"/api/v1/provisioning/templates/{name}",
srv.RoutePutTemplate,
m,
),

View File

@@ -6,7 +6,7 @@ import (
"github.com/grafana/grafana/pkg/services/ngalert/models"
)
// swagger:route GET /api/provisioning/alert-rules/{UID} provisioning RouteGetAlertRule
// swagger:route GET /api/v1/provisioning/alert-rules/{UID} provisioning RouteGetAlertRule
//
// Get a specific alert rule by UID.
//
@@ -14,7 +14,7 @@ import (
// 200: AlertRule
// 400: ValidationError
// swagger:route POST /api/provisioning/alert-rules provisioning RoutePostAlertRule
// swagger:route POST /api/v1/provisioning/alert-rules provisioning RoutePostAlertRule
//
// Create a new alert rule.
//
@@ -22,7 +22,7 @@ import (
// 201: AlertRule
// 400: ValidationError
// swagger:route PUT /api/provisioning/alert-rules/{UID} provisioning RoutePutAlertRule
// swagger:route PUT /api/v1/provisioning/alert-rules/{UID} provisioning RoutePutAlertRule
//
// Update an existing alert rule.
//
@@ -33,7 +33,7 @@ import (
// 200: AlertRule
// 400: ValidationError
// swagger:route DELETE /api/provisioning/alert-rules/{UID} provisioning RouteDeleteAlertRule
// swagger:route DELETE /api/v1/provisioning/alert-rules/{UID} provisioning RouteDeleteAlertRule
//
// Delete a specific alert rule by UID.
//
@@ -110,7 +110,7 @@ func NewAlertRule(rule models.AlertRule, provenance models.Provenance) AlertRule
}
}
// swagger:route PUT /api/provisioning/folder/{FolderUID}/rule-groups/{Group} provisioning RoutePutAlertRuleGroup
// swagger:route PUT /api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group} provisioning RoutePutAlertRuleGroup
//
// Update the interval of a rule group.
//

View File

@@ -7,7 +7,7 @@ import (
"github.com/grafana/grafana/pkg/services/ngalert/notifier/channels"
)
// swagger:route GET /api/provisioning/contact-points provisioning RouteGetContactpoints
// swagger:route GET /api/v1/provisioning/contact-points provisioning RouteGetContactpoints
//
// Get all the contact points.
//
@@ -15,7 +15,7 @@ import (
// 200: Route
// 400: ValidationError
// swagger:route POST /api/provisioning/contact-points provisioning RoutePostContactpoints
// swagger:route POST /api/v1/provisioning/contact-points provisioning RoutePostContactpoints
//
// Create a contact point.
//
@@ -26,7 +26,7 @@ import (
// 202: Ack
// 400: ValidationError
// swagger:route PUT /api/provisioning/contact-points/{UID} provisioning RoutePutContactpoint
// swagger:route PUT /api/v1/provisioning/contact-points/{UID} provisioning RoutePutContactpoint
//
// Update an existing contact point.
//
@@ -37,7 +37,7 @@ import (
// 202: Ack
// 400: ValidationError
// swagger:route DELETE /api/provisioning/contact-points/{UID} provisioning RouteDeleteContactpoints
// swagger:route DELETE /api/v1/provisioning/contact-points/{UID} provisioning RouteDeleteContactpoints
//
// Delete a contact point.
//

View File

@@ -1,6 +1,6 @@
package definitions
// swagger:route GET /api/provisioning/mute-timings provisioning RouteGetMuteTimings
// swagger:route GET /api/v1/provisioning/mute-timings provisioning RouteGetMuteTimings
//
// Get all the mute timings.
//
@@ -8,7 +8,7 @@ package definitions
// 200: MuteTimings
// 400: ValidationError
// swagger:route GET /api/provisioning/mute-timings/{name} provisioning RouteGetMuteTiming
// swagger:route GET /api/v1/provisioning/mute-timings/{name} provisioning RouteGetMuteTiming
//
// Get a mute timing.
//
@@ -16,7 +16,7 @@ package definitions
// 200: MuteTimeInterval
// 400: ValidationError
// swagger:route POST /api/provisioning/mute-timings provisioning RoutePostMuteTiming
// swagger:route POST /api/v1/provisioning/mute-timings provisioning RoutePostMuteTiming
//
// Create a new mute timing.
//
@@ -27,7 +27,7 @@ package definitions
// 201: MuteTimeInterval
// 400: ValidationError
// swagger:route PUT /api/provisioning/mute-timings/{name} provisioning RoutePutMuteTiming
// swagger:route PUT /api/v1/provisioning/mute-timings/{name} provisioning RoutePutMuteTiming
//
// Replace an existing mute timing.
//
@@ -38,7 +38,7 @@ package definitions
// 200: MuteTimeInterval
// 400: ValidationError
// swagger:route DELETE /api/provisioning/mute-timings/{name} provisioning RouteDeleteMuteTiming
// swagger:route DELETE /api/v1/provisioning/mute-timings/{name} provisioning RouteDeleteMuteTiming
//
// Delete a mute timing.
//

View File

@@ -1,6 +1,6 @@
package definitions
// swagger:route GET /api/provisioning/policies provisioning RouteGetPolicyTree
// swagger:route GET /api/v1/provisioning/policies provisioning RouteGetPolicyTree
//
// Get the notification policy tree.
//
@@ -8,7 +8,7 @@ package definitions
// 200: Route
// 400: ValidationError
// swagger:route PUT /api/provisioning/policies provisioning RoutePutPolicyTree
// swagger:route PUT /api/v1/provisioning/policies provisioning RoutePutPolicyTree
//
// Sets the notification policy tree.
//

View File

@@ -4,7 +4,7 @@ import (
"github.com/grafana/grafana/pkg/services/ngalert/models"
)
// swagger:route GET /api/provisioning/templates provisioning RouteGetTemplates
// swagger:route GET /api/v1/provisioning/templates provisioning RouteGetTemplates
//
// Get all message templates.
//
@@ -12,7 +12,7 @@ import (
// 200: MessageTemplate
// 400: ValidationError
// swagger:route GET /api/provisioning/templates/{name} provisioning RouteGetTemplate
// swagger:route GET /api/v1/provisioning/templates/{name} provisioning RouteGetTemplate
//
// Get a message template.
//
@@ -20,7 +20,7 @@ import (
// 200: MessageTemplate
// 404: NotFound
// swagger:route PUT /api/provisioning/templates/{name} provisioning RoutePutTemplate
// swagger:route PUT /api/v1/provisioning/templates/{name} provisioning RoutePutTemplate
//
// Updates an existing template.
//
@@ -31,7 +31,7 @@ import (
// 202: Ack
// 400: ValidationError
// swagger:route DELETE /api/provisioning/templates/{name} provisioning RouteDeleteTemplate
// swagger:route DELETE /api/v1/provisioning/templates/{name} provisioning RouteDeleteTemplate
//
// Delete a template.
//

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -46,7 +46,7 @@ func TestProvisioning(t *testing.T) {
})
t.Run("when provisioning notification policies", func(t *testing.T) {
url := fmt.Sprintf("http://%s/api/provisioning/policies", grafanaListedAddr)
url := fmt.Sprintf("http://%s/api/v1/provisioning/policies", grafanaListedAddr)
body := `
{
"receiver": "grafana-default-email",
@@ -138,7 +138,7 @@ func TestProvisioning(t *testing.T) {
})
t.Run("when provisioning contactpoints", func(t *testing.T) {
url := fmt.Sprintf("http://%s/api/provisioning/contact-points", grafanaListedAddr)
url := fmt.Sprintf("http://%s/api/v1/provisioning/contact-points", grafanaListedAddr)
body := `
{
"name": "my-contact-point",
@@ -231,7 +231,7 @@ func TestProvisioning(t *testing.T) {
})
t.Run("when provisioning templates", func(t *testing.T) {
url := fmt.Sprintf("http://%s/api/provisioning/templates", grafanaListedAddr)
url := fmt.Sprintf("http://%s/api/v1/provisioning/templates", grafanaListedAddr)
t.Run("un-authenticated GET should 401", func(t *testing.T) {
req := createTestRequest("GET", url, "", "")
@@ -275,7 +275,7 @@ func TestProvisioning(t *testing.T) {
})
t.Run("when provisioning mute timings", func(t *testing.T) {
url := fmt.Sprintf("http://%s/api/provisioning/mute-timings", grafanaListedAddr)
url := fmt.Sprintf("http://%s/api/v1/provisioning/mute-timings", grafanaListedAddr)
t.Run("un-authenticated GET should 401", func(t *testing.T) {
req := createTestRequest("GET", url, "", "")