alert_rule.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package alerting
  2. import (
  3. "fmt"
  4. "github.com/grafana/grafana/pkg/components/simplejson"
  5. m "github.com/grafana/grafana/pkg/models"
  6. )
  7. type AlertRule struct {
  8. Id int64
  9. OrgId int64
  10. DashboardId int64
  11. PanelId int64
  12. Frequency int64
  13. Name string
  14. Description string
  15. State string
  16. Warning Level
  17. Critical Level
  18. Query AlertQuery
  19. Transform string
  20. TransformParams simplejson.Json
  21. Transformer Transformer
  22. }
  23. func getTimeDurationStringToSeconds(str string) int64 {
  24. return 60
  25. }
  26. func NewAlertRuleFromDBModel(ruleDef *m.Alert) (*AlertRule, error) {
  27. model := &AlertRule{}
  28. model.Id = ruleDef.Id
  29. model.OrgId = ruleDef.OrgId
  30. model.Name = ruleDef.Name
  31. model.Description = ruleDef.Description
  32. model.State = ruleDef.State
  33. critical := ruleDef.Expression.Get("critical")
  34. model.Critical = Level{
  35. Operator: critical.Get("op").MustString(),
  36. Level: critical.Get("level").MustFloat64(),
  37. }
  38. warning := ruleDef.Expression.Get("warn")
  39. model.Warning = Level{
  40. Operator: warning.Get("op").MustString(),
  41. Level: warning.Get("level").MustFloat64(),
  42. }
  43. model.Frequency = getTimeDurationStringToSeconds(ruleDef.Expression.Get("frequency").MustString())
  44. model.Transform = ruleDef.Expression.Get("transform").Get("type").MustString()
  45. model.TransformParams = *ruleDef.Expression.Get("transform")
  46. if model.Transform == "aggregation" {
  47. model.Transformer = &AggregationTransformer{
  48. Method: ruleDef.Expression.Get("transform").Get("method").MustString(),
  49. }
  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. }