mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
InfluxDB: backend migration (run query in explore) (#43352)
* InfluxDB backend migration * Multiple queries and more * Added types * Updated preferredVisualisationType * Updated model parser test to include limit,slimit,orderByTime * Added test for building query with limit, slimit * Added test for building query with limit, slimit, orderByTime and puts them in the correct order * Add test: Influxdb response parser should parse two responses with different refIDs * Moved methods to responds parser * Add test to ensure ExecutedQueryString is populated * Move functions out of response parser class * Test for getSelectedParams * Merge cases * Change to const * Test get table columns correctly * Removed unecessary fields * Test get table rows correctly * Removed getSeries function * Added test for preferredVisualisationType * Added test for executedQueryString * Modified response parser * Removed test * Improvements * Tests * Review changes * Feature flag rename and code gen
This commit is contained in:
@@ -94,24 +94,31 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest)
|
||||
|
||||
s.glog.Debug("Making a non-Flux type query")
|
||||
|
||||
// NOTE: the following path is currently only called from alerting queries
|
||||
// In dashboards, the request runs through proxy and are managed in the frontend
|
||||
var allRawQueries string
|
||||
var queries []Query
|
||||
|
||||
query, err := s.getQuery(dsInfo, req)
|
||||
if err != nil {
|
||||
return &backend.QueryDataResponse{}, err
|
||||
}
|
||||
for _, reqQuery := range req.Queries {
|
||||
query, err := s.queryParser.Parse(reqQuery)
|
||||
if err != nil {
|
||||
return &backend.QueryDataResponse{}, err
|
||||
}
|
||||
|
||||
rawQuery, err := query.Build(req)
|
||||
if err != nil {
|
||||
return &backend.QueryDataResponse{}, err
|
||||
rawQuery, err := query.Build(req)
|
||||
if err != nil {
|
||||
return &backend.QueryDataResponse{}, err
|
||||
}
|
||||
|
||||
allRawQueries = allRawQueries + rawQuery + ";"
|
||||
query.RefID = reqQuery.RefID
|
||||
query.RawQuery = rawQuery
|
||||
queries = append(queries, *query)
|
||||
}
|
||||
|
||||
if setting.Env == setting.Dev {
|
||||
s.glog.Debug("Influxdb query", "raw query", rawQuery)
|
||||
s.glog.Debug("Influxdb query", "raw query", allRawQueries)
|
||||
}
|
||||
|
||||
request, err := s.createRequest(ctx, dsInfo, rawQuery)
|
||||
request, err := s.createRequest(ctx, dsInfo, allRawQueries)
|
||||
if err != nil {
|
||||
return &backend.QueryDataResponse{}, err
|
||||
}
|
||||
@@ -129,25 +136,11 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest)
|
||||
return &backend.QueryDataResponse{}, fmt.Errorf("InfluxDB returned error status: %s", res.Status)
|
||||
}
|
||||
|
||||
resp := s.responseParser.Parse(res.Body, query)
|
||||
resp := s.responseParser.Parse(res.Body, queries)
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func (s *Service) getQuery(dsInfo *models.DatasourceInfo, query *backend.QueryDataRequest) (*Query, error) {
|
||||
queryCount := len(query.Queries)
|
||||
|
||||
// The model supports multiple queries, but right now this is only used from
|
||||
// alerting so we only needed to support batch executing 1 query at a time.
|
||||
if queryCount != 1 {
|
||||
return nil, fmt.Errorf("query request should contain exactly 1 query, it contains: %d", queryCount)
|
||||
}
|
||||
|
||||
q := query.Queries[0]
|
||||
|
||||
return s.queryParser.Parse(q)
|
||||
}
|
||||
|
||||
func (s *Service) createRequest(ctx context.Context, dsInfo *models.DatasourceInfo, query string) (*http.Request, error) {
|
||||
u, err := url.Parse(dsInfo.URL)
|
||||
if err != nil {
|
||||
|
Reference in New Issue
Block a user