commands.go 2.3 KB

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