update error handle

This commit is contained in:
liugq 2022-04-18 10:08:42 +08:00
parent e6299f9303
commit 6c75b5aeba
1 changed files with 32 additions and 11 deletions

View File

@ -312,6 +312,9 @@ func (engine *Engine) ExecuteQuery(rule *alerting.Rule)([]alerting.MetricData, e
if err != nil { if err != nil {
return nil, err return nil, err
} }
if searchRes.StatusCode != 200 {
return nil, fmt.Errorf("search error: %s", string(searchRes.RawResult.Body))
}
searchResult := map[string]interface{}{} searchResult := map[string]interface{}{}
err = util.FromJSONBytes(searchRes.RawResult.Body, &searchResult) err = util.FromJSONBytes(searchRes.RawResult.Body, &searchResult)
if err != nil { if err != nil {
@ -435,18 +438,26 @@ func (engine *Engine) CheckCondition(rule *alerting.Rule)([]alerting.ConditionRe
return conditionResults, nil return conditionResults, nil
} }
func (engine *Engine) Do(rule *alerting.Rule) error { func (engine *Engine) Do(rule *alerting.Rule) error {
log.Tracef("start check condition of rule %s", rule.ID)
conditionResults, err := engine.CheckCondition(rule) var (
if err != nil { alertItem *alerting.Alert
return err err error
} )
lastAlertItem := alerting.Alert{}
err = getLastAlert(rule.ID, &lastAlertItem)
if err != nil {
return err
}
var alertItem *alerting.Alert
defer func() { defer func() {
if err != nil && alertItem == nil {
alertItem = &alerting.Alert{
ID: util.GetUUID(),
Created: time.Now(),
Updated: time.Now(),
RuleID: rule.ID,
ResourceID: rule.Resource.ID,
ResourceName: rule.Resource.Name,
Expression: rule.Metrics.Expression,
Objects: rule.Resource.Objects,
State: alerting.AlertStateError,
Error: err.Error(),
}
}
if alertItem != nil { if alertItem != nil {
for _, actionResult := range alertItem.ActionExecutionResults { for _, actionResult := range alertItem.ActionExecutionResults {
if actionResult.Error != "" { if actionResult.Error != "" {
@ -462,6 +473,16 @@ func (engine *Engine) Do(rule *alerting.Rule) error {
} }
} }
}() }()
log.Tracef("start check condition of rule %s", rule.ID)
conditionResults, err := engine.CheckCondition(rule)
if err != nil {
return err
}
lastAlertItem := alerting.Alert{}
err = getLastAlert(rule.ID, &lastAlertItem)
if err != nil {
return err
}
if len(conditionResults) == 0 { if len(conditionResults) == 0 {
if lastAlertItem.State != alerting.AlertStateNormal && lastAlertItem.ID != "" { if lastAlertItem.State != alerting.AlertStateNormal && lastAlertItem.ID != "" {
alertItem = &alerting.Alert{ alertItem = &alerting.Alert{