influxdb/query/dependency.go

128 lines
3.6 KiB
Go

package query
import (
"context"
"github.com/influxdata/flux"
"github.com/influxdata/flux/codes"
platform "github.com/influxdata/influxdb"
)
// FromBucketService wraps an platform.BucketService in the BucketLookup interface.
func FromBucketService(srv platform.BucketService) *BucketLookup {
return &BucketLookup{
BucketService: srv,
}
}
// BucketLookup converts Flux bucket lookups into platform.BucketService calls.
type BucketLookup struct {
BucketService platform.BucketService
}
// Lookup returns the bucket id and its existence given an org id and bucket name.
func (b *BucketLookup) Lookup(ctx context.Context, orgID platform.ID, name string) (platform.ID, bool) {
oid := platform.ID(orgID)
filter := platform.BucketFilter{
OrganizationID: &oid,
Name: &name,
}
bucket, err := b.BucketService.FindBucket(ctx, filter)
if err != nil {
return platform.InvalidID(), false
}
return bucket.ID, true
}
// LookupName returns an bucket name given its organization ID and its bucket ID.
func (b *BucketLookup) LookupName(ctx context.Context, orgID platform.ID, id platform.ID) string {
oid := platform.ID(orgID)
id = platform.ID(id)
filter := platform.BucketFilter{
OrganizationID: &oid,
ID: &id,
}
bucket, err := b.BucketService.FindBucket(ctx, filter)
if err != nil || bucket == nil {
return ""
}
return bucket.Name
}
func (b *BucketLookup) FindAllBuckets(ctx context.Context, orgID platform.ID) ([]*platform.Bucket, int) {
oid := platform.ID(orgID)
filter := platform.BucketFilter{
OrganizationID: &oid,
}
buckets, count, err := b.BucketService.FindBuckets(ctx, filter)
if err != nil {
return nil, count
}
return buckets, count
}
// FromOrganizationService wraps a platform.OrganizationService in the OrganizationLookup interface.
func FromOrganizationService(srv platform.OrganizationService) *OrganizationLookup {
return &OrganizationLookup{OrganizationService: srv}
}
// OrganizationLookup converts organization name lookups into platform.OrganizationService calls.
type OrganizationLookup struct {
OrganizationService platform.OrganizationService
}
// Lookup returns the organization ID and its existence given an organization name.
func (o *OrganizationLookup) Lookup(ctx context.Context, name string) (platform.ID, bool) {
org, err := o.OrganizationService.FindOrganization(
ctx,
platform.OrganizationFilter{Name: &name},
)
if err != nil {
return platform.InvalidID(), false
}
return org.ID, true
}
// LookupName returns an organization name given its ID.
func (o *OrganizationLookup) LookupName(ctx context.Context, id platform.ID) string {
id = platform.ID(id)
org, err := o.OrganizationService.FindOrganization(
ctx,
platform.OrganizationFilter{
ID: &id,
},
)
if err != nil || org == nil {
return ""
}
return org.Name
}
// SecretLookup wraps the platform.SecretService to perform lookups based on the organization
// in the context.
type SecretLookup struct {
SecretService platform.SecretService
}
// FromSecretService wraps a platform.OrganizationService in the OrganizationLookup interface.
func FromSecretService(srv platform.SecretService) *SecretLookup {
return &SecretLookup{SecretService: srv}
}
// LoadSecret loads the secret associated with the key in the current organization context.
func (s *SecretLookup) LoadSecret(ctx context.Context, key string) (string, error) {
req := RequestFromContext(ctx)
if req == nil {
return "", &flux.Error{
Code: codes.Internal,
Msg: "missing request on context",
}
}
orgID := req.OrganizationID
return s.SecretService.LoadSecret(ctx, orgID, key)
}