mirror of https://github.com/grafana/grafana
parent
0ce55600bb
commit
fb636344a6
@ -0,0 +1,63 @@ |
||||
package alerting |
||||
|
||||
import ( |
||||
"fmt" |
||||
"time" |
||||
|
||||
"github.com/grafana/grafana/pkg/bus" |
||||
"github.com/grafana/grafana/pkg/components/simplejson" |
||||
m "github.com/grafana/grafana/pkg/models" |
||||
) |
||||
|
||||
type TestAlertRuleCommand struct { |
||||
Dashboard *simplejson.Json |
||||
PanelId int64 |
||||
OrgId int64 |
||||
|
||||
Result *AlertResultContext |
||||
} |
||||
|
||||
func init() { |
||||
bus.AddHandler("alerting", handleTestAlertRuleCommand) |
||||
} |
||||
|
||||
func handleTestAlertRuleCommand(cmd *TestAlertRuleCommand) error { |
||||
|
||||
dash, err := m.NewDashboardFromJson(cmd.Dashboard) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
|
||||
extractor := NewDashAlertExtractor(cmd.Dashboard) |
||||
rules, err := extractor.GetAlerts() |
||||
if err != nil { |
||||
return err |
||||
} |
||||
|
||||
for _, rule := range rules { |
||||
if rule.PanelId == cmd.PanelId { |
||||
if res, err := testAlertRule(rule); err != nil { |
||||
return err |
||||
} else { |
||||
cmd.Result = res |
||||
return nil |
||||
} |
||||
} |
||||
} |
||||
|
||||
return fmt.Errorf("Could not find alert with panel id %d", cmd.PanelId) |
||||
} |
||||
|
||||
func testAlertRule(rule *AlertRule) (*AlertResultContext, error) { |
||||
handler := NewHandler() |
||||
|
||||
resultChan := make(chan *AlertResultContext, 1) |
||||
handler.Execute(rule, resultChan) |
||||
|
||||
select { |
||||
case <-time.After(time.Second * 10): |
||||
return &AlertResultContext{Error: fmt.Errorf("Timeout")}, nil |
||||
case result := <-resultChan: |
||||
return result, nil |
||||
} |
||||
} |
||||
Loading…
Reference in new issue