alert_rule.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package alerting
  2. import (
  3. "fmt"
  4. "github.com/grafana/grafana/pkg/components/simplejson"
  5. "github.com/grafana/grafana/pkg/services/alerting/transformers"
  6. m "github.com/grafana/grafana/pkg/models"
  7. )
  8. type AlertRule struct {
  9. Id int64
  10. OrgId int64
  11. DashboardId int64
  12. PanelId int64
  13. Frequency int64
  14. Name string
  15. Description string
  16. State string
  17. Warning Level
  18. Critical Level
  19. Query AlertQuery
  20. Transform string
  21. TransformParams simplejson.Json
  22. Transformer transformers.Transformer
  23. }
  24. func getTimeDurationStringToSeconds(str string) int64 {
  25. return 60
  26. }
  27. func NewAlertRuleFromDBModel(ruleDef *m.Alert) (*AlertRule, error) {
  28. model := &AlertRule{}
  29. model.Id = ruleDef.Id
  30. model.OrgId = ruleDef.OrgId
  31. model.Name = ruleDef.Name
  32. model.Description = ruleDef.Description
  33. model.State = ruleDef.State
  34. critical := ruleDef.Expression.Get("critical")
  35. model.Critical = Level{
  36. Operator: critical.Get("op").MustString(),
  37. Level: critical.Get("level").MustFloat64(),
  38. }
  39. warning := ruleDef.Expression.Get("warn")
  40. model.Warning = Level{
  41. Operator: warning.Get("op").MustString(),
  42. Level: warning.Get("level").MustFloat64(),
  43. }
  44. model.Frequency = getTimeDurationStringToSeconds(ruleDef.Expression.Get("frequency").MustString())
  45. model.Transform = ruleDef.Expression.Get("transform").Get("type").MustString()
  46. model.TransformParams = *ruleDef.Expression.Get("transform")
  47. if model.Transform == "aggregation" {
  48. method := ruleDef.Expression.Get("transform").Get("method").MustString()
  49. model.Transformer = transformers.NewAggregationTransformer(method)
  50. }
  51. query := ruleDef.Expression.Get("query")
  52. model.Query = AlertQuery{
  53. Query: query.Get("query").MustString(),
  54. DatasourceId: query.Get("datasourceId").MustInt64(),
  55. From: query.Get("from").MustString(),
  56. To: query.Get("to").MustString(),
  57. Aggregator: query.Get("agg").MustString(),
  58. }
  59. if model.Query.Query == "" {
  60. return nil, fmt.Errorf("missing query.query")
  61. }
  62. if model.Query.DatasourceId == 0 {
  63. return nil, fmt.Errorf("missing query.datasourceId")
  64. }
  65. return model, nil
  66. }