alert_rule_reader.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. }
  18. func NewRuleReader() *AlertRuleReader {
  19. ruleReader := &AlertRuleReader{}
  20. go ruleReader.initReader()
  21. return ruleReader
  22. }
  23. var (
  24. alertJobs []AlertRule
  25. )
  26. func (arr *AlertRuleReader) Fetch() []AlertRule {
  27. return alertJobs
  28. }
  29. func (arr *AlertRuleReader) initReader() {
  30. alertJobs = make([]AlertRule, 0)
  31. heartbeat := time.NewTicker(time.Second * 10)
  32. arr.updateRules()
  33. for {
  34. select {
  35. case <-heartbeat.C:
  36. arr.updateRules()
  37. }
  38. }
  39. }
  40. func (arr *AlertRuleReader) updateRules() {
  41. arr.Lock()
  42. defer arr.Unlock()
  43. cmd := &m.GetAllAlertsQuery{}
  44. err := bus.Dispatch(cmd)
  45. if err == nil {
  46. //alertJobs = cmd.Result
  47. } else {
  48. log.Error(1, "AlertRuleReader: Could not load alerts")
  49. }
  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. }