75 lines
2.2 KiB
Go
75 lines
2.2 KiB
Go
package readservice
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/influxdata/platform/query/functions/outputs"
|
|
|
|
"github.com/influxdata/flux"
|
|
"github.com/influxdata/flux/control"
|
|
"github.com/influxdata/flux/execute"
|
|
"github.com/influxdata/platform"
|
|
"github.com/influxdata/platform/query"
|
|
"github.com/influxdata/platform/query/functions/inputs"
|
|
fstorage "github.com/influxdata/platform/query/functions/inputs/storage"
|
|
"github.com/influxdata/platform/storage"
|
|
"github.com/influxdata/platform/storage/reads"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func NewProxyQueryService(engine *storage.Engine, bucketSvc platform.BucketService, orgSvc platform.OrganizationService, logger *zap.Logger) (query.ProxyQueryService, error) {
|
|
var (
|
|
concurrencyQuota = 10
|
|
memoryBytesQuota = 1e6
|
|
)
|
|
|
|
cc := control.Config{
|
|
ExecutorDependencies: make(execute.Dependencies),
|
|
ConcurrencyQuota: concurrencyQuota,
|
|
MemoryBytesQuota: int64(memoryBytesQuota),
|
|
Logger: logger,
|
|
Verbose: false,
|
|
}
|
|
|
|
bucketLookupSvc := query.FromBucketService(bucketSvc)
|
|
orgLookupSvc := query.FromOrganizationService(orgSvc)
|
|
err := inputs.InjectFromDependencies(cc.ExecutorDependencies, fstorage.Dependencies{
|
|
Reader: reads.NewReader(newStore(engine)),
|
|
BucketLookup: bucketLookupSvc,
|
|
OrganizationLookup: orgLookupSvc,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := inputs.InjectBucketDependencies(cc.ExecutorDependencies, bucketLookupSvc); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := outputs.InjectToDependencies(cc.ExecutorDependencies, outputs.ToDependencies{
|
|
BucketLookup: bucketLookupSvc,
|
|
OrganizationLookup: orgLookupSvc,
|
|
PointsWriter: engine,
|
|
}); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return query.ProxyQueryServiceBridge{
|
|
QueryService: query.QueryServiceBridge{
|
|
AsyncQueryService: &queryAdapter{
|
|
Controller: control.New(cc),
|
|
},
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
type queryAdapter struct {
|
|
Controller *control.Controller
|
|
}
|
|
|
|
func (q *queryAdapter) Query(ctx context.Context, req *query.Request) (flux.Query, error) {
|
|
ctx = query.ContextWithRequest(ctx, req)
|
|
ctx = context.WithValue(ctx, "org", req.OrganizationID.String())
|
|
return q.Controller.Query(ctx, req.Compiler)
|
|
}
|