elasticsearch.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package elasticsearch
  2. import (
  3. "context"
  4. "fmt"
  5. "net/http"
  6. "net/url"
  7. "path"
  8. "strings"
  9. "time"
  10. "github.com/grafana/grafana/pkg/log"
  11. "github.com/grafana/grafana/pkg/models"
  12. "github.com/grafana/grafana/pkg/tsdb"
  13. )
  14. type ElasticsearchExecutor struct{}
  15. var (
  16. glog log.Logger
  17. intervalCalculator tsdb.IntervalCalculator
  18. )
  19. func NewElasticsearchExecutor(dsInfo *models.DataSource) (tsdb.TsdbQueryEndpoint, error) {
  20. return &ElasticsearchExecutor{}, nil
  21. }
  22. func init() {
  23. glog = log.New("tsdb.elasticsearch")
  24. tsdb.RegisterTsdbQueryEndpoint("elasticsearch", NewElasticsearchExecutor)
  25. intervalCalculator = tsdb.NewIntervalCalculator(&tsdb.IntervalOptions{MinInterval: time.Millisecond * 1})
  26. }
  27. func (e *ElasticsearchExecutor) Query(ctx context.Context, dsInfo *models.DataSource, tsdbQuery *tsdb.TsdbQuery) (*tsdb.Response, error) {
  28. if len(tsdbQuery.Queries) == 0 {
  29. return nil, fmt.Errorf("query contains no queries")
  30. }
  31. return e.executeTimeSeriesQuery(ctx, dsInfo, tsdbQuery)
  32. }
  33. func (e *ElasticsearchExecutor) createRequest(dsInfo *models.DataSource, query string) (*http.Request, error) {
  34. u, _ := url.Parse(dsInfo.Url)
  35. u.Path = path.Join(u.Path, "_msearch")
  36. req, err := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(query))
  37. if err != nil {
  38. return nil, err
  39. }
  40. req.Header.Set("User-Agent", "Grafana")
  41. req.Header.Set("Content-Type", "application/json")
  42. if dsInfo.BasicAuth {
  43. req.SetBasicAuth(dsInfo.BasicAuthUser, dsInfo.BasicAuthPassword)
  44. }
  45. if !dsInfo.BasicAuth && dsInfo.User != "" {
  46. req.SetBasicAuth(dsInfo.User, dsInfo.Password)
  47. }
  48. glog.Debug("Elasticsearch request", "url", req.URL.String())
  49. glog.Debug("Elasticsearch request", "body", query)
  50. return req, nil
  51. }