|
|
@@ -3,16 +3,9 @@ package mqe
|
|
|
import (
|
|
|
"context"
|
|
|
"net/http"
|
|
|
- "net/url"
|
|
|
- "path"
|
|
|
- "strings"
|
|
|
|
|
|
- "golang.org/x/net/context/ctxhttp"
|
|
|
-
|
|
|
- "github.com/grafana/grafana/pkg/components/simplejson"
|
|
|
"github.com/grafana/grafana/pkg/log"
|
|
|
"github.com/grafana/grafana/pkg/models"
|
|
|
- "github.com/grafana/grafana/pkg/setting"
|
|
|
"github.com/grafana/grafana/pkg/tsdb"
|
|
|
)
|
|
|
|
|
|
@@ -24,11 +17,11 @@ import (
|
|
|
|
|
|
type MQEExecutor struct {
|
|
|
*models.DataSource
|
|
|
- queryParser *QueryParser
|
|
|
- responseParser *ResponseParser
|
|
|
- httpClient *http.Client
|
|
|
- log log.Logger
|
|
|
- tokenClient *TokenClient
|
|
|
+ queryParser *QueryParser
|
|
|
+ apiClient *apiClient
|
|
|
+ httpClient *http.Client
|
|
|
+ log log.Logger
|
|
|
+ tokenClient *TokenClient
|
|
|
}
|
|
|
|
|
|
func NewMQEExecutor(dsInfo *models.DataSource) (tsdb.Executor, error) {
|
|
|
@@ -38,12 +31,12 @@ func NewMQEExecutor(dsInfo *models.DataSource) (tsdb.Executor, error) {
|
|
|
}
|
|
|
|
|
|
return &MQEExecutor{
|
|
|
- DataSource: dsInfo,
|
|
|
- httpClient: httpclient,
|
|
|
- log: log.New("tsdb.mqe"),
|
|
|
- queryParser: NewQueryParser(),
|
|
|
- responseParser: NewResponseParser(),
|
|
|
- tokenClient: NewTokenClient(dsInfo),
|
|
|
+ DataSource: dsInfo,
|
|
|
+ httpClient: httpclient,
|
|
|
+ log: log.New("tsdb.mqe"),
|
|
|
+ queryParser: NewQueryParser(),
|
|
|
+ apiClient: NewApiClient(httpclient, dsInfo),
|
|
|
+ tokenClient: NewTokenClient(dsInfo),
|
|
|
}, nil
|
|
|
}
|
|
|
|
|
|
@@ -85,25 +78,9 @@ func (e *MQEExecutor) Execute(ctx context.Context, queries tsdb.QuerySlice, quer
|
|
|
|
|
|
e.log.Debug("Sending request", "url", e.DataSource.Url)
|
|
|
|
|
|
- queryResult := &tsdb.QueryResult{}
|
|
|
- for _, v := range rawQueries {
|
|
|
- if setting.Env == setting.DEV {
|
|
|
- e.log.Debug("Executing", "query", v)
|
|
|
- }
|
|
|
-
|
|
|
- req, err := e.createRequest(v.RawQuery)
|
|
|
-
|
|
|
- resp, err := ctxhttp.Do(ctx, e.httpClient, req)
|
|
|
- if err != nil {
|
|
|
- return result.WithError(err)
|
|
|
- }
|
|
|
-
|
|
|
- series, err := e.responseParser.Parse(resp, v.QueryRef)
|
|
|
- if err != nil {
|
|
|
- return result.WithError(err)
|
|
|
- }
|
|
|
-
|
|
|
- queryResult.Series = append(queryResult.Series, series.Series...)
|
|
|
+ queryResult, err := e.apiClient.PerformRequests(ctx, rawQueries)
|
|
|
+ if err != nil {
|
|
|
+ return result.WithError(err)
|
|
|
}
|
|
|
|
|
|
result.QueryResults = make(map[string]*tsdb.QueryResult)
|
|
|
@@ -111,34 +88,3 @@ func (e *MQEExecutor) Execute(ctx context.Context, queries tsdb.QuerySlice, quer
|
|
|
|
|
|
return result
|
|
|
}
|
|
|
-
|
|
|
-func (e *MQEExecutor) createRequest(query string) (*http.Request, error) {
|
|
|
- u, err := url.Parse(e.Url)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- u.Path = path.Join(u.Path, "query")
|
|
|
-
|
|
|
- payload := simplejson.New()
|
|
|
- payload.Set("query", query)
|
|
|
-
|
|
|
- jsonPayload, err := payload.MarshalJSON()
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- req, err := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(string(jsonPayload)))
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- req.Header.Set("User-Agent", "Grafana")
|
|
|
- req.Header.Set("Content-Type", "application/json")
|
|
|
-
|
|
|
- if e.BasicAuth {
|
|
|
- req.SetBasicAuth(e.BasicAuthUser, e.BasicAuthPassword)
|
|
|
- }
|
|
|
-
|
|
|
- return req, nil
|
|
|
-}
|