mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
This commit fixes the following golint warnings: pkg/bus/bus.go:64:9: if block ends with a return statement, so drop this else and outdent its block pkg/bus/bus.go:84:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:137:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:177:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:183:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:199:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:208:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/components/dynmap/dynmap.go:236:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:242:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:257:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:263:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:278:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:284:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:299:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:331:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:350:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:356:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:366:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:390:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:396:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:405:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:427:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:433:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:442:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:459:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:465:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:474:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:491:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:497:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:506:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:523:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:529:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:538:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:555:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:561:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:570:12: if block ends with a return statement, so drop this else and outdent its block pkg/login/ldap.go:55:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/login/ldap_test.go:372:10: if block ends with a return statement, so drop this else and outdent its block pkg/middleware/middleware_test.go:213:12: if block ends with a return statement, so drop this else and outdent its block pkg/plugins/dashboard_importer.go:153:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/plugins/dashboards_updater.go:39:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/plugins/dashboards_updater.go:121:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/plugins/plugins.go:210:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/plugins/plugins.go:235:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/eval_context.go:111:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/notifier.go:92:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/notifier.go:98:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/notifier.go:122:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/rule.go:108:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/rule.go:118:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/rule.go:121:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/notifiers/telegram.go:94:10: if block ends with a return statement, so drop this else and outdent its block pkg/services/sqlstore/annotation.go:34:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/sqlstore/annotation.go:99:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/sqlstore/dashboard_test.go:107:13: if block ends with a return statement, so drop this else and outdent its block pkg/services/sqlstore/plugin_setting.go:78:10: if block ends with a return statement, so drop this else and outdent its block pkg/services/sqlstore/preferences.go:91:10: if block ends with a return statement, so drop this else and outdent its block pkg/services/sqlstore/user.go:50:10: if block ends with a return statement, so drop this else and outdent its block pkg/services/sqlstore/migrator/migrator.go:106:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/sqlstore/migrator/postgres_dialect.go:48:10: if block ends with a return statement, so drop this else and outdent its block pkg/tsdb/time_range.go:59:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/tsdb/time_range.go:67:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/tsdb/cloudwatch/metric_find_query.go:225:9: if block ends with a return statement, so drop this else and outdent its block pkg/util/filepath.go:68:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
146 lines
3.3 KiB
Go
146 lines
3.3 KiB
Go
package alerting
|
|
|
|
import (
|
|
"context"
|
|
"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
|
|
ConditionEvals string
|
|
StartTime time.Time
|
|
EndTime time.Time
|
|
Rule *Rule
|
|
log log.Logger
|
|
|
|
dashboardRef *m.DashboardRef
|
|
|
|
ImagePublicUrl string
|
|
ImageOnDiskPath string
|
|
NoDataFound bool
|
|
PrevAlertState m.AlertStateType
|
|
|
|
Ctx context.Context
|
|
}
|
|
|
|
func NewEvalContext(alertCtx context.Context, rule *Rule) *EvalContext {
|
|
return &EvalContext{
|
|
Ctx: alertCtx,
|
|
StartTime: time.Now(),
|
|
Rule: rule,
|
|
Logs: make([]*ResultLogEntry, 0),
|
|
EvalMatches: make([]*EvalMatch, 0),
|
|
log: log.New("alerting.evalContext"),
|
|
PrevAlertState: rule.State,
|
|
}
|
|
}
|
|
|
|
type StateDescription struct {
|
|
Color string
|
|
Text string
|
|
Data string
|
|
}
|
|
|
|
func (c *EvalContext) GetStateModel() *StateDescription {
|
|
switch c.Rule.State {
|
|
case m.AlertStateOK:
|
|
return &StateDescription{
|
|
Color: "#36a64f",
|
|
Text: "OK",
|
|
}
|
|
case m.AlertStateNoData:
|
|
return &StateDescription{
|
|
Color: "#888888",
|
|
Text: "No Data",
|
|
}
|
|
case m.AlertStateAlerting:
|
|
return &StateDescription{
|
|
Color: "#D63232",
|
|
Text: "Alerting",
|
|
}
|
|
default:
|
|
panic("Unknown rule state " + c.Rule.State)
|
|
}
|
|
}
|
|
|
|
func (c *EvalContext) ShouldUpdateAlertState() bool {
|
|
return c.Rule.State != c.PrevAlertState
|
|
}
|
|
|
|
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) GetDashboardUID() (*m.DashboardRef, error) {
|
|
if c.dashboardRef != nil {
|
|
return c.dashboardRef, nil
|
|
}
|
|
|
|
uidQuery := &m.GetDashboardRefByIdQuery{Id: c.Rule.DashboardId}
|
|
if err := bus.Dispatch(uidQuery); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
c.dashboardRef = uidQuery.Result
|
|
return c.dashboardRef, nil
|
|
}
|
|
|
|
const urlFormat = "%s?fullscreen=true&edit=true&tab=alert&panelId=%d&orgId=%d"
|
|
|
|
func (c *EvalContext) GetRuleUrl() (string, error) {
|
|
if c.IsTestRun {
|
|
return setting.AppUrl, nil
|
|
}
|
|
|
|
ref, err := c.GetDashboardUID()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return fmt.Sprintf(urlFormat, m.GetFullDashboardUrl(ref.Uid, ref.Slug), c.Rule.PanelId, c.Rule.OrgId), nil
|
|
}
|
|
|
|
func (c *EvalContext) GetNewState() m.AlertStateType {
|
|
if c.Error != nil {
|
|
c.log.Error("Alert Rule Result Error",
|
|
"ruleId", c.Rule.Id,
|
|
"name", c.Rule.Name,
|
|
"error", c.Error,
|
|
"changing state to", c.Rule.ExecutionErrorState.ToAlertState())
|
|
|
|
if c.Rule.ExecutionErrorState == m.ExecutionErrorKeepState {
|
|
return c.PrevAlertState
|
|
}
|
|
return c.Rule.ExecutionErrorState.ToAlertState()
|
|
|
|
} else if c.Firing {
|
|
return m.AlertStateAlerting
|
|
|
|
} else if c.NoDataFound {
|
|
c.log.Info("Alert Rule returned no data",
|
|
"ruleId", c.Rule.Id,
|
|
"name", c.Rule.Name,
|
|
"changing state to", c.Rule.NoDataState.ToAlertState())
|
|
|
|
if c.Rule.NoDataState == m.NoDataKeepState {
|
|
return c.PrevAlertState
|
|
}
|
|
return c.Rule.NoDataState.ToAlertState()
|
|
}
|
|
|
|
return m.AlertStateOK
|
|
}
|