|
|
@@ -3,20 +3,28 @@ 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/tsdb"
|
|
|
)
|
|
|
|
|
|
type MQEExecutor struct {
|
|
|
*tsdb.DataSourceInfo
|
|
|
- QueryParser *MQEQueryParser
|
|
|
+ QueryParser *MQEQueryParser
|
|
|
+ ResponseParser *MQEResponseParser
|
|
|
}
|
|
|
|
|
|
func NewMQEExecutor(dsInfo *tsdb.DataSourceInfo) tsdb.Executor {
|
|
|
return &MQEExecutor{
|
|
|
DataSourceInfo: dsInfo,
|
|
|
QueryParser: &MQEQueryParser{},
|
|
|
+ ResponseParser: &MQEResponseParser{},
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -61,12 +69,54 @@ func (e *MQEExecutor) Execute(ctx context.Context, queries tsdb.QuerySlice, cont
|
|
|
rawQueries = append(rawQueries, queries...)
|
|
|
}
|
|
|
|
|
|
+ asdf := &tsdb.QueryResult{}
|
|
|
for _, v := range rawQueries {
|
|
|
glog.Info("Mqe executor", "query", v)
|
|
|
- //create request from v
|
|
|
- //send request
|
|
|
- //parse request
|
|
|
+
|
|
|
+ req, err := e.createRequest(v)
|
|
|
+
|
|
|
+ resp, err := ctxhttp.Do(ctx, HttpClient, req)
|
|
|
+ if err != nil {
|
|
|
+ return result.WithError(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ series, err := e.ResponseParser.Parse(resp)
|
|
|
+ if err != nil {
|
|
|
+ return result.WithError(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ asdf.Series = append(asdf.Series, series.Series...)
|
|
|
}
|
|
|
|
|
|
+ result.QueryResults["A"] = asdf
|
|
|
+
|
|
|
return result
|
|
|
}
|
|
|
+
|
|
|
+func (e *MQEExecutor) createRequest(query string) (*http.Request, error) {
|
|
|
+ u, _ := url.Parse(e.Url)
|
|
|
+ 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)
|
|
|
+ }
|
|
|
+
|
|
|
+ glog.Debug("Mqe request", "url", req.URL.String())
|
|
|
+ return req, nil
|
|
|
+}
|