influxdb/storage/readservice/service.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)
}