grafana/pkg/services/ngalert/state/historian/model/rule.go
Alexander Weaver 046a9bb7c1
Alerting: Copy rule definitions into state history (#62032)
* Copy rules instead of accepting pointer

* Deep-copy the rule, for even more guarantees

* Create struct just for needed fields

* Move RuleMeta to historian/model package, iron out package dependencies

* Move tests for dash ID parsing to model package along with code
2023-01-25 11:29:57 -06:00

47 lines
1.1 KiB
Go

package model
import (
"strconv"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/services/ngalert/models"
)
// RuleMeta is the metadata about a rule that is needed by state history.
type RuleMeta struct {
ID int64
OrgID int64
UID string
Title string
Group string
NamespaceUID string
DashboardUID string
PanelID int64
}
func NewRuleMeta(r *models.AlertRule, log log.Logger) RuleMeta {
dashUID, ok := r.Annotations[models.DashboardUIDAnnotation]
var panelID int64
if ok {
panelAnno := r.Annotations[models.PanelIDAnnotation]
pid, err := strconv.ParseInt(panelAnno, 10, 64)
if err != nil {
logger.Error("Error parsing panelUID for alert annotation", "ruleID", r.ID, "dash", dashUID, "actual", panelAnno, "error", err)
pid = 0
dashUID = ""
}
panelID = pid
}
return RuleMeta{
ID: r.ID,
OrgID: r.OrgID,
UID: r.UID,
Title: r.Title,
Group: r.RuleGroup,
NamespaceUID: r.NamespaceUID,
DashboardUID: dashUID,
PanelID: panelID,
}
}