mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
92 lines
3.0 KiB
Go
92 lines
3.0 KiB
Go
|
package api
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
"github.com/prometheus/common/model"
|
||
|
|
||
|
"github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
|
||
|
"github.com/grafana/grafana/pkg/services/ngalert/models"
|
||
|
)
|
||
|
|
||
|
// AlertRuleFromProvisionedAlertRule converts definitions.ProvisionedAlertRule to models.AlertRule
|
||
|
func AlertRuleFromProvisionedAlertRule(a definitions.ProvisionedAlertRule) (models.AlertRule, error) {
|
||
|
return models.AlertRule{
|
||
|
ID: a.ID,
|
||
|
UID: a.UID,
|
||
|
OrgID: a.OrgID,
|
||
|
NamespaceUID: a.FolderUID,
|
||
|
RuleGroup: a.RuleGroup,
|
||
|
Title: a.Title,
|
||
|
Condition: a.Condition,
|
||
|
Data: a.Data,
|
||
|
Updated: a.Updated,
|
||
|
NoDataState: a.NoDataState,
|
||
|
ExecErrState: a.ExecErrState,
|
||
|
For: time.Duration(a.For),
|
||
|
Annotations: a.Annotations,
|
||
|
Labels: a.Labels,
|
||
|
IsPaused: a.IsPaused,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
// ProvisionedAlertRuleFromAlertRule converts models.AlertRule to definitions.ProvisionedAlertRule and sets provided provenance status
|
||
|
func ProvisionedAlertRuleFromAlertRule(rule models.AlertRule, provenance models.Provenance) definitions.ProvisionedAlertRule {
|
||
|
return definitions.ProvisionedAlertRule{
|
||
|
ID: rule.ID,
|
||
|
UID: rule.UID,
|
||
|
OrgID: rule.OrgID,
|
||
|
FolderUID: rule.NamespaceUID,
|
||
|
RuleGroup: rule.RuleGroup,
|
||
|
Title: rule.Title,
|
||
|
For: model.Duration(rule.For),
|
||
|
Condition: rule.Condition,
|
||
|
Data: rule.Data,
|
||
|
Updated: rule.Updated,
|
||
|
NoDataState: rule.NoDataState,
|
||
|
ExecErrState: rule.ExecErrState,
|
||
|
Annotations: rule.Annotations,
|
||
|
Labels: rule.Labels,
|
||
|
Provenance: definitions.Provenance(provenance), // TODO validate enum conversion?
|
||
|
IsPaused: rule.IsPaused,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ProvisionedAlertRuleFromAlertRules converts a collection of models.AlertRule to definitions.ProvisionedAlertRules with provenance status models.ProvenanceNone
|
||
|
func ProvisionedAlertRuleFromAlertRules(rules []*models.AlertRule) definitions.ProvisionedAlertRules {
|
||
|
result := make([]definitions.ProvisionedAlertRule, 0, len(rules))
|
||
|
for _, r := range rules {
|
||
|
result = append(result, ProvisionedAlertRuleFromAlertRule(*r, models.ProvenanceNone))
|
||
|
}
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
func AlertRuleGroupFromApi(a definitions.AlertRuleGroup) (models.AlertRuleGroup, error) {
|
||
|
ruleGroup := models.AlertRuleGroup{
|
||
|
Title: a.Title,
|
||
|
FolderUID: a.FolderUID,
|
||
|
Interval: a.Interval,
|
||
|
}
|
||
|
for i := range a.Rules {
|
||
|
converted, err := AlertRuleFromProvisionedAlertRule(a.Rules[i])
|
||
|
if err != nil {
|
||
|
return models.AlertRuleGroup{}, err
|
||
|
}
|
||
|
ruleGroup.Rules = append(ruleGroup.Rules, converted)
|
||
|
}
|
||
|
return ruleGroup, nil
|
||
|
}
|
||
|
|
||
|
func AlertRuleGroupToApi(d models.AlertRuleGroup) definitions.AlertRuleGroup {
|
||
|
rules := make([]definitions.ProvisionedAlertRule, 0, len(d.Rules))
|
||
|
for i := range d.Rules {
|
||
|
rules = append(rules, ProvisionedAlertRuleFromAlertRule(d.Rules[i], d.Provenance))
|
||
|
}
|
||
|
return definitions.AlertRuleGroup{
|
||
|
Title: d.Title,
|
||
|
FolderUID: d.FolderUID,
|
||
|
Interval: d.Interval,
|
||
|
Rules: rules,
|
||
|
}
|
||
|
}
|