mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Use expected field name for receiver in hcl Terraform provider expects `contact_point` instead of `receiver` in notification settings on a rule.
304 lines
11 KiB
Go
304 lines
11 KiB
Go
package definitions
|
||
|
||
import (
|
||
"time"
|
||
|
||
"github.com/prometheus/common/model"
|
||
)
|
||
|
||
// swagger:route GET /v1/provisioning/alert-rules provisioning stable RouteGetAlertRules
|
||
//
|
||
// Get all the alert rules.
|
||
//
|
||
// Responses:
|
||
// 200: ProvisionedAlertRules
|
||
|
||
// swagger:route GET /v1/provisioning/alert-rules/export provisioning stable RouteGetAlertRulesExport
|
||
//
|
||
// Export all alert rules in provisioning file format.
|
||
//
|
||
// Produces:
|
||
// - application/json
|
||
// - application/yaml
|
||
// - application/terraform+hcl
|
||
// - text/yaml
|
||
// - text/hcl
|
||
//
|
||
// Responses:
|
||
// 200: AlertingFileExport
|
||
// 404: description: Not found.
|
||
|
||
// swagger:route GET /v1/provisioning/alert-rules/{UID} provisioning stable RouteGetAlertRule
|
||
//
|
||
// Get a specific alert rule by UID.
|
||
//
|
||
// Responses:
|
||
// 200: ProvisionedAlertRule
|
||
// 404: description: Not found.
|
||
|
||
// swagger:route GET /v1/provisioning/alert-rules/{UID}/export provisioning stable RouteGetAlertRuleExport
|
||
//
|
||
// Export an alert rule in provisioning file format.
|
||
//
|
||
// Produces:
|
||
// - application/json
|
||
// - application/yaml
|
||
// - application/terraform+hcl
|
||
// - text/yaml
|
||
// - text/hcl
|
||
//
|
||
// Responses:
|
||
// 200: AlertingFileExport
|
||
// 404: description: Not found.
|
||
|
||
// swagger:route POST /v1/provisioning/alert-rules provisioning stable RoutePostAlertRule
|
||
//
|
||
// Create a new alert rule.
|
||
//
|
||
// Consumes:
|
||
// - application/json
|
||
//
|
||
// Responses:
|
||
// 201: ProvisionedAlertRule
|
||
// 400: ValidationError
|
||
|
||
// swagger:route PUT /v1/provisioning/alert-rules/{UID} provisioning stable RoutePutAlertRule
|
||
//
|
||
// Update an existing alert rule.
|
||
//
|
||
// Consumes:
|
||
// - application/json
|
||
//
|
||
// Responses:
|
||
// 200: ProvisionedAlertRule
|
||
// 400: ValidationError
|
||
|
||
// swagger:route DELETE /v1/provisioning/alert-rules/{UID} provisioning stable RouteDeleteAlertRule
|
||
//
|
||
// Delete a specific alert rule by UID.
|
||
//
|
||
// Responses:
|
||
// 204: description: The alert rule was deleted successfully.
|
||
|
||
// swagger:parameters RouteGetAlertRulesExport RouteGetRulesForExport
|
||
type AlertRulesExportParameters struct {
|
||
ExportQueryParams
|
||
// UIDs of folders from which to export rules
|
||
// in:query
|
||
// required:false
|
||
FolderUID []string `json:"folderUid"`
|
||
|
||
// Name of group of rules to export. Must be specified only together with a single folder UID
|
||
// in:query
|
||
// required: false
|
||
GroupName string `json:"group"`
|
||
|
||
// UID of alert rule to export. If specified, parameters folderUid and group must be empty.
|
||
// in:query
|
||
// required: false
|
||
RuleUID string `json:"ruleUid"`
|
||
}
|
||
|
||
// swagger:parameters RouteGetAlertRule RoutePutAlertRule RouteDeleteAlertRule RouteGetAlertRuleExport
|
||
type AlertRuleUIDReference struct {
|
||
// Alert rule UID
|
||
// in:path
|
||
UID string
|
||
}
|
||
|
||
// swagger:parameters RoutePostAlertRule RoutePutAlertRule
|
||
type AlertRulePayload struct {
|
||
// in:body
|
||
Body ProvisionedAlertRule
|
||
}
|
||
|
||
// swagger:parameters RoutePostAlertRule RoutePutAlertRule RouteDeleteAlertRule RoutePutAlertRuleGroup
|
||
type AlertRuleHeaders struct {
|
||
// in:header
|
||
XDisableProvenance string `json:"X-Disable-Provenance"`
|
||
}
|
||
|
||
// swagger:model
|
||
type ProvisionedAlertRules []ProvisionedAlertRule
|
||
|
||
type ProvisionedAlertRule struct {
|
||
ID int64 `json:"id"`
|
||
// required: false
|
||
// minLength: 1
|
||
// maxLength: 40
|
||
// pattern: ^[a-zA-Z0-9-_]+$
|
||
UID string `json:"uid"`
|
||
// required: true
|
||
OrgID int64 `json:"orgID"`
|
||
// required: true
|
||
// example: project_x
|
||
FolderUID string `json:"folderUID"`
|
||
// required: true
|
||
// minLength: 1
|
||
// maxLength: 190
|
||
// example: eval_group_1
|
||
RuleGroup string `json:"ruleGroup"`
|
||
// required: true
|
||
// minLength: 1
|
||
// maxLength: 190
|
||
// example: Always firing
|
||
Title string `json:"title"`
|
||
// required: true
|
||
// example: A
|
||
Condition string `json:"condition"`
|
||
// required: true
|
||
// example: [{"refId":"A","queryType":"","relativeTimeRange":{"from":0,"to":0},"datasourceUid":"__expr__","model":{"conditions":[{"evaluator":{"params":[0,0],"type":"gt"},"operator":{"type":"and"},"query":{"params":[]},"reducer":{"params":[],"type":"avg"},"type":"query"}],"datasource":{"type":"__expr__","uid":"__expr__"},"expression":"1 == 1","hide":false,"intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"}}]
|
||
Data []AlertQuery `json:"data"`
|
||
// readonly: true
|
||
Updated time.Time `json:"updated,omitempty"`
|
||
// required: true
|
||
NoDataState NoDataState `json:"noDataState"`
|
||
// required: true
|
||
ExecErrState ExecutionErrorState `json:"execErrState"`
|
||
// required: true
|
||
For model.Duration `json:"for"`
|
||
// example: {"runbook_url": "https://supercoolrunbook.com/page/13"}
|
||
Annotations map[string]string `json:"annotations,omitempty"`
|
||
// example: {"team": "sre-team-1"}
|
||
Labels map[string]string `json:"labels,omitempty"`
|
||
// readonly: true
|
||
Provenance Provenance `json:"provenance,omitempty"`
|
||
// example: false
|
||
IsPaused bool `json:"isPaused"`
|
||
// example: {"receiver":"email","group_by":["alertname","grafana_folder","cluster"],"group_wait":"30s","group_interval":"1m","repeat_interval":"4d","mute_time_intervals":["Weekends","Holidays"]}
|
||
NotificationSettings *AlertRuleNotificationSettings `json:"notification_settings"`
|
||
}
|
||
|
||
// swagger:route GET /v1/provisioning/folder/{FolderUID}/rule-groups/{Group} provisioning stable RouteGetAlertRuleGroup
|
||
//
|
||
// Get a rule group.
|
||
//
|
||
// Responses:
|
||
// 200: AlertRuleGroup
|
||
// 404: description: Not found.
|
||
|
||
// swagger:route DELETE /v1/provisioning/folder/{FolderUID}/rule-groups/{Group} provisioning stable RouteDeleteAlertRuleGroup
|
||
//
|
||
// Delete rule group
|
||
//
|
||
// Responses:
|
||
// 204: description: The alert rule group was deleted successfully.
|
||
// 403: ForbiddenError
|
||
// 404: NotFound
|
||
|
||
// swagger:route GET /v1/provisioning/folder/{FolderUID}/rule-groups/{Group}/export provisioning stable RouteGetAlertRuleGroupExport
|
||
//
|
||
// Export an alert rule group in provisioning file format.
|
||
//
|
||
// Produces:
|
||
// - application/json
|
||
// - application/yaml
|
||
// - application/terraform+hcl
|
||
// - text/yaml
|
||
// - text/hcl
|
||
//
|
||
// Responses:
|
||
// 200: AlertingFileExport
|
||
// 404: description: Not found.
|
||
|
||
// swagger:route PUT /v1/provisioning/folder/{FolderUID}/rule-groups/{Group} provisioning stable RoutePutAlertRuleGroup
|
||
//
|
||
// Create or update alert rule group.
|
||
//
|
||
// Consumes:
|
||
// - application/json
|
||
//
|
||
// Responses:
|
||
// 200: AlertRuleGroup
|
||
// 400: ValidationError
|
||
|
||
// swagger:parameters RouteGetAlertRuleGroup RoutePutAlertRuleGroup RouteGetAlertRuleGroupExport RouteDeleteAlertRuleGroup
|
||
type FolderUIDPathParam struct {
|
||
// in:path
|
||
FolderUID string `json:"FolderUID"`
|
||
}
|
||
|
||
// swagger:parameters RouteGetAlertRuleGroup RoutePutAlertRuleGroup RouteGetAlertRuleGroupExport RouteDeleteAlertRuleGroup
|
||
type RuleGroupPathParam struct {
|
||
// in:path
|
||
Group string `json:"Group"`
|
||
}
|
||
|
||
// swagger:parameters RoutePutAlertRuleGroup
|
||
type AlertRuleGroupPayload struct {
|
||
// in:body
|
||
Body AlertRuleGroup
|
||
}
|
||
|
||
// swagger:model
|
||
type AlertRuleGroupMetadata struct {
|
||
Interval int64 `json:"interval"`
|
||
}
|
||
|
||
// swagger:model
|
||
type AlertRuleGroup struct {
|
||
Title string `json:"title"`
|
||
FolderUID string `json:"folderUid"`
|
||
Interval int64 `json:"interval"`
|
||
Rules []ProvisionedAlertRule `json:"rules"`
|
||
}
|
||
|
||
// AlertRuleGroupExport is the provisioned file export of AlertRuleGroupV1.
|
||
type AlertRuleGroupExport struct {
|
||
OrgID int64 `json:"orgId" yaml:"orgId" hcl:"org_id"`
|
||
Name string `json:"name" yaml:"name" hcl:"name"`
|
||
Folder string `json:"folder" yaml:"folder"`
|
||
FolderUID string `json:"-" yaml:"-" hcl:"folder_uid"`
|
||
Interval model.Duration `json:"interval" yaml:"interval"`
|
||
IntervalSeconds int64 `json:"-" yaml:"-" hcl:"interval_seconds"`
|
||
Rules []AlertRuleExport `json:"rules" yaml:"rules" hcl:"rule,block"`
|
||
}
|
||
|
||
// AlertRuleExport is the provisioned file export of models.AlertRule.
|
||
type AlertRuleExport struct {
|
||
UID string `json:"uid,omitempty" yaml:"uid,omitempty"`
|
||
Title string `json:"title" yaml:"title" hcl:"name"`
|
||
Condition string `json:"condition" yaml:"condition" hcl:"condition"`
|
||
Data []AlertQueryExport `json:"data" yaml:"data" hcl:"data,block"`
|
||
DashboardUID *string `json:"dasboardUid,omitempty" yaml:"dashboardUid,omitempty"`
|
||
PanelID *int64 `json:"panelId,omitempty" yaml:"panelId,omitempty"`
|
||
NoDataState NoDataState `json:"noDataState" yaml:"noDataState" hcl:"no_data_state"`
|
||
ExecErrState ExecutionErrorState `json:"execErrState" yaml:"execErrState" hcl:"exec_err_state"`
|
||
For model.Duration `json:"for" yaml:"for"`
|
||
// ForString is used to:
|
||
// - Only export the for field for HCL if it is non-zero.
|
||
// - Format the Prometheus model.Duration type properly for HCL.
|
||
ForString *string `json:"-" yaml:"-" hcl:"for"`
|
||
Annotations *map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty" hcl:"annotations"`
|
||
Labels *map[string]string `json:"labels,omitempty" yaml:"labels,omitempty" hcl:"labels"`
|
||
IsPaused bool `json:"isPaused" yaml:"isPaused" hcl:"is_paused"`
|
||
NotificationSettings *AlertRuleNotificationSettingsExport `json:"notification_settings,omitempty" yaml:"notification_settings,omitempty" hcl:"notification_settings,block"`
|
||
}
|
||
|
||
// AlertQueryExport is the provisioned export of models.AlertQuery.
|
||
type AlertQueryExport struct {
|
||
RefID string `json:"refId" yaml:"refId" hcl:"ref_id"`
|
||
QueryType *string `json:"queryType,omitempty" yaml:"queryType,omitempty" hcl:"query_type"`
|
||
RelativeTimeRange RelativeTimeRangeExport `json:"relativeTimeRange,omitempty" yaml:"relativeTimeRange,omitempty" hcl:"relative_time_range,block"`
|
||
DatasourceUID string `json:"datasourceUid" yaml:"datasourceUid" hcl:"datasource_uid"`
|
||
Model map[string]any `json:"model" yaml:"model"`
|
||
ModelString string `json:"-" yaml:"-" hcl:"model"`
|
||
}
|
||
|
||
type RelativeTimeRangeExport struct {
|
||
FromSeconds int64 `json:"from" yaml:"from" hcl:"from"`
|
||
ToSeconds int64 `json:"to" yaml:"to" hcl:"to"`
|
||
}
|
||
|
||
// AlertRuleNotificationSettingsExport is the provisioned export of models.NotificationSettings.
|
||
type AlertRuleNotificationSettingsExport struct {
|
||
// Terraform provider uses `contact_point`, so export the field with that name in HCL.
|
||
Receiver string `yaml:"receiver,omitempty" json:"receiver,omitempty" hcl:"contact_point"`
|
||
|
||
GroupBy []string `yaml:"group_by,omitempty" json:"group_by,omitempty" hcl:"group_by"`
|
||
GroupWait *string `yaml:"group_wait,omitempty" json:"group_wait,omitempty" hcl:"group_wait,optional"`
|
||
GroupInterval *string `yaml:"group_interval,omitempty" json:"group_interval,omitempty" hcl:"group_interval,optional"`
|
||
RepeatInterval *string `yaml:"repeat_interval,omitempty" json:"repeat_interval,omitempty" hcl:"repeat_interval,optional"`
|
||
MuteTimeIntervals []string `yaml:"mute_time_intervals,omitempty" json:"mute_time_intervals,omitempty" hcl:"mute_time_intervals"`
|
||
}
|