models.go 3.0 KB

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