| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- package alerting
- import (
- "fmt"
- "time"
- "github.com/grafana/grafana/pkg/bus"
- "github.com/grafana/grafana/pkg/log"
- m "github.com/grafana/grafana/pkg/models"
- "github.com/grafana/grafana/pkg/setting"
- )
- type EvalContext struct {
- Firing bool
- IsTestRun bool
- EvalMatches []*EvalMatch
- Logs []*ResultLogEntry
- Error error
- Description string
- StartTime time.Time
- EndTime time.Time
- Rule *Rule
- DoneChan chan bool
- CancelChan chan bool
- log log.Logger
- dashboardSlug string
- ImagePublicUrl string
- ImageOnDiskPath string
- }
- type StateDescription struct {
- Color string
- Text string
- Data string
- }
- func (c *EvalContext) GetStateModel() *StateDescription {
- if c.Error != nil {
- return &StateDescription{
- Color: "#D63232",
- Text: "EXECUTION ERROR",
- }
- }
- if !c.Firing {
- return &StateDescription{
- Color: "#36a64f",
- Text: "OK",
- }
- }
- if c.Rule.Severity == m.AlertSeverityWarning {
- return &StateDescription{
- Color: "#fd821b",
- Text: "WARNING",
- }
- } else {
- return &StateDescription{
- Color: "#D63232",
- Text: "CRITICAL",
- }
- }
- }
- func (a *EvalContext) GetDurationMs() float64 {
- return float64(a.EndTime.Nanosecond()-a.StartTime.Nanosecond()) / float64(1000000)
- }
- func (c *EvalContext) GetNotificationTitle() string {
- return "[" + c.GetStateModel().Text + "] " + c.Rule.Name
- }
- func (c *EvalContext) getDashboardSlug() (string, error) {
- if c.dashboardSlug != "" {
- return c.dashboardSlug, nil
- }
- slugQuery := &m.GetDashboardSlugByIdQuery{Id: c.Rule.DashboardId}
- if err := bus.Dispatch(slugQuery); err != nil {
- return "", err
- }
- c.dashboardSlug = slugQuery.Result
- return c.dashboardSlug, nil
- }
- func (c *EvalContext) GetRuleUrl() (string, error) {
- if slug, err := c.getDashboardSlug(); err != nil {
- return "", err
- } else {
- ruleUrl := fmt.Sprintf("%sdashboard/db/%s?fullscreen&edit&tab=alert&panelId=%d", setting.AppUrl, slug, c.Rule.PanelId)
- return ruleUrl, nil
- }
- }
- func (c *EvalContext) GetImageUrl() (string, error) {
- if slug, err := c.getDashboardSlug(); err != nil {
- return "", err
- } else {
- ruleUrl := fmt.Sprintf("%sdashboard-solo/db/%s?&panelId=%d", setting.AppUrl, slug, c.Rule.PanelId)
- return ruleUrl, nil
- }
- }
- func NewEvalContext(rule *Rule) *EvalContext {
- return &EvalContext{
- StartTime: time.Now(),
- Rule: rule,
- Logs: make([]*ResultLogEntry, 0),
- EvalMatches: make([]*EvalMatch, 0),
- DoneChan: make(chan bool, 1),
- CancelChan: make(chan bool, 1),
- log: log.New("alerting.evalContext"),
- }
- }
|