From 51511dd654d8de4b9203ac13d5de97ed999d4a56 Mon Sep 17 00:00:00 2001 From: bergquist Date: Mon, 30 May 2016 09:03:14 +0200 Subject: [PATCH] feat(alerting): save alert state --- pkg/services/alerting/alert_rule_reader.go | 10 ++++++---- pkg/services/alerting/alerting.go | 9 +++++++++ pkg/services/alerting/executor.go | 2 +- pkg/services/alerting/graphite/graphite.go | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/pkg/services/alerting/alert_rule_reader.go b/pkg/services/alerting/alert_rule_reader.go index 70d600a185d..9ed05623043 100644 --- a/pkg/services/alerting/alert_rule_reader.go +++ b/pkg/services/alerting/alert_rule_reader.go @@ -18,14 +18,16 @@ func (this AlertRuleReader) Fetch() []m.AlertRule { //{Id: 4, Title: "alert rule 4", Interval: "10s", Frequency: 5}, //{Id: 5, Title: "alert rule 5", Interval: "10s", Frequency: 5}, { - Id: 6, + Id: 1, OrgId: 1, - Title: "alert rule 6", + Title: "alert rule 1", Interval: "10s", Frequency: 3, DatasourceId: 1, - WarnOperator: ">", - WarnLevel: 100, + WarnOperator: "<", + WarnLevel: 3, + CritOperator: "<", + CritLevel: 4, Aggregator: "avg", Query: `{"refId":"A","target":"statsd.fakesite.counters.session_start.*.count","textEditor":true}"`, QueryRange: "1h", diff --git a/pkg/services/alerting/alerting.go b/pkg/services/alerting/alerting.go index 9895cf98297..5904f46e0f3 100644 --- a/pkg/services/alerting/alerting.go +++ b/pkg/services/alerting/alerting.go @@ -6,6 +6,7 @@ import ( "time" //"github.com/grafana/grafana/pkg/bus" + "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/log" m "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/setting" @@ -132,6 +133,14 @@ func (this *Scheduler) HandleResponses() { if this.jobs[response.Id] != nil { this.jobs[response.Id].running = false } + cmd := m.UpdateAlertStateCommand{ + AlertId: response.Id, + NewState: response.State, + } + + if err := bus.Dispatch(&cmd); err != nil { + log.Error(1, "failed to save state", err) + } } } diff --git a/pkg/services/alerting/executor.go b/pkg/services/alerting/executor.go index ea612a370fd..ef2b001a638 100644 --- a/pkg/services/alerting/executor.go +++ b/pkg/services/alerting/executor.go @@ -34,7 +34,7 @@ func (this *ExecutorImpl) Execute(rule m.AlertRule, responseQueue chan *AlertRes response, err := graphite.GraphiteClient{}.GetSeries(rule) if err != nil { - responseQueue <- &AlertResult{State: "CRITICAL", Id: rule.Id} + responseQueue <- &AlertResult{State: "PENDING", Id: rule.Id} } responseQueue <- this.ValidateRule(rule, response) diff --git a/pkg/services/alerting/graphite/graphite.go b/pkg/services/alerting/graphite/graphite.go index 696d807aa60..78412600387 100644 --- a/pkg/services/alerting/graphite/graphite.go +++ b/pkg/services/alerting/graphite/graphite.go @@ -48,7 +48,7 @@ func (this GraphiteClient) GetSeries(rule m.AlertRule) (m.TimeSeriesSlice, error } if res.StatusCode != http.StatusOK { - return nil, fmt.Errorf("error!") + return nil, fmt.Errorf("expected httpstatus 200, found %d", res.StatusCode) } timeSeries := make([]*m.TimeSeries, 0)