| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package alerting
- import (
- "fmt"
- "regexp"
- "strconv"
- "github.com/grafana/grafana/pkg/components/simplejson"
- "github.com/grafana/grafana/pkg/services/alerting/transformers"
- m "github.com/grafana/grafana/pkg/models"
- )
- type AlertRule struct {
- Id int64
- OrgId int64
- DashboardId int64
- PanelId int64
- Frequency int64
- Name string
- Description string
- State string
- Warning Level
- Critical Level
- Query AlertQuery
- Transform string
- TransformParams simplejson.Json
- Transformer transformers.Transformer
- NotificationGroups []int64
- }
- var (
- ValueFormatRegex = regexp.MustCompile("^\\d+")
- UnitFormatRegex = regexp.MustCompile("\\w{1}$")
- )
- var unitMultiplier = map[string]int{
- "s": 1,
- "m": 60,
- "h": 3600,
- }
- func getTimeDurationStringToSeconds(str string) int64 {
- multiplier := 1
- value, _ := strconv.Atoi(ValueFormatRegex.FindAllString(str, 1)[0])
- unit := UnitFormatRegex.FindAllString(str, 1)[0]
- if val, ok := unitMultiplier[unit]; ok {
- multiplier = val
- }
- return int64(value * multiplier)
- }
- func NewAlertRuleFromDBModel(ruleDef *m.Alert) (*AlertRule, error) {
- model := &AlertRule{}
- model.Id = ruleDef.Id
- model.OrgId = ruleDef.OrgId
- model.Name = ruleDef.Name
- model.Description = ruleDef.Description
- model.State = ruleDef.State
- model.Frequency = ruleDef.Frequency
- model.NotificationGroups = []int64{1, 2}
- critical := ruleDef.Settings.Get("crit")
- model.Critical = Level{
- Operator: critical.Get("op").MustString(),
- Value: critical.Get("value").MustFloat64(),
- }
- warning := ruleDef.Settings.Get("warn")
- model.Warning = Level{
- Operator: warning.Get("op").MustString(),
- Value: warning.Get("value").MustFloat64(),
- }
- model.Transform = ruleDef.Settings.Get("transform").Get("type").MustString()
- model.TransformParams = *ruleDef.Settings.Get("transform")
- if model.Transform == "aggregation" {
- method := ruleDef.Settings.Get("transform").Get("method").MustString()
- model.Transformer = transformers.NewAggregationTransformer(method)
- }
- query := ruleDef.Settings.Get("query")
- model.Query = AlertQuery{
- Query: query.Get("query").MustString(),
- DatasourceId: query.Get("datasourceId").MustInt64(),
- From: query.Get("from").MustString(),
- To: query.Get("to").MustString(),
- Aggregator: query.Get("agg").MustString(),
- }
- if model.Query.Query == "" {
- return nil, fmt.Errorf("missing query.query")
- }
- if model.Query.DatasourceId == 0 {
- return nil, fmt.Errorf("missing query.datasourceId")
- }
- return model, nil
- }
|