From 1106990aa002fee48b1f28468e78e7b27fb079cb Mon Sep 17 00:00:00 2001 From: roseo1 <45789938+roseo1@users.noreply.github.com> Date: Wed, 27 Nov 2024 17:49:19 +0000 Subject: [PATCH] feat(resource): add code guru profiler profiling group resource --- resources/codeguru-profiling-group.go | 77 +++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 resources/codeguru-profiling-group.go diff --git a/resources/codeguru-profiling-group.go b/resources/codeguru-profiling-group.go new file mode 100644 index 00000000..bb8a2736 --- /dev/null +++ b/resources/codeguru-profiling-group.go @@ -0,0 +1,77 @@ +package resources + +import ( + "context" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/codeguruprofiler" + + "github.com/ekristen/libnuke/pkg/registry" + "github.com/ekristen/libnuke/pkg/resource" + "github.com/ekristen/libnuke/pkg/types" + + "github.com/ekristen/aws-nuke/v3/pkg/nuke" +) + +const CodeGuruProfilingGroupResource = "CodeGuruProfilingGroup" + +func init() { + registry.Register(®istry.Registration{ + Name: CodeGuruProfilingGroupResource, + Scope: nuke.Account, + Lister: &CodeGuruProfilingGroupResourceLister{}, + }) +} + +type CodeGuruProfilingGroupResourceLister struct{} + +func (l *CodeGuruProfilingGroupResourceLister) List(_ context.Context, o interface{}) ([]resource.Resource, error) { + opts := o.(*nuke.ListerOpts) + var resources []resource.Resource + + svc := codeguruprofiler.New(opts.Session) + + params := &codeguruprofiler.ListProfilingGroupsInput{ + IncludeDescription: aws.Bool(true), + } + + for { + resp, err := svc.ListProfilingGroups(params) + if err != nil { + return nil, err + } + + for _, group := range resp.ProfilingGroups { + resources = append(resources, &CodeGuruProfilingGroup{ + svc: svc, + ComputePlatform: group.ComputePlatform, + Name: group.Name, + }) + } + + if resp.NextToken == nil { + break + } + + params.NextToken = resp.NextToken + } + + return resources, nil +} + +type CodeGuruProfilingGroup struct { + svc *codeguruprofiler.CodeGuruProfiler + ComputePlatform *string + Name *string +} + +func (r *CodeGuruProfilingGroup) Remove(_ context.Context) error { + _, err := r.svc.DeleteProfilingGroup(&codeguruprofiler.DeleteProfilingGroupInput{ + ProfilingGroupName: r.Name, + }) + return err +} + +func (r *CodeGuruProfilingGroup) Properties() types.Properties { + return types.NewPropertiesFromStruct(r) +}