parser.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package influxdb
  2. import "github.com/grafana/grafana/pkg/components/simplejson"
  3. type InfluxdbQueryParser struct{}
  4. func (qp *InfluxdbQueryParser) Parse(model *simplejson.Json) (*Query, error) {
  5. policy := model.Get("policy").MustString("default")
  6. measurement, err := model.Get("measurement").String()
  7. if err != nil {
  8. return nil, err
  9. }
  10. resultFormat, err := model.Get("resultFormat").String()
  11. if err != nil {
  12. return nil, err
  13. }
  14. tags, err := qp.parseTags(model)
  15. if err != nil {
  16. return nil, err
  17. }
  18. groupBys, err := qp.parseGroupBy(model)
  19. if err != nil {
  20. return nil, err
  21. }
  22. selects, err := qp.parseSelects(model)
  23. if err != nil {
  24. return nil, err
  25. }
  26. return &Query{
  27. Measurement: measurement,
  28. Policy: policy,
  29. ResultFormat: resultFormat,
  30. GroupBy: groupBys,
  31. Tags: tags,
  32. Selects: selects,
  33. }, nil
  34. }
  35. func (qp *InfluxdbQueryParser) parseSelects(model *simplejson.Json) ([]*Select, error) {
  36. var result []*Select
  37. for _, selectObj := range model.Get("select").MustArray() {
  38. selectJson := simplejson.NewFromAny(selectObj)
  39. var parts Select
  40. for _, partObj := range selectJson.MustArray() {
  41. part := simplejson.NewFromAny(partObj)
  42. queryPart, err := qp.parseQueryPart(part)
  43. if err != nil {
  44. return nil, err
  45. }
  46. parts = append(parts, *queryPart)
  47. }
  48. result = append(result, &parts)
  49. }
  50. return result, nil
  51. }
  52. func (*InfluxdbQueryParser) parseTags(model *simplejson.Json) ([]*Tag, error) {
  53. var result []*Tag
  54. for _, t := range model.Get("tags").MustArray() {
  55. tagJson := simplejson.NewFromAny(t)
  56. tag := &Tag{}
  57. var err error
  58. tag.Key, err = tagJson.Get("key").String()
  59. if err != nil {
  60. return nil, err
  61. }
  62. tag.Value, err = tagJson.Get("value").String()
  63. if err != nil {
  64. return nil, err
  65. }
  66. operator, err := tagJson.Get("operator").String()
  67. if err == nil {
  68. tag.Operator = operator
  69. }
  70. condition, err := tagJson.Get("condition").String()
  71. if err == nil {
  72. tag.Condition = condition
  73. }
  74. result = append(result, tag)
  75. }
  76. return result, nil
  77. }
  78. func (*InfluxdbQueryParser) parseQueryPart(model *simplejson.Json) (*QueryPart, error) {
  79. typ, err := model.Get("type").String()
  80. if err != nil {
  81. return nil, err
  82. }
  83. var params []string
  84. for _, paramObj := range model.Get("params").MustArray() {
  85. param := simplejson.NewFromAny(paramObj)
  86. pv, err := param.String()
  87. if err != nil {
  88. return nil, err
  89. }
  90. params = append(params, pv)
  91. }
  92. return &QueryPart{Type: typ, Params: params}, nil
  93. }
  94. func (qp *InfluxdbQueryParser) parseGroupBy(model *simplejson.Json) ([]*QueryPart, error) {
  95. var result []*QueryPart
  96. for _, groupObj := range model.Get("groupBy").MustArray() {
  97. groupJson := simplejson.NewFromAny(groupObj)
  98. queryPart, err := qp.parseQueryPart(groupJson)
  99. if err != nil {
  100. return nil, err
  101. }
  102. result = append(result, queryPart)
  103. }
  104. return result, nil
  105. }