alerts.go 1.7 KB

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