query service: handle request-interceptor better
This commit is contained in:
@@ -19,6 +19,7 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/expr"
|
"github.com/grafana/grafana/pkg/expr"
|
||||||
"github.com/grafana/grafana/pkg/services/datasources"
|
"github.com/grafana/grafana/pkg/services/datasources"
|
||||||
"github.com/grafana/grafana/pkg/services/dsquerierclient"
|
"github.com/grafana/grafana/pkg/services/dsquerierclient"
|
||||||
|
"github.com/grafana/grafana/pkg/services/validations"
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
@@ -340,8 +341,8 @@ func prepareQuery(
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func handlePreparedQuery(ctx context.Context, pq *preparedQuery, concurrentQueryLimit int) (*backend.QueryDataResponse, error) {
|
func handlePreparedQuery(ctx context.Context, pq *preparedQuery, concurrentQueryLimit int, validator validations.DataSourceRequestValidator) (*backend.QueryDataResponse, error) {
|
||||||
resp, err := service.QueryData(ctx, pq.logger, pq.cache, pq.exprSvc, pq.mReq, pq.builder, pq.headers, concurrentQueryLimit)
|
resp, err := service.QueryData(ctx, pq.logger, pq.cache, pq.exprSvc, pq.mReq, pq.builder, pq.headers, concurrentQueryLimit, validator)
|
||||||
pq.reportMetrics()
|
pq.reportMetrics()
|
||||||
return resp, err
|
return resp, err
|
||||||
}
|
}
|
||||||
@@ -359,7 +360,7 @@ func handleQuery(
|
|||||||
responder.Error(err)
|
responder.Error(err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return handlePreparedQuery(ctx, pq, b.concurrentQueryLimit)
|
return handlePreparedQuery(ctx, pq, b.concurrentQueryLimit, b.dataSourceRequestValidator)
|
||||||
}
|
}
|
||||||
|
|
||||||
type responderWrapper struct {
|
type responderWrapper struct {
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext"
|
"github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext"
|
||||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore"
|
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore"
|
||||||
|
"github.com/grafana/grafana/pkg/services/validations"
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -44,14 +45,15 @@ type QueryAPIBuilder struct {
|
|||||||
|
|
||||||
authorizer authorizer.Authorizer
|
authorizer authorizer.Authorizer
|
||||||
|
|
||||||
tracer tracing.Tracer
|
tracer tracing.Tracer
|
||||||
metrics *metrics.ExprMetrics
|
metrics *metrics.ExprMetrics
|
||||||
instanceProvider clientapi.InstanceProvider
|
instanceProvider clientapi.InstanceProvider
|
||||||
registry query.DataSourceApiServerRegistry
|
registry query.DataSourceApiServerRegistry
|
||||||
converter *expr.ResultConverter
|
converter *expr.ResultConverter
|
||||||
queryTypes *query.QueryTypeDefinitionList
|
queryTypes *query.QueryTypeDefinitionList
|
||||||
legacyDatasourceLookup service.LegacyDataSourceLookup
|
legacyDatasourceLookup service.LegacyDataSourceLookup
|
||||||
connections DataSourceConnectionProvider
|
connections DataSourceConnectionProvider
|
||||||
|
dataSourceRequestValidator validations.DataSourceRequestValidator
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewQueryAPIBuilder(
|
func NewQueryAPIBuilder(
|
||||||
@@ -64,6 +66,7 @@ func NewQueryAPIBuilder(
|
|||||||
legacyDatasourceLookup service.LegacyDataSourceLookup,
|
legacyDatasourceLookup service.LegacyDataSourceLookup,
|
||||||
connections DataSourceConnectionProvider,
|
connections DataSourceConnectionProvider,
|
||||||
concurrentQueryLimit int,
|
concurrentQueryLimit int,
|
||||||
|
dataSourceRequestValidator validations.DataSourceRequestValidator,
|
||||||
) (*QueryAPIBuilder, error) {
|
) (*QueryAPIBuilder, error) {
|
||||||
// Include well typed query definitions
|
// Include well typed query definitions
|
||||||
var queryTypes *query.QueryTypeDefinitionList
|
var queryTypes *query.QueryTypeDefinitionList
|
||||||
@@ -96,7 +99,8 @@ func NewQueryAPIBuilder(
|
|||||||
Features: features,
|
Features: features,
|
||||||
Tracer: tracer,
|
Tracer: tracer,
|
||||||
},
|
},
|
||||||
legacyDatasourceLookup: legacyDatasourceLookup,
|
legacyDatasourceLookup: legacyDatasourceLookup,
|
||||||
|
dataSourceRequestValidator: dataSourceRequestValidator,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,6 +117,7 @@ func RegisterAPIService(
|
|||||||
tracer tracing.Tracer,
|
tracer tracing.Tracer,
|
||||||
legacyDatasourceLookup service.LegacyDataSourceLookup,
|
legacyDatasourceLookup service.LegacyDataSourceLookup,
|
||||||
exprService *expr.Service,
|
exprService *expr.Service,
|
||||||
|
dataSourceRequestValidator validations.DataSourceRequestValidator,
|
||||||
) (*QueryAPIBuilder, error) {
|
) (*QueryAPIBuilder, error) {
|
||||||
if !featuremgmt.AnyEnabled(features,
|
if !featuremgmt.AnyEnabled(features,
|
||||||
featuremgmt.FlagQueryService,
|
featuremgmt.FlagQueryService,
|
||||||
@@ -145,6 +150,7 @@ func RegisterAPIService(
|
|||||||
legacyDatasourceLookup,
|
legacyDatasourceLookup,
|
||||||
&connectionsProvider{dsService: dataSourcesService, registry: reg},
|
&connectionsProvider{dsService: dataSourcesService, registry: reg},
|
||||||
cfg.SectionWithEnvOverrides("query").Key("concurrent_query_limit").MustInt(runtime.NumCPU()),
|
cfg.SectionWithEnvOverrides("query").Key("concurrent_query_limit").MustInt(runtime.NumCPU()),
|
||||||
|
dataSourceRequestValidator,
|
||||||
)
|
)
|
||||||
apiregistration.RegisterAPI(builder)
|
apiregistration.RegisterAPI(builder)
|
||||||
return builder, err
|
return builder, err
|
||||||
|
|||||||
Generated
+2
-2
@@ -888,7 +888,7 @@ func Initialize(ctx context.Context, cfg *setting.Cfg, opts Options, apiOpts api
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
legacyDataSourceLookup := service9.ProvideLegacyDataSourceLookup(service15)
|
legacyDataSourceLookup := service9.ProvideLegacyDataSourceLookup(service15)
|
||||||
queryAPIBuilder, err := query2.RegisterAPIService(cfg, featureToggles, apiserverService, service15, pluginstoreService, accessControl, middlewareHandler, plugincontextProvider, registerer, tracingService, legacyDataSourceLookup, exprService)
|
queryAPIBuilder, err := query2.RegisterAPIService(cfg, featureToggles, apiserverService, service15, pluginstoreService, accessControl, middlewareHandler, plugincontextProvider, registerer, tracingService, legacyDataSourceLookup, exprService, ossDataSourceRequestValidator)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1556,7 +1556,7 @@ func InitializeForTest(ctx context.Context, t sqlutil.ITestDB, testingT interfac
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
legacyDataSourceLookup := service9.ProvideLegacyDataSourceLookup(service15)
|
legacyDataSourceLookup := service9.ProvideLegacyDataSourceLookup(service15)
|
||||||
queryAPIBuilder, err := query2.RegisterAPIService(cfg, featureToggles, apiserverService, service15, pluginstoreService, accessControl, middlewareHandler, plugincontextProvider, registerer, tracingService, legacyDataSourceLookup, exprService)
|
queryAPIBuilder, err := query2.RegisterAPIService(cfg, featureToggles, apiserverService, service15, pluginstoreService, accessControl, middlewareHandler, plugincontextProvider, registerer, tracingService, legacyDataSourceLookup, exprService, ossDataSourceRequestValidator)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -226,12 +226,12 @@ func buildErrorResponses(err error, queries []*simplejson.Json) splitResponse {
|
|||||||
return splitResponse{er, http.Header{}}
|
return splitResponse{er, http.Header{}}
|
||||||
}
|
}
|
||||||
|
|
||||||
func QueryData(ctx context.Context, log log.Logger, dscache datasources.CacheService, exprService *expr.Service, reqDTO dtos.MetricRequest, qsDatasourceClientBuilder dsquerierclient.QSDatasourceClientBuilder, headers map[string]string, concurrentQueryLimit int) (*backend.QueryDataResponse, error) {
|
func QueryData(ctx context.Context, log log.Logger, dscache datasources.CacheService, exprService *expr.Service, reqDTO dtos.MetricRequest, qsDatasourceClientBuilder dsquerierclient.QSDatasourceClientBuilder, headers map[string]string, concurrentQueryLimit int, validator validations.DataSourceRequestValidator) (*backend.QueryDataResponse, error) {
|
||||||
s := &ServiceImpl{
|
s := &ServiceImpl{
|
||||||
log: log,
|
log: log,
|
||||||
dataSourceCache: dscache,
|
dataSourceCache: dscache,
|
||||||
expressionService: exprService,
|
expressionService: exprService,
|
||||||
dataSourceRequestValidator: validations.ProvideValidator(),
|
dataSourceRequestValidator: validator,
|
||||||
qsDatasourceClientBuilder: qsDatasourceClientBuilder,
|
qsDatasourceClientBuilder: qsDatasourceClientBuilder,
|
||||||
headers: headers,
|
headers: headers,
|
||||||
concurrentQueryLimit: concurrentQueryLimit,
|
concurrentQueryLimit: concurrentQueryLimit,
|
||||||
|
|||||||
Reference in New Issue
Block a user