commands.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package alerting
  2. import (
  3. "fmt"
  4. "github.com/grafana/grafana/pkg/bus"
  5. m "github.com/grafana/grafana/pkg/models"
  6. )
  7. type UpdateDashboardAlertsCommand struct {
  8. UserId int64
  9. OrgId int64
  10. Dashboard *m.Dashboard
  11. }
  12. func init() {
  13. bus.AddHandler("alerting", updateDashboardAlerts)
  14. }
  15. func updateDashboardAlerts(cmd *UpdateDashboardAlertsCommand) error {
  16. saveAlerts := m.SaveAlertsCommand{
  17. OrgId: cmd.OrgId,
  18. UserId: cmd.UserId,
  19. }
  20. extractor := NewDashAlertExtractor(cmd.Dashboard, cmd.OrgId)
  21. alerts, err := extractor.GetRuleModels()
  22. if err != nil {
  23. return err
  24. }
  25. saveAlerts.Alerts = alerts
  26. if bus.Dispatch(&saveAlerts); err != nil {
  27. return err
  28. }
  29. return nil
  30. }
  31. func ConvetAlertModelToAlertRule(ruleDef *m.Alert) (*AlertRule, error) {
  32. model := &AlertRule{}
  33. model.Id = ruleDef.Id
  34. model.OrgId = ruleDef.OrgId
  35. model.Name = ruleDef.Name
  36. model.Description = ruleDef.Description
  37. model.State = ruleDef.State
  38. critical := ruleDef.Expression.Get("critical")
  39. model.Critical = Level{
  40. Operator: critical.Get("op").MustString(),
  41. Level: critical.Get("level").MustFloat64(),
  42. }
  43. warning := ruleDef.Expression.Get("warning")
  44. model.Warning = Level{
  45. Operator: warning.Get("op").MustString(),
  46. Level: warning.Get("level").MustFloat64(),
  47. }
  48. model.Frequency = ruleDef.Expression.Get("frequency").MustInt64()
  49. model.Transform = ruleDef.Expression.Get("transform").Get("type").MustString()
  50. model.TransformParams = *ruleDef.Expression.Get("transform")
  51. if model.Transform == "aggregation" {
  52. model.Transformer = &AggregationTransformer{
  53. Method: ruleDef.Expression.Get("transform").Get("method").MustString(),
  54. }
  55. }
  56. query := ruleDef.Expression.Get("query")
  57. model.Query = AlertQuery{
  58. Query: query.Get("query").MustString(),
  59. DatasourceId: query.Get("datasourceId").MustInt64(),
  60. From: query.Get("from").MustString(),
  61. To: query.Get("to").MustString(),
  62. Aggregator: query.Get("agg").MustString(),
  63. }
  64. if model.Query.Query == "" {
  65. return nil, fmt.Errorf("missing query.query")
  66. }
  67. if model.Query.DatasourceId == 0 {
  68. return nil, fmt.Errorf("missing query.datasourceId")
  69. }
  70. return model, nil
  71. }