133 lines
3.7 KiB
Go
133 lines
3.7 KiB
Go
package query
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/influxdata/flux"
|
|
"github.com/influxdata/flux/codes"
|
|
"github.com/influxdata/influxdb/v2"
|
|
"github.com/influxdata/influxdb/v2/kit/platform"
|
|
)
|
|
|
|
// FromBucketService wraps an influxdb.BucketService in the BucketLookup interface.
|
|
func FromBucketService(srv influxdb.BucketService) *BucketLookup {
|
|
return &BucketLookup{
|
|
BucketService: srv,
|
|
}
|
|
}
|
|
|
|
// BucketLookup converts Flux bucket lookups into influxdb.BucketService calls.
|
|
type BucketLookup struct {
|
|
BucketService influxdb.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) {
|
|
filter := influxdb.BucketFilter{
|
|
OrganizationID: &orgID,
|
|
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 {
|
|
filter := influxdb.BucketFilter{
|
|
OrganizationID: &orgID,
|
|
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) ([]*influxdb.Bucket, int) {
|
|
filter := influxdb.BucketFilter{
|
|
OrganizationID: &orgID,
|
|
}
|
|
|
|
var allBuckets []*influxdb.Bucket
|
|
opt := influxdb.FindOptions{Limit: 20}
|
|
for ; ; opt.Offset += opt.Limit {
|
|
buckets, _, err := b.BucketService.FindBuckets(ctx, filter, opt)
|
|
if err != nil {
|
|
return nil, len(buckets)
|
|
}
|
|
allBuckets = append(allBuckets, buckets...)
|
|
if len(buckets) < opt.Limit {
|
|
break
|
|
}
|
|
}
|
|
return allBuckets, len(allBuckets)
|
|
}
|
|
|
|
// FromOrganizationService wraps a influxdb.OrganizationService in the OrganizationLookup interface.
|
|
func FromOrganizationService(srv influxdb.OrganizationService) *OrganizationLookup {
|
|
return &OrganizationLookup{OrganizationService: srv}
|
|
}
|
|
|
|
// OrganizationLookup converts organization name lookups into influxdb.OrganizationService calls.
|
|
type OrganizationLookup struct {
|
|
OrganizationService influxdb.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,
|
|
influxdb.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,
|
|
influxdb.OrganizationFilter{
|
|
ID: &id,
|
|
},
|
|
)
|
|
|
|
if err != nil || org == nil {
|
|
return ""
|
|
}
|
|
return org.Name
|
|
}
|
|
|
|
// SecretLookup wraps the influxdb.SecretService to perform lookups based on the organization
|
|
// in the context.
|
|
type SecretLookup struct {
|
|
SecretService influxdb.SecretService
|
|
}
|
|
|
|
// FromSecretService wraps a influxdb.OrganizationService in the OrganizationLookup interface.
|
|
func FromSecretService(srv influxdb.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)
|
|
}
|