commands.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. if alerts, err := extractor.GetAlerts(); err != nil {
  22. return err
  23. } else {
  24. saveAlerts.Alerts = alerts
  25. }
  26. if err := bus.Dispatch(&saveAlerts); err != nil {
  27. return err
  28. }
  29. return nil
  30. }
  31. func getTimeDurationStringToSeconds(str string) int64 {
  32. return 60
  33. }
  34. func ConvetAlertModelToAlertRule(ruleDef *m.Alert) (*AlertRule, error) {
  35. model := &AlertRule{}
  36. model.Id = ruleDef.Id
  37. model.OrgId = ruleDef.OrgId
  38. model.Name = ruleDef.Name
  39. model.Description = ruleDef.Description
  40. model.State = ruleDef.State
  41. critical := ruleDef.Expression.Get("critical")
  42. model.Critical = Level{
  43. Operator: critical.Get("op").MustString(),
  44. Level: critical.Get("level").MustFloat64(),
  45. }
  46. warning := ruleDef.Expression.Get("warning")
  47. model.Warning = Level{
  48. Operator: warning.Get("op").MustString(),
  49. Level: warning.Get("level").MustFloat64(),
  50. }
  51. model.Frequency = getTimeDurationStringToSeconds(ruleDef.Expression.Get("frequency").MustString())
  52. model.Transform = ruleDef.Expression.Get("transform").Get("type").MustString()
  53. model.TransformParams = *ruleDef.Expression.Get("transform")
  54. if model.Transform == "aggregation" {
  55. model.Transformer = &AggregationTransformer{
  56. Method: ruleDef.Expression.Get("transform").Get("method").MustString(),
  57. }
  58. }
  59. query := ruleDef.Expression.Get("query")
  60. model.Query = AlertQuery{
  61. Query: query.Get("query").MustString(),
  62. DatasourceId: query.Get("datasourceId").MustInt64(),
  63. From: query.Get("from").MustString(),
  64. To: query.Get("to").MustString(),
  65. Aggregator: query.Get("agg").MustString(),
  66. }
  67. if model.Query.Query == "" {
  68. return nil, fmt.Errorf("missing query.query")
  69. }
  70. if model.Query.DatasourceId == 0 {
  71. return nil, fmt.Errorf("missing query.datasourceId")
  72. }
  73. return model, nil
  74. }