| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package mqe
- import (
- "context"
- "net/http"
- "github.com/grafana/grafana/pkg/log"
- "github.com/grafana/grafana/pkg/models"
- "github.com/grafana/grafana/pkg/tsdb"
- )
- type MQEExecutor struct {
- *models.DataSource
- queryParser *QueryParser
- apiClient *apiClient
- httpClient *http.Client
- log log.Logger
- tokenClient *TokenClient
- }
- func NewMQEExecutor(dsInfo *models.DataSource) (tsdb.Executor, error) {
- httpclient, err := dsInfo.GetHttpClient()
- if err != nil {
- return nil, err
- }
- return &MQEExecutor{
- DataSource: dsInfo,
- httpClient: httpclient,
- log: log.New("tsdb.mqe"),
- queryParser: NewQueryParser(),
- apiClient: NewApiClient(httpclient, dsInfo),
- tokenClient: NewTokenClient(dsInfo),
- }, nil
- }
- func init() {
- tsdb.RegisterExecutor("mqe-datasource", NewMQEExecutor)
- }
- type QueryToSend struct {
- RawQuery string
- QueryRef *Query
- }
- func (e *MQEExecutor) Execute(ctx context.Context, queries tsdb.QuerySlice, queryContext *tsdb.QueryContext) *tsdb.BatchResult {
- result := &tsdb.BatchResult{}
- availableSeries, err := e.tokenClient.GetTokenData(ctx)
- if err != nil {
- return result.WithError(err)
- }
- var mqeQueries []*Query
- for _, v := range queries {
- q, err := e.queryParser.Parse(v.Model, e.DataSource, queryContext)
- if err != nil {
- return result.WithError(err)
- }
- mqeQueries = append(mqeQueries, q)
- }
- var rawQueries []QueryToSend
- for _, v := range mqeQueries {
- queries, err := v.Build(availableSeries.Metrics)
- if err != nil {
- return result.WithError(err)
- }
- rawQueries = append(rawQueries, queries...)
- }
- e.log.Debug("Sending request", "url", e.DataSource.Url)
- queryResult, err := e.apiClient.PerformRequests(ctx, rawQueries)
- if err != nil {
- return result.WithError(err)
- }
- result.QueryResults = make(map[string]*tsdb.QueryResult)
- result.QueryResults["A"] = queryResult
- return result
- }
|