Alerting: Create AlertInstanceKey in one place (#58278)

* use method GetAlertInstanceKey
* do not add key if error
This commit is contained in:
Yuri Tseretyan 2022-11-07 09:35:29 -05:00 committed by GitHub
parent 1fb37b54b3
commit 623de12e35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 13 deletions

View File

@ -291,18 +291,13 @@ func (st *Manager) saveAlertStates(ctx context.Context, logger log.Logger, state
instances := make([]ngModels.AlertInstance, 0, len(states))
for _, s := range states {
labels := ngModels.InstanceLabels(s.Labels)
_, hash, err := labels.StringAndHash()
key, err := s.GetAlertInstanceKey()
if err != nil {
logger.Error("Failed to create a key for alert state to save it to database. The state will be ignored ", "cacheID", s.CacheID, "error", err)
continue
}
fields := ngModels.AlertInstance{
AlertInstanceKey: ngModels.AlertInstanceKey{
RuleOrgID: s.OrgID,
RuleUID: s.AlertRuleUID,
LabelsHash: hash,
},
AlertInstanceKey: key,
Labels: ngModels.InstanceLabels(s.Labels),
CurrentState: ngModels.InstanceStateType(s.State.State.String()),
CurrentReason: s.StateReason,
@ -352,13 +347,13 @@ func (st *Manager) staleResultsHandler(ctx context.Context, evaluatedAt time.Tim
if _, ok := states[s.CacheID]; !ok && stateIsStale(evaluatedAt, s.LastEvaluationTime, alertRule.IntervalSeconds) {
logger.Info("Removing stale state entry", "cacheID", s.CacheID, "state", s.State, "reason", s.StateReason)
st.cache.deleteEntry(s.OrgID, s.AlertRuleUID, s.CacheID)
ilbs := ngModels.InstanceLabels(s.Labels)
_, labelsHash, err := ilbs.StringAndHash()
if err != nil {
logger.Error("Unable to get labelsHash", "error", err.Error(), s.AlertRuleUID)
}
toDelete = append(toDelete, ngModels.AlertInstanceKey{RuleOrgID: s.OrgID, RuleUID: s.AlertRuleUID, LabelsHash: labelsHash})
key, err := s.GetAlertInstanceKey()
if err != nil {
logger.Error("Unable to get alert instance key to delete it from database. Ignoring", "error", err.Error())
} else {
toDelete = append(toDelete, key)
}
if s.State == eval.Alerting {
oldState := s.State

View File

@ -73,6 +73,15 @@ func (a *State) GetRuleKey() models.AlertRuleKey {
}
}
func (a *State) GetAlertInstanceKey() (models.AlertInstanceKey, error) {
instanceLabels := models.InstanceLabels(a.Labels)
_, labelsHash, err := instanceLabels.StringAndHash()
if err != nil {
return models.AlertInstanceKey{}, err
}
return models.AlertInstanceKey{RuleOrgID: a.OrgID, RuleUID: a.AlertRuleUID, LabelsHash: labelsHash}, nil
}
// StateTransition describes the transition from one state to another.
type StateTransition struct {
*State