mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
feat(alerting): shows when no_data triggered alerts
closes #7035 ref #7257
This commit is contained in:
parent
f29f83ca75
commit
e78da57e4d
@ -75,6 +75,7 @@ func GetAlerts(c *middleware.Context) Response {
|
||||
State: alert.State,
|
||||
NewStateDate: alert.NewStateDate,
|
||||
ExecutionError: alert.ExecutionError,
|
||||
EvalData: alert.EvalData,
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@ type AlertRule struct {
|
||||
State m.AlertStateType `json:"state"`
|
||||
NewStateDate time.Time `json:"newStateDate"`
|
||||
EvalDate time.Time `json:"evalDate"`
|
||||
EvalData *simplejson.Json `json:"evalData"`
|
||||
ExecutionError string `json:"executionError"`
|
||||
DashbboardUri string `json:"dashboardUri"`
|
||||
}
|
||||
|
@ -31,13 +31,17 @@ func (handler *DefaultResultHandler) Handle(evalContext *EvalContext) error {
|
||||
executionError := ""
|
||||
annotationData := simplejson.New()
|
||||
|
||||
if evalContext.Firing {
|
||||
annotationData = simplejson.NewFromAny(evalContext.EvalMatches)
|
||||
}
|
||||
|
||||
if evalContext.Error != nil {
|
||||
executionError = evalContext.Error.Error()
|
||||
annotationData.Set("errorMessage", executionError)
|
||||
}
|
||||
|
||||
if evalContext.Firing {
|
||||
annotationData = simplejson.NewFromAny(evalContext.EvalMatches)
|
||||
if evalContext.NoDataFound {
|
||||
annotationData.Set("no_data", true)
|
||||
}
|
||||
|
||||
countStateResult(evalContext.Rule.State)
|
||||
|
@ -113,6 +113,12 @@ func HandleAlertsQuery(query *m.GetAlertsQuery) error {
|
||||
return err
|
||||
}
|
||||
|
||||
for i, _ := range alerts {
|
||||
if alerts[i].ExecutionError == " " {
|
||||
alerts[i].ExecutionError = ""
|
||||
}
|
||||
}
|
||||
|
||||
query.Result = alerts
|
||||
return nil
|
||||
}
|
||||
|
@ -37,6 +37,9 @@ export class AlertListCtrl {
|
||||
this.alerts = _.map(result, alert => {
|
||||
alert.stateModel = alertDef.getStateDisplayModel(alert.state);
|
||||
alert.newStateDateAgo = moment(alert.newStateDate).fromNow().replace(" ago", "");
|
||||
if (alert.evalData && alert.evalData.no_data) {
|
||||
alert.no_data = true;
|
||||
}
|
||||
return alert;
|
||||
});
|
||||
});
|
||||
|
@ -82,6 +82,15 @@ export class AlertTabCtrl {
|
||||
ah.time = moment(ah.time).format('MMM D, YYYY HH:mm:ss');
|
||||
ah.stateModel = alertDef.getStateDisplayModel(ah.newState);
|
||||
ah.metrics = alertDef.joinEvalMatches(ah.data, ', ');
|
||||
|
||||
if (ah.data.errorMessage) {
|
||||
ah.metrics = "Error: " + ah.data.errorMessage;
|
||||
}
|
||||
|
||||
if (ah.data.no_data) {
|
||||
ah.metrics = "(due to no data)";
|
||||
}
|
||||
|
||||
return ah;
|
||||
});
|
||||
});
|
||||
|
@ -52,11 +52,11 @@
|
||||
<div class="card-item-sub-name">
|
||||
<span class="alert-list-item-state {{alert.stateModel.stateClass}}">
|
||||
<i class="{{alert.stateModel.iconClass}}"></i>
|
||||
{{alert.stateModel.text}}
|
||||
{{alert.stateModel.text}} <span class="small muted" ng-show="alert.no_data">(due to no data)</span>
|
||||
</span> for {{alert.newStateDateAgo}}
|
||||
</div>
|
||||
<div class="small muted" ng-show="alert.executionError">
|
||||
{{alert.executionError}}
|
||||
<div class="small muted" ng-show="alert.executionError !== ''">
|
||||
Error: "{{alert.executionError}}"
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -64,6 +64,4 @@
|
||||
</li>
|
||||
</ol>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user