alert_rule.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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 NewAlertRuleFromDBModel(ruleDef *m.Alert) (*AlertRule, error) {
  24. model := &AlertRule{}
  25. model.Id = ruleDef.Id
  26. model.OrgId = ruleDef.OrgId
  27. model.Name = ruleDef.Name
  28. model.Description = ruleDef.Description
  29. model.State = ruleDef.State
  30. critical := ruleDef.Expression.Get("critical")
  31. model.Critical = Level{
  32. Operator: critical.Get("op").MustString(),
  33. Level: critical.Get("level").MustFloat64(),
  34. }
  35. warning := ruleDef.Expression.Get("warning")
  36. model.Warning = Level{
  37. Operator: warning.Get("op").MustString(),
  38. Level: warning.Get("level").MustFloat64(),
  39. }
  40. model.Frequency = ruleDef.Expression.Get("frequency").MustInt64()
  41. model.Transform = ruleDef.Expression.Get("transform").Get("type").MustString()
  42. model.TransformParams = *ruleDef.Expression.Get("transform")
  43. if model.Transform == "aggregation" {
  44. model.Transformer = &AggregationTransformer{
  45. Method: ruleDef.Expression.Get("transform").Get("method").MustString(),
  46. }
  47. }
  48. query := ruleDef.Expression.Get("query")
  49. model.Query = AlertQuery{
  50. Query: query.Get("query").MustString(),
  51. DatasourceId: query.Get("datasourceId").MustInt64(),
  52. From: query.Get("from").MustString(),
  53. To: query.Get("to").MustString(),
  54. Aggregator: query.Get("agg").MustString(),
  55. }
  56. if model.Query.Query == "" {
  57. return nil, fmt.Errorf("missing query.query")
  58. }
  59. if model.Query.DatasourceId == 0 {
  60. return nil, fmt.Errorf("missing query.datasourceId")
  61. }
  62. return model, nil
  63. }