alert_state.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 fmt.Errorf("invalid amount of alertstates. Expected 1 got %v", len(states))
  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. }
  48. sess.Insert(&alertState)
  49. cmd.Result = &alert
  50. return nil
  51. })
  52. }
  53. func GetAlertStateLogByAlertId(cmd *m.GetAlertsStateQuery) error {
  54. states := make([]m.AlertState, 0)
  55. if err := x.Where("alert_id = ?", cmd.AlertId).Desc("created").Find(&states); err != nil {
  56. return err
  57. }
  58. cmd.Result = &states
  59. return nil
  60. }