reader.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package alerting
  2. import (
  3. "sync"
  4. "time"
  5. "github.com/grafana/grafana/pkg/bus"
  6. "github.com/grafana/grafana/pkg/log"
  7. m "github.com/grafana/grafana/pkg/models"
  8. )
  9. type RuleReader interface {
  10. Fetch() []*AlertRule
  11. }
  12. type AlertRuleReader struct {
  13. sync.RWMutex
  14. serverID string
  15. serverPosition int
  16. clusterSize int
  17. log log.Logger
  18. }
  19. func NewRuleReader() *AlertRuleReader {
  20. ruleReader := &AlertRuleReader{
  21. log: log.New("alerting.ruleReader"),
  22. }
  23. go ruleReader.initReader()
  24. return ruleReader
  25. }
  26. func (arr *AlertRuleReader) initReader() {
  27. heartbeat := time.NewTicker(time.Second * 10)
  28. for {
  29. select {
  30. case <-heartbeat.C:
  31. arr.heartbeat()
  32. }
  33. }
  34. }
  35. func (arr *AlertRuleReader) Fetch() []*AlertRule {
  36. cmd := &m.GetAllAlertsQuery{}
  37. if err := bus.Dispatch(cmd); err != nil {
  38. arr.log.Error("Could not load alerts", "error", err)
  39. return []*AlertRule{}
  40. }
  41. res := make([]*AlertRule, 0)
  42. for _, ruleDef := range cmd.Result {
  43. if model, err := NewAlertRuleFromDBModel(ruleDef); err != nil {
  44. arr.log.Error("Could not build alert model for rule", "ruleId", ruleDef.Id, "error", err)
  45. } else {
  46. res = append(res, model)
  47. }
  48. }
  49. return res
  50. }
  51. func (arr *AlertRuleReader) heartbeat() {
  52. //Lets cheat on this until we focus on clustering
  53. //log.Info("Heartbeat: Sending heartbeat from " + this.serverId)
  54. arr.clusterSize = 1
  55. arr.serverPosition = 1
  56. /*
  57. cmd := &m.HeartBeatCommand{ServerId: this.serverId}
  58. err := bus.Dispatch(cmd)
  59. if err != nil {
  60. log.Error(1, "Failed to send heartbeat.")
  61. } else {
  62. this.clusterSize = cmd.Result.ClusterSize
  63. this.serverPosition = cmd.Result.UptimePosition
  64. }
  65. */
  66. }