grafana/pkg/services/alerting/alert_rule_reader.go

108 lines
2.2 KiB
Go

package alerting
import (
"sync"
"time"
"github.com/grafana/grafana/pkg/bus"
m "github.com/grafana/grafana/pkg/models"
)
type RuleReader interface {
Fetch() []m.AlertRule
}
type AlertRuleReader struct {
sync.RWMutex
serverID string
serverPosition int
clusterSize int
}
func NewRuleReader() *AlertRuleReader {
rrr := &AlertRuleReader{}
go rrr.initReader()
return rrr
}
var (
alertJobs []m.AlertRule
)
func (arr *AlertRuleReader) Fetch() []m.AlertRule {
return alertJobs
}
func (arr *AlertRuleReader) initReader() {
alertJobs = make([]m.AlertRule, 0)
heartbeat := time.NewTicker(time.Second * 10)
arr.updateRules()
for {
select {
case <-heartbeat.C:
arr.updateRules()
}
}
}
func (arr *AlertRuleReader) updateRules() {
arr.Lock()
defer arr.Unlock()
/*
rules = []m.AlertRule{
//{Id: 1, Title: "alert rule 1", Interval: "10s", Frequency: 10},
//{Id: 2, Title: "alert rule 2", Interval: "10s", Frequency: 10},
//{Id: 3, Title: "alert rule 3", Interval: "10s", Frequency: 10},
//{Id: 4, Title: "alert rule 4", Interval: "10s", Frequency: 5},
//{Id: 5, Title: "alert rule 5", Interval: "10s", Frequency: 5},
{
Id: 1,
OrgId: 1,
Title: "alert rule 1",
Frequency: 3,
DatasourceId: 1,
WarnOperator: ">",
WarnLevel: 3,
CritOperator: ">",
CritLevel: 4,
Aggregator: "avg",
//Query: `{"refId":"A","target":"statsd.fakesite.counters.session_start.*.count","textEditor":true}"`,
Query: `{"hide":false,"refId":"A","target":"aliasByNode(statsd.fakesite.counters.session_start.*.count, 4)","textEditor":false}`,
QueryRange: 3600,
},
}
*/
cmd := &m.GetAlertsQuery{
OrgId: 1,
}
err := bus.Dispatch(cmd)
if err == nil {
alertJobs = cmd.Result
}
}
func (arr *AlertRuleReader) heartBeat() {
//Lets cheat on this until we focus on clustering
//log.Info("Heartbeat: Sending heartbeat from " + this.serverId)
arr.clusterSize = 1
arr.serverPosition = 1
/*
cmd := &m.HeartBeatCommand{ServerId: this.serverId}
err := bus.Dispatch(cmd)
if err != nil {
log.Error(1, "Failed to send heartbeat.")
} else {
this.clusterSize = cmd.Result.ClusterSize
this.serverPosition = cmd.Result.UptimePosition
}
*/
}