Alerting: Endpoints for provisioning mute timings (#49635) (#49735)

* Add validator for mute timing and make it provisionable

* Add tests to ensure prometheus validators are running and errors are propagated

* Internal API for manipulating mute timings

* Define and generate API layer

* Wire up generated code

* Implement API handlers

* Tests for golang layer

* Fix reference bug

* Fix linter and auth tests

* Resolve semantic errors and regenerate

* Remove pointless comment

* Extract out provisioning path param keys, simplify

* Expected number of paths

(cherry picked from commit 909ebcf979)

Co-authored-by: Alexander Weaver <weaver.alex.d@gmail.com>
This commit is contained in:
Grot (@grafanabot)
2022-05-26 16:06:52 -05:00
committed by GitHub
co-authored by Alexander Weaver
parent ccd1270f28
commit 7e4327d254
14 changed files with 1003 additions and 132 deletions
+108 -24
View File
@@ -1439,26 +1439,9 @@
"type": "object",
"x-go-package": "github.com/prometheus/alertmanager/config"
},
"MuteTiming": {
"properties": {
"name": {
"type": "string",
"x-go-name": "Name"
},
"time_intervals": {
"items": {
"$ref": "#/definitions/TimeInterval"
},
"type": "array",
"x-go-name": "TimeIntervals"
}
},
"type": "object",
"x-go-package": "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
},
"MuteTimings": {
"items": {
"$ref": "#/definitions/MuteTiming"
"$ref": "#/definitions/MuteTimeInterval"
},
"type": "array",
"x-go-package": "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
@@ -3196,11 +3179,12 @@
"type": "object"
},
"alertGroups": {
"description": "AlertGroups alert groups",
"items": {
"$ref": "#/definitions/alertGroup"
},
"type": "array"
"type": "array",
"x-go-name": "AlertGroups",
"x-go-package": "github.com/prometheus/alertmanager/api/v2/models"
},
"alertStatus": {
"description": "AlertStatus alert status",
@@ -3445,11 +3429,12 @@
"type": "object"
},
"gettableSilences": {
"description": "GettableSilences gettable silences",
"items": {
"$ref": "#/definitions/gettableSilence"
},
"type": "array"
"type": "array",
"x-go-name": "GettableSilences",
"x-go-package": "github.com/prometheus/alertmanager/api/v2/models"
},
"labelSet": {
"additionalProperties": {
@@ -5005,9 +4990,67 @@
"tags": [
"provisioning"
]
},
"post": {
"consumes": [
"application/json"
],
"operationId": "RoutePostMuteTiming",
"parameters": [
{
"in": "body",
"name": "Body",
"schema": {
"$ref": "#/definitions/MuteTimeInterval"
}
}
],
"responses": {
"201": {
"description": "MuteTimeInterval",
"schema": {
"$ref": "#/definitions/MuteTimeInterval"
}
},
"400": {
"description": "ValidationError",
"schema": {
"$ref": "#/definitions/ValidationError"
}
}
},
"summary": "Create a new mute timing.",
"tags": [
"provisioning"
]
}
},
"/api/provisioning/mute-timings/{name}": {
"delete": {
"operationId": "RouteDeleteMuteTiming",
"parameters": [
{
"description": "Template Name",
"in": "path",
"name": "name",
"required": true,
"type": "string",
"x-go-name": "Name"
}
],
"responses": {
"204": {
"description": "Ack",
"schema": {
"$ref": "#/definitions/Ack"
}
}
},
"summary": "Delete a mute timing.",
"tags": [
"provisioning"
]
},
"get": {
"operationId": "RouteGetMuteTiming",
"parameters": [
@@ -5022,9 +5065,9 @@
],
"responses": {
"200": {
"description": "MuteTiming",
"description": "MuteTimeInterval",
"schema": {
"$ref": "#/definitions/MuteTiming"
"$ref": "#/definitions/MuteTimeInterval"
}
},
"400": {
@@ -5038,6 +5081,47 @@
"tags": [
"provisioning"
]
},
"put": {
"consumes": [
"application/json"
],
"operationId": "RoutePutMuteTiming",
"parameters": [
{
"description": "Template Name",
"in": "path",
"name": "name",
"required": true,
"type": "string",
"x-go-name": "Name"
},
{
"in": "body",
"name": "Body",
"schema": {
"$ref": "#/definitions/MuteTimeInterval"
}
}
],
"responses": {
"200": {
"description": "MuteTimeInterval",
"schema": {
"$ref": "#/definitions/MuteTimeInterval"
}
},
"400": {
"description": "ValidationError",
"schema": {
"$ref": "#/definitions/ValidationError"
}
}
},
"summary": "Replace an existing mute timing.",
"tags": [
"provisioning"
]
}
},
"/api/provisioning/policies": {