models.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package elasticsearch
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/grafana/grafana/pkg/components/simplejson"
  7. )
  8. type BucketAgg struct {
  9. Field string `json:"field"`
  10. ID string `json:"id"`
  11. Settings *simplejson.Json `json:"settings"`
  12. Type string `jsons:"type"`
  13. }
  14. type Metric struct {
  15. Field string `json:"field"`
  16. Hide bool `json:"hide"`
  17. ID string `json:"id"`
  18. PipelineAggregate string `json:"pipelineAgg"`
  19. Settings *simplejson.Json `json:"settings"`
  20. Type string `json:"type"`
  21. }
  22. type QueryHeader struct {
  23. SearchType string `json:"search_type"`
  24. IgnoreUnavailable bool `json:"ignore_unavailable"`
  25. Index interface{} `json:"index"`
  26. MaxConcurrentShardRequests int `json:"max_concurrent_shard_requests,omitempty"`
  27. }
  28. func (q *QueryHeader) String() string {
  29. r, _ := json.Marshal(q)
  30. return string(r)
  31. }
  32. type Request struct {
  33. Query map[string]interface{} `json:"query"`
  34. Aggs Aggs `json:"aggs"`
  35. Size int `json:"size"`
  36. }
  37. type Aggs map[string]interface{}
  38. type HistogramAgg struct {
  39. Interval string `json:"interval,omitempty"`
  40. Field string `json:"field"`
  41. MinDocCount int `json:"min_doc_count"`
  42. Missing string `json:"missing,omitempty"`
  43. }
  44. type DateHistogramAgg struct {
  45. HistogramAgg
  46. ExtendedBounds ExtendedBounds `json:"extended_bounds"`
  47. Format string `json:"format"`
  48. }
  49. type FiltersAgg struct {
  50. Filters map[string]interface{} `json:"filters"`
  51. }
  52. type TermsAgg struct {
  53. Field string `json:"field"`
  54. Size int `json:"size"`
  55. Order map[string]interface{} `json:"order"`
  56. Missing string `json:"missing,omitempty"`
  57. }
  58. type TermsAggWrap struct {
  59. Terms TermsAgg `json:"terms"`
  60. Aggs Aggs `json:"aggs"`
  61. }
  62. type ExtendedBounds struct {
  63. Min string `json:"min"`
  64. Max string `json:"max"`
  65. }
  66. type RangeFilter struct {
  67. Range map[string]RangeFilterSetting `json:"range"`
  68. }
  69. type RangeFilterSetting struct {
  70. Gte string `json:"gte"`
  71. Lte string `json:"lte"`
  72. Format string `json:"format"`
  73. }
  74. func newRangeFilter(field string, rangeFilterSetting RangeFilterSetting) *RangeFilter {
  75. return &RangeFilter{
  76. map[string]RangeFilterSetting{field: rangeFilterSetting}}
  77. }
  78. type QueryStringFilter struct {
  79. QueryString QueryStringFilterSetting `json:"query_string"`
  80. }
  81. type QueryStringFilterSetting struct {
  82. AnalyzeWildcard bool `json:"analyze_wildcard"`
  83. Query string `json:"query"`
  84. }
  85. func newQueryStringFilter(analyzeWildcard bool, query string) *QueryStringFilter {
  86. return &QueryStringFilter{QueryStringFilterSetting{AnalyzeWildcard: analyzeWildcard, Query: query}}
  87. }
  88. type BoolQuery struct {
  89. Filter []interface{} `json:"filter"`
  90. }
  91. type Responses struct {
  92. Responses []Response `json:"responses"`
  93. }
  94. type Response struct {
  95. Status int `json:"status"`
  96. Err map[string]interface{} `json:"error"`
  97. Aggregations map[string]interface{} `json:"aggregations"`
  98. }
  99. func (r *Response) getErrMsg() string {
  100. var msg bytes.Buffer
  101. errJson := simplejson.NewFromAny(r.Err)
  102. errType, err := errJson.Get("type").String()
  103. if err == nil {
  104. msg.WriteString(fmt.Sprintf("type:%s", errType))
  105. }
  106. reason, err := errJson.Get("type").String()
  107. if err == nil {
  108. msg.WriteString(fmt.Sprintf("reason:%s", reason))
  109. }
  110. return msg.String()
  111. }