alert_state.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package sqlstore
  2. import (
  3. "fmt"
  4. "time"
  5. "github.com/go-xorm/xorm"
  6. "github.com/grafana/grafana/pkg/bus"
  7. m "github.com/grafana/grafana/pkg/models"
  8. )
  9. func init() {
  10. bus.AddHandler("sql", SetNewAlertState)
  11. bus.AddHandler("sql", GetAlertStateLogByAlertId)
  12. bus.AddHandler("sql", GetLastAlertStateQuery)
  13. }
  14. func GetLastAlertStateQuery(cmd *m.GetLastAlertStateQuery) error {
  15. states := make([]m.AlertState, 0)
  16. if err := x.Where("alert_id = ? and org_id = ? ", cmd.AlertId, cmd.OrgId).Desc("created").Find(&states); err != nil {
  17. return err
  18. }
  19. if len(states) == 0 {
  20. cmd.Result = nil
  21. return nil
  22. }
  23. cmd.Result = &states[0]
  24. return nil
  25. }
  26. func SetNewAlertState(cmd *m.UpdateAlertStateCommand) error {
  27. return inTransaction(func(sess *xorm.Session) error {
  28. if !cmd.IsValidState() {
  29. return fmt.Errorf("new state is invalid")
  30. }
  31. alert := m.Alert{}
  32. has, err := sess.Id(cmd.AlertId).Get(&alert)
  33. if err != nil {
  34. return err
  35. }
  36. if !has {
  37. return fmt.Errorf("Could not find alert")
  38. }
  39. alert.State = cmd.NewState
  40. sess.Id(alert.Id).Update(&alert)
  41. alertState := m.AlertState{
  42. AlertId: cmd.AlertId,
  43. OrgId: cmd.OrgId,
  44. NewState: cmd.NewState,
  45. Info: cmd.Info,
  46. Created: time.Now(),
  47. TriggeredAlerts: cmd.TriggeredAlerts,
  48. }
  49. sess.Insert(&alertState)
  50. cmd.Result = &alert
  51. return nil
  52. })
  53. }
  54. func GetAlertStateLogByAlertId(cmd *m.GetAlertsStateQuery) error {
  55. states := make([]m.AlertState, 0)
  56. if err := x.Where("alert_id = ?", cmd.AlertId).Desc("created").Find(&states); err != nil {
  57. return err
  58. }
  59. cmd.Result = &states
  60. return nil
  61. }