alert_state.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. }
  13. func SetNewAlertState(cmd *m.UpdateAlertStateCommand) error {
  14. return inTransaction(func(sess *xorm.Session) error {
  15. if !cmd.IsValidState() {
  16. return fmt.Errorf("new state is invalid")
  17. }
  18. alert := m.Alert{}
  19. has, err := sess.Id(cmd.AlertId).Get(&alert)
  20. if err != nil {
  21. return err
  22. }
  23. if !has {
  24. return fmt.Errorf("Could not find alert")
  25. }
  26. if alert.State == cmd.NewState {
  27. cmd.Result = &m.Alert{}
  28. return nil
  29. }
  30. alert.State = cmd.NewState
  31. sess.Id(alert.Id).Update(&alert)
  32. alertState := m.AlertState{
  33. AlertId: cmd.AlertId,
  34. OrgId: cmd.AlertId,
  35. NewState: cmd.NewState,
  36. Info: cmd.Info,
  37. Created: time.Now(),
  38. }
  39. sess.Insert(&alertState)
  40. cmd.Result = &alert
  41. return nil
  42. })
  43. }
  44. func GetAlertStateLogByAlertId(cmd *m.GetAlertsStateQuery) error {
  45. alertLogs := make([]m.AlertState, 0)
  46. if err := x.Where("alert_id = ?", cmd.AlertId).Desc("created").Find(&alertLogs); err != nil {
  47. return err
  48. }
  49. cmd.Result = &alertLogs
  50. return nil
  51. }