alerts.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package models
  2. import (
  3. "github.com/grafana/grafana/pkg/components/simplejson"
  4. "time"
  5. )
  6. type AlertRule struct {
  7. Id int64
  8. OrgId int64
  9. DashboardId int64
  10. PanelId int64
  11. Query string
  12. QueryRefId string
  13. WarnLevel string
  14. CritLevel string
  15. Interval string
  16. Title string
  17. Description string
  18. QueryRange string
  19. Aggregator string
  20. }
  21. type AlertRuleChange struct {
  22. OrgId int64
  23. AlertId int64
  24. Type string
  25. Created time.Time
  26. }
  27. func (cmd *SaveDashboardCommand) GetAlertModels() *[]AlertRule {
  28. alerts := make([]AlertRule, 0)
  29. for _, rowObj := range cmd.Dashboard.Get("rows").MustArray() {
  30. row := simplejson.NewFromAny(rowObj)
  31. for _, panelObj := range row.Get("panels").MustArray() {
  32. panel := simplejson.NewFromAny(panelObj)
  33. alerting := panel.Get("alerting")
  34. alert := AlertRule{
  35. DashboardId: cmd.Result.Id,
  36. OrgId: cmd.Result.OrgId,
  37. PanelId: panel.Get("id").MustInt64(),
  38. Id: alerting.Get("id").MustInt64(),
  39. QueryRefId: alerting.Get("query_ref").MustString(),
  40. WarnLevel: alerting.Get("warn_level").MustString(),
  41. CritLevel: alerting.Get("crit_level").MustString(),
  42. Interval: alerting.Get("interval").MustString(),
  43. Title: alerting.Get("title").MustString(),
  44. Description: alerting.Get("description").MustString(),
  45. QueryRange: alerting.Get("query_range").MustString(),
  46. Aggregator: alerting.Get("aggregator").MustString(),
  47. }
  48. for _, targetsObj := range panel.Get("targets").MustArray() {
  49. target := simplejson.NewFromAny(targetsObj)
  50. if target.Get("refId").MustString() == alert.QueryRefId {
  51. alert.Query = target.Get("target").MustString()
  52. continue
  53. }
  54. }
  55. if alert.Query != "" {
  56. alerts = append(alerts, alert)
  57. }
  58. }
  59. }
  60. return &alerts
  61. }
  62. // Commands
  63. type SaveAlertsCommand struct {
  64. DashboardId int64
  65. UserId int64
  66. OrgId int64
  67. Alerts *[]AlertRule
  68. }