123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- // Copyright 2020-2021 InfluxData, Inc. All rights reserved.
- // Use of this source code is governed by MIT
- // license that can be found in the LICENSE file.
- package api
- import (
- "context"
- "fmt"
- "github.com/influxdata/influxdb-client-go/v2/domain"
- )
- // BucketsAPI provides methods for managing Buckets in a InfluxDB server.
- type BucketsAPI interface {
- // GetBuckets returns all buckets.
- // GetBuckets supports PagingOptions: Offset, Limit, After. Empty pagingOptions means the default paging (first 20 results).
- GetBuckets(ctx context.Context, pagingOptions ...PagingOption) (*[]domain.Bucket, error)
- // FindBucketByName returns a bucket found using bucketName.
- FindBucketByName(ctx context.Context, bucketName string) (*domain.Bucket, error)
- // FindBucketByID returns a bucket found using bucketID.
- FindBucketByID(ctx context.Context, bucketID string) (*domain.Bucket, error)
- // FindBucketsByOrgID returns buckets belonging to the organization with ID orgID.
- // FindBucketsByOrgID supports PagingOptions: Offset, Limit, After. Empty pagingOptions means the default paging (first 20 results).
- FindBucketsByOrgID(ctx context.Context, orgID string, pagingOptions ...PagingOption) (*[]domain.Bucket, error)
- // FindBucketsByOrgName returns buckets belonging to the organization with name orgName, with the specified paging. Empty pagingOptions means the default paging (first 20 results).
- FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...PagingOption) (*[]domain.Bucket, error)
- // CreateBucket creates a new bucket.
- CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error)
- // CreateBucketWithName creates a new bucket with bucketName in organization org, with retention specified in rules. Empty rules means infinite retention.
- CreateBucketWithName(ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error)
- // CreateBucketWithNameWithID creates a new bucket with bucketName in organization with orgID, with retention specified in rules. Empty rules means infinite retention.
- CreateBucketWithNameWithID(ctx context.Context, orgID, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error)
- // UpdateBucket updates a bucket.
- UpdateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error)
- // DeleteBucket deletes a bucket.
- DeleteBucket(ctx context.Context, bucket *domain.Bucket) error
- // DeleteBucketWithID deletes a bucket with bucketID.
- DeleteBucketWithID(ctx context.Context, bucketID string) error
- // GetMembers returns members of a bucket.
- GetMembers(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceMember, error)
- // GetMembersWithID returns members of a bucket with bucketID.
- GetMembersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceMember, error)
- // AddMember adds a member to a bucket.
- AddMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceMember, error)
- // AddMemberWithID adds a member with id memberID to a bucket with bucketID.
- AddMemberWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceMember, error)
- // RemoveMember removes a member from a bucket.
- RemoveMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) error
- // RemoveMemberWithID removes a member with id memberID from a bucket with bucketID.
- RemoveMemberWithID(ctx context.Context, bucketID, memberID string) error
- // GetOwners returns owners of a bucket.
- GetOwners(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceOwner, error)
- // GetOwnersWithID returns owners of a bucket with bucketID.
- GetOwnersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceOwner, error)
- // AddOwner adds an owner to a bucket.
- AddOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceOwner, error)
- // AddOwnerWithID adds an owner with id memberID to a bucket with bucketID.
- AddOwnerWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceOwner, error)
- // RemoveOwner removes an owner from a bucket.
- RemoveOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) error
- // RemoveOwnerWithID removes a member with id memberID from a bucket with bucketID.
- RemoveOwnerWithID(ctx context.Context, bucketID, memberID string) error
- }
- // bucketsAPI implements BucketsAPI
- type bucketsAPI struct {
- apiClient *domain.Client
- }
- // NewBucketsAPI creates new instance of BucketsAPI
- func NewBucketsAPI(apiClient *domain.Client) BucketsAPI {
- return &bucketsAPI{
- apiClient: apiClient,
- }
- }
- func (b *bucketsAPI) GetBuckets(ctx context.Context, pagingOptions ...PagingOption) (*[]domain.Bucket, error) {
- return b.getBuckets(ctx, nil, pagingOptions...)
- }
- func (b *bucketsAPI) getBuckets(ctx context.Context, params *domain.GetBucketsParams, pagingOptions ...PagingOption) (*[]domain.Bucket, error) {
- if params == nil {
- params = &domain.GetBucketsParams{}
- }
- options := defaultPaging()
- for _, opt := range pagingOptions {
- opt(options)
- }
- if options.limit > 0 {
- params.Limit = &options.limit
- }
- params.Offset = &options.offset
- response, err := b.apiClient.GetBuckets(ctx, params)
- if err != nil {
- return nil, err
- }
- return response.Buckets, nil
- }
- func (b *bucketsAPI) FindBucketByName(ctx context.Context, bucketName string) (*domain.Bucket, error) {
- params := &domain.GetBucketsParams{Name: &bucketName}
- response, err := b.apiClient.GetBuckets(ctx, params)
- if err != nil {
- return nil, err
- }
- if response.Buckets != nil && len(*response.Buckets) > 0 {
- return &(*response.Buckets)[0], nil
- }
- return nil, fmt.Errorf("bucket '%s' not found", bucketName)
- }
- func (b *bucketsAPI) FindBucketByID(ctx context.Context, bucketID string) (*domain.Bucket, error) {
- params := &domain.GetBucketsIDAllParams{
- BucketID: bucketID,
- }
- return b.apiClient.GetBucketsID(ctx, params)
- }
- func (b *bucketsAPI) FindBucketsByOrgID(ctx context.Context, orgID string, pagingOptions ...PagingOption) (*[]domain.Bucket, error) {
- params := &domain.GetBucketsParams{OrgID: &orgID}
- return b.getBuckets(ctx, params, pagingOptions...)
- }
- func (b *bucketsAPI) FindBucketsByOrgName(ctx context.Context, orgName string, pagingOptions ...PagingOption) (*[]domain.Bucket, error) {
- params := &domain.GetBucketsParams{Org: &orgName}
- return b.getBuckets(ctx, params, pagingOptions...)
- }
- func (b *bucketsAPI) createBucket(ctx context.Context, bucketReq *domain.PostBucketRequest) (*domain.Bucket, error) {
- params := &domain.PostBucketsAllParams{
- Body: domain.PostBucketsJSONRequestBody(*bucketReq),
- }
- return b.apiClient.PostBuckets(ctx, params)
- }
- func (b *bucketsAPI) CreateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) {
- bucketReq := &domain.PostBucketRequest{
- Description: bucket.Description,
- Name: bucket.Name,
- OrgID: *bucket.OrgID,
- RetentionRules: &bucket.RetentionRules,
- Rp: bucket.Rp,
- }
- return b.createBucket(ctx, bucketReq)
- }
- func (b *bucketsAPI) CreateBucketWithNameWithID(ctx context.Context, orgID, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) {
- rs := domain.RetentionRules(rules)
- bucket := &domain.PostBucketRequest{Name: bucketName, OrgID: orgID, RetentionRules: &rs}
- return b.createBucket(ctx, bucket)
- }
- func (b *bucketsAPI) CreateBucketWithName(ctx context.Context, org *domain.Organization, bucketName string, rules ...domain.RetentionRule) (*domain.Bucket, error) {
- return b.CreateBucketWithNameWithID(ctx, *org.Id, bucketName, rules...)
- }
- func (b *bucketsAPI) DeleteBucket(ctx context.Context, bucket *domain.Bucket) error {
- return b.DeleteBucketWithID(ctx, *bucket.Id)
- }
- func (b *bucketsAPI) DeleteBucketWithID(ctx context.Context, bucketID string) error {
- params := &domain.DeleteBucketsIDAllParams{
- BucketID: bucketID,
- }
- return b.apiClient.DeleteBucketsID(ctx, params)
- }
- func (b *bucketsAPI) UpdateBucket(ctx context.Context, bucket *domain.Bucket) (*domain.Bucket, error) {
- params := &domain.PatchBucketsIDAllParams{
- Body: domain.PatchBucketsIDJSONRequestBody{
- Description: bucket.Description,
- Name: &bucket.Name,
- RetentionRules: retentionRulesToPatchRetentionRules(&bucket.RetentionRules),
- },
- BucketID: *bucket.Id,
- }
- return b.apiClient.PatchBucketsID(ctx, params)
- }
- func (b *bucketsAPI) GetMembers(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceMember, error) {
- return b.GetMembersWithID(ctx, *bucket.Id)
- }
- func (b *bucketsAPI) GetMembersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceMember, error) {
- params := &domain.GetBucketsIDMembersAllParams{
- BucketID: bucketID,
- }
- response, err := b.apiClient.GetBucketsIDMembers(ctx, params)
- if err != nil {
- return nil, err
- }
- return response.Users, nil
- }
- func (b *bucketsAPI) AddMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceMember, error) {
- return b.AddMemberWithID(ctx, *bucket.Id, *user.Id)
- }
- func (b *bucketsAPI) AddMemberWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceMember, error) {
- params := &domain.PostBucketsIDMembersAllParams{
- BucketID: bucketID,
- Body: domain.PostBucketsIDMembersJSONRequestBody{Id: memberID},
- }
- return b.apiClient.PostBucketsIDMembers(ctx, params)
- }
- func (b *bucketsAPI) RemoveMember(ctx context.Context, bucket *domain.Bucket, user *domain.User) error {
- return b.RemoveMemberWithID(ctx, *bucket.Id, *user.Id)
- }
- func (b *bucketsAPI) RemoveMemberWithID(ctx context.Context, bucketID, memberID string) error {
- params := &domain.DeleteBucketsIDMembersIDAllParams{
- BucketID: bucketID,
- UserID: memberID,
- }
- return b.apiClient.DeleteBucketsIDMembersID(ctx, params)
- }
- func (b *bucketsAPI) GetOwners(ctx context.Context, bucket *domain.Bucket) (*[]domain.ResourceOwner, error) {
- return b.GetOwnersWithID(ctx, *bucket.Id)
- }
- func (b *bucketsAPI) GetOwnersWithID(ctx context.Context, bucketID string) (*[]domain.ResourceOwner, error) {
- params := &domain.GetBucketsIDOwnersAllParams{
- BucketID: bucketID,
- }
- response, err := b.apiClient.GetBucketsIDOwners(ctx, params)
- if err != nil {
- return nil, err
- }
- return response.Users, nil
- }
- func (b *bucketsAPI) AddOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) (*domain.ResourceOwner, error) {
- return b.AddOwnerWithID(ctx, *bucket.Id, *user.Id)
- }
- func (b *bucketsAPI) AddOwnerWithID(ctx context.Context, bucketID, memberID string) (*domain.ResourceOwner, error) {
- params := &domain.PostBucketsIDOwnersAllParams{
- BucketID: bucketID,
- Body: domain.PostBucketsIDOwnersJSONRequestBody{Id: memberID},
- }
- return b.apiClient.PostBucketsIDOwners(ctx, params)
- }
- func (b *bucketsAPI) RemoveOwner(ctx context.Context, bucket *domain.Bucket, user *domain.User) error {
- return b.RemoveOwnerWithID(ctx, *bucket.Id, *user.Id)
- }
- func (b *bucketsAPI) RemoveOwnerWithID(ctx context.Context, bucketID, memberID string) error {
- params := &domain.DeleteBucketsIDOwnersIDAllParams{
- BucketID: bucketID,
- UserID: memberID,
- }
- return b.apiClient.DeleteBucketsIDOwnersID(ctx, params)
- }
- func retentionRulesToPatchRetentionRules(rrs *domain.RetentionRules) *domain.PatchRetentionRules {
- if rrs == nil {
- return nil
- }
- prrs := make([]domain.PatchRetentionRule, len(*rrs))
- for i, rr := range *rrs {
- prrs[i] = domain.PatchRetentionRule{
- EverySeconds: rr.EverySeconds,
- ShardGroupDurationSeconds: rr.ShardGroupDurationSeconds,
- }
- if rr.Type != nil {
- rrt := domain.PatchRetentionRuleType(*rr.Type)
- prrs[i].Type = &rrt
- }
- }
- dprrs := domain.PatchRetentionRules(prrs)
- return &dprrs
- }
|