Files
influx-cli/clients/delete/delete.go

64 lines
1.5 KiB
Go

package delete
import (
"context"
"fmt"
"time"
"github.com/influxdata/influx-cli/v2/api"
"github.com/influxdata/influx-cli/v2/clients"
)
type Client struct {
clients.CLI
api.DeleteApi
}
type Params struct {
clients.OrgBucketParams
Predicate string
Start string
Stop string
}
func (c Client) Delete(ctx context.Context, params *Params) error {
if params.OrgID == "" && params.OrgName == "" && c.ActiveConfig.Org == "" {
return clients.ErrMustSpecifyOrg
}
if params.BucketID == "" && params.BucketName == "" {
return clients.ErrMustSpecifyBucket
}
start, err := time.Parse(time.RFC3339Nano, params.Start)
if err != nil {
return fmt.Errorf("start time %q cannot be parsed as RFC3339Nano: %w", params.Start, err)
}
stop, err := time.Parse(time.RFC3339Nano, params.Stop)
if err != nil {
return fmt.Errorf("stop time %q cannot be parsed as RFC3339Nano: %w", params.Stop, err)
}
reqBody := api.NewDeletePredicateRequest(start, stop)
if params.Predicate != "" {
reqBody.SetPredicate(params.Predicate)
}
req := c.PostDelete(ctx).DeletePredicateRequest(*reqBody)
if params.OrgID != "" {
req = req.OrgID(params.OrgID)
} else if params.OrgName != "" {
req = req.Org(params.OrgName)
} else {
req = req.Org(c.ActiveConfig.Org)
}
if params.BucketID != "" {
req = req.BucketID(params.BucketID)
} else {
req = req.Bucket(params.BucketName)
}
if err := req.Execute(); err != nil {
return fmt.Errorf("failed to delete data: %w", err)
}
return nil
}