Skip to content

Commit 1ee3d54

Browse files
committed
Allow to filter buckets
1 parent 8dbd02c commit 1ee3d54

2 files changed

Lines changed: 24 additions & 3 deletions

File tree

tools/storage-advisor/src/main.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ var mode = flag.String("mode", "cli", "Use as a CLI tool")
2828

2929
var region = flag.String("region", "", "AWS region")
3030

31+
var bucketsFilterS = flag.String("buckets", "", "Comma-separated list of buckets to check")
32+
3133
var apiToken = flag.String("api-token", "", "API token for Joom Cloud")
3234

3335
var apiEndpoint = flag.String("api-endpoint", "https://api.cloud.joom.ai/v1", "API endpoint URL")
@@ -46,6 +48,14 @@ func main() {
4648
client := s3.NewFromConfig(cfg)
4749
api := NewApi(*apiEndpoint, apiToken)
4850

51+
bucketsFilter := map[string]struct{}{}
52+
if bucketsFilterS != nil && *bucketsFilterS != "" {
53+
for _, bucket := range strings.Split(*bucketsFilterS, ",") {
54+
bucketsFilter[bucket] = struct{}{}
55+
}
56+
fmt.Printf("Filtering buckets: %v\n", len(bucketsFilter))
57+
}
58+
4959
switch *mode {
5060
case "cli":
5161
// For CLI, use a simplified logger
@@ -89,7 +99,7 @@ func main() {
8999
identity := *stsOutput.Arn
90100
fmt.Printf("Info: your AWS identity is %s\n", identity)
91101

92-
buckets, issues, err := runS3Checks(rootCtx, client)
102+
buckets, issues, err := runS3Checks(rootCtx, client, bucketsFilter)
93103
if err != nil {
94104
var ae smithy.APIError
95105
if errors.As(err, &ae) {
@@ -125,7 +135,7 @@ func main() {
125135
log.Info().Msgf("running with AWS identity %s", *stsOutput.Arn)
126136
}
127137

128-
buckets, _, err := runS3Checks(rootCtx, client)
138+
buckets, _, err := runS3Checks(rootCtx, client, bucketsFilter)
129139
if err != nil {
130140
log.Fatal().Err(err).Msg("could not list buckets")
131141
}

tools/storage-advisor/src/s3Issues.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,14 +508,25 @@ func summarizeIssues(results []Finding, checkName string) {
508508
// as separate global list of all issues.
509509
// The function tries to run and return something in face of all errors, and will only
510510
// return error is we can't do anything -- like we can't list buckets.
511-
func runS3Checks(ctx context.Context, s3client *s3.Client) ([]Bucket, []FindingWithBucket, error) {
511+
func runS3Checks(ctx context.Context, s3client *s3.Client, bucketsFilter map[string]struct{}) ([]Bucket, []FindingWithBucket, error) {
512512
fmt.Printf(green("Running S3 checks\n\n"))
513513

514514
buckets, err := listBuckets(s3client)
515515
if err != nil {
516516
return nil, nil, err
517517
}
518518

519+
if len(bucketsFilter) > 0 {
520+
filtered := make([]Bucket, 0, len(bucketsFilter))
521+
for _, b := range buckets {
522+
if _, found := bucketsFilter[b.Name]; found {
523+
filtered = append(filtered, b)
524+
}
525+
}
526+
fmt.Printf("Filtered %d buckets using %d filters into %d buckets", len(buckets), len(bucketsFilter), len(filtered))
527+
buckets = filtered
528+
}
529+
519530
for i := range buckets {
520531
// Get bucket region
521532
r, err := s3client.GetBucketLocation(ctx, &s3.GetBucketLocationInput{

0 commit comments

Comments
 (0)