parser.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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. key, err := tagJson.Get("key").String()
  57. if err != nil {
  58. return nil, err
  59. }
  60. operator, err := tagJson.Get("operator").String()
  61. if err != nil {
  62. return nil, err
  63. }
  64. value, err := tagJson.Get("value").String()
  65. if err != nil {
  66. return nil, err
  67. }
  68. result = append(result, &Tag{Key: key, Operator: operator, Value: value})
  69. }
  70. return result, nil
  71. }
  72. func (*InfluxdbQueryParser) parseQueryPart(model *simplejson.Json) (*QueryPart, error) {
  73. typ, err := model.Get("type").String()
  74. if err != nil {
  75. return nil, err
  76. }
  77. var params []string
  78. for _, paramObj := range model.Get("params").MustArray() {
  79. param := simplejson.NewFromAny(paramObj)
  80. pv, err := param.String()
  81. if err != nil {
  82. return nil, err
  83. }
  84. params = append(params, pv)
  85. }
  86. return &QueryPart{Type: typ, Params: params}, nil
  87. }
  88. func (qp *InfluxdbQueryParser) parseGroupBy(model *simplejson.Json) ([]*QueryPart, error) {
  89. var result []*QueryPart
  90. for _, groupObj := range model.Get("groupBy").MustArray() {
  91. groupJson := simplejson.NewFromAny(groupObj)
  92. queryPart, err := qp.parseQueryPart(groupJson)
  93. if err != nil {
  94. return nil, err
  95. }
  96. result = append(result, queryPart)
  97. }
  98. return result, nil
  99. }