style(mqe): instance dependencies in ctor func

This commit is contained in:
bergquist 2016-12-13 12:47:57 +01:00
parent 549c3ab78b
commit 69d6316512
4 changed files with 34 additions and 29 deletions

View File

@ -6,6 +6,10 @@ import (
"github.com/grafana/grafana/pkg/tsdb" "github.com/grafana/grafana/pkg/tsdb"
) )
func NewQueryParser() *MQEQueryParser {
return &MQEQueryParser{}
}
type MQEQueryParser struct{} type MQEQueryParser struct{}
func (qp *MQEQueryParser) Parse(model *simplejson.Json, dsInfo *models.DataSource, queryContext *tsdb.QueryContext) (*MQEQuery, error) { func (qp *MQEQueryParser) Parse(model *simplejson.Json, dsInfo *models.DataSource, queryContext *tsdb.QueryContext) (*MQEQuery, error) {

View File

@ -23,9 +23,11 @@ import (
type MQEExecutor struct { type MQEExecutor struct {
*models.DataSource *models.DataSource
QueryParser *MQEQueryParser queryParser *MQEQueryParser
ResponseParser *MQEResponseParser responseParser *MQEResponseParser
HttpClient *http.Client httpClient *http.Client
log log.Logger
tokenClient *TokenClient
} }
func NewMQEExecutor(dsInfo *models.DataSource) (tsdb.Executor, error) { func NewMQEExecutor(dsInfo *models.DataSource) (tsdb.Executor, error) {
@ -36,18 +38,15 @@ func NewMQEExecutor(dsInfo *models.DataSource) (tsdb.Executor, error) {
return &MQEExecutor{ return &MQEExecutor{
DataSource: dsInfo, DataSource: dsInfo,
QueryParser: &MQEQueryParser{}, httpClient: httpclient,
ResponseParser: &MQEResponseParser{}, log: log.New("tsdb.mqe"),
HttpClient: httpclient, queryParser: NewQueryParser(),
responseParser: NewResponseParser(),
tokenClient: NewTokenClient(dsInfo),
}, nil }, nil
} }
var (
glog log.Logger
)
func init() { func init() {
glog = log.New("tsdb.mqe")
tsdb.RegisterExecutor("mqe-datasource", NewMQEExecutor) tsdb.RegisterExecutor("mqe-datasource", NewMQEExecutor)
} }
@ -59,14 +58,14 @@ type QueryToSend struct {
func (e *MQEExecutor) Execute(ctx context.Context, queries tsdb.QuerySlice, queryContext *tsdb.QueryContext) *tsdb.BatchResult { func (e *MQEExecutor) Execute(ctx context.Context, queries tsdb.QuerySlice, queryContext *tsdb.QueryContext) *tsdb.BatchResult {
result := &tsdb.BatchResult{} result := &tsdb.BatchResult{}
availableSeries, err := NewTokenClient(e.HttpClient).GetTokenData(ctx, e.DataSource) availableSeries, err := e.tokenClient.GetTokenData(ctx)
if err != nil { if err != nil {
return result.WithError(err) return result.WithError(err)
} }
var mqeQueries []*MQEQuery var mqeQueries []*MQEQuery
for _, v := range queries { for _, v := range queries {
q, err := e.QueryParser.Parse(v.Model, e.DataSource, queryContext) q, err := e.queryParser.Parse(v.Model, e.DataSource, queryContext)
if err != nil { if err != nil {
return result.WithError(err) return result.WithError(err)
} }
@ -85,16 +84,16 @@ func (e *MQEExecutor) Execute(ctx context.Context, queries tsdb.QuerySlice, quer
queryResult := &tsdb.QueryResult{} queryResult := &tsdb.QueryResult{}
for _, v := range rawQueries { for _, v := range rawQueries {
glog.Info("Mqe executor", "query", v) e.log.Info("Mqe executor", "query", v)
req, err := e.createRequest(v.RawQuery) req, err := e.createRequest(v.RawQuery)
resp, err := ctxhttp.Do(ctx, e.HttpClient, req) resp, err := ctxhttp.Do(ctx, e.httpClient, req)
if err != nil { if err != nil {
return result.WithError(err) return result.WithError(err)
} }
series, err := e.ResponseParser.Parse(resp, v.QueryRef) series, err := e.responseParser.Parse(resp, v.QueryRef)
if err != nil { if err != nil {
return result.WithError(err) return result.WithError(err)
} }
@ -132,6 +131,6 @@ func (e *MQEExecutor) createRequest(query string) (*http.Request, error) {
req.SetBasicAuth(e.BasicAuthUser, e.BasicAuthPassword) req.SetBasicAuth(e.BasicAuthUser, e.BasicAuthPassword)
} }
glog.Debug("Mqe request", "url", req.URL.String()) e.log.Debug("Mqe request", "url", req.URL.String())
return req, nil return req, nil
} }

View File

@ -17,12 +17,16 @@ import (
type TokenClient struct { type TokenClient struct {
tlog log.Logger tlog log.Logger
Datasource *models.DataSource
HttpClient *http.Client HttpClient *http.Client
} }
func NewTokenClient(httpClient *http.Client) *TokenClient { func NewTokenClient(datasource *models.DataSource) *TokenClient {
httpClient, _ := datasource.GetHttpClient()
return &TokenClient{ return &TokenClient{
tlog: log.New("tsdb.mqe.tokenclient"), tlog: log.New("tsdb.mqe.tokenclient"),
Datasource: datasource,
HttpClient: httpClient, HttpClient: httpClient,
} }
} }
@ -30,22 +34,22 @@ func NewTokenClient(httpClient *http.Client) *TokenClient {
var cache map[int64]*TokenBody = map[int64]*TokenBody{} var cache map[int64]*TokenBody = map[int64]*TokenBody{}
//Replace this stupid cache with internal cache from grafana master before merging //Replace this stupid cache with internal cache from grafana master before merging
func (client *TokenClient) GetTokenData(ctx context.Context, datasource *models.DataSource) (*TokenBody, error) { func (client *TokenClient) GetTokenData(ctx context.Context) (*TokenBody, error) {
_, excist := cache[datasource.Id] _, excist := cache[client.Datasource.Id]
if !excist { if !excist {
b, err := client.RequestTokenData(ctx, datasource) b, err := client.RequestTokenData(ctx)
if err != nil { if err != nil {
return nil, err return nil, err
} }
cache[datasource.Id] = b cache[client.Datasource.Id] = b
} }
return cache[datasource.Id], nil return cache[client.Datasource.Id], nil
} }
func (client *TokenClient) RequestTokenData(ctx context.Context, datasource *models.DataSource) (*TokenBody, error) { func (client *TokenClient) RequestTokenData(ctx context.Context) (*TokenBody, error) {
u, _ := url.Parse(datasource.Url) u, _ := url.Parse(client.Datasource.Url)
u.Path = path.Join(u.Path, "token") u.Path = path.Join(u.Path, "token")
req, err := http.NewRequest(http.MethodGet, u.String(), nil) req, err := http.NewRequest(http.MethodGet, u.String(), nil)

View File

@ -4,8 +4,6 @@ import (
"context" "context"
"testing" "testing"
"net/http"
"github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/components/simplejson"
"github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/models"
. "github.com/smartystreets/goconvey/convey" . "github.com/smartystreets/goconvey/convey"
@ -18,9 +16,9 @@ func TestTokenClient(t *testing.T) {
Url: "", Url: "",
} }
client := NewTokenClient(http.DefaultClient) client := NewTokenClient(dsInfo)
body, err := client.RequestTokenData(context.TODO(), dsInfo) body, err := client.RequestTokenData(context.TODO())
So(err, ShouldBeNil) So(err, ShouldBeNil)
//So(len(body.Functions), ShouldBeGreaterThan, 1) //So(len(body.Functions), ShouldBeGreaterThan, 1)