From fb61b1b06b80bba6bbf005db67442beb3914c87f Mon Sep 17 00:00:00 2001 From: sushmith Date: Wed, 5 Apr 2023 10:56:11 +0530 Subject: [PATCH 1/3] feat(provider): fetch resources on provider update --- core/provider/service.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/core/provider/service.go b/core/provider/service.go index 1c20c17e9..c46a25a09 100644 --- a/core/provider/service.go +++ b/core/provider/service.go @@ -199,7 +199,9 @@ func (s *Service) Update(ctx context.Context, p *domain.Provider) error { return err } - if !isDryRun(ctx) { + dryRun := isDryRun(ctx) + + if !dryRun { if err := s.repository.Update(ctx, p); err != nil { return err } @@ -209,6 +211,23 @@ func (s *Service) Update(ctx context.Context, p *domain.Provider) error { } } + go func() { + s.logger.Info("fetching resources", "provider_urn", p.URN) + ctx := audit.WithActor(context.Background(), domain.SystemActorName) + resources, err := s.getResources(ctx, p) + if err != nil { + s.logger.Error("failed to fetch resources", "error", err) + } + + if !dryRun { + if err := s.resourceService.BulkUpsert(ctx, resources); err != nil { + s.logger.Error("failed to insert resources to db", "error", err) + } else { + s.logger.Info("resources added", "provider_urn", p.URN, "count", len(resources)) + } + } + }() + return nil } From 353ca0b6fc45a8346926cae57e96955a1e633cdb Mon Sep 17 00:00:00 2001 From: sushmith Date: Wed, 5 Apr 2023 12:31:14 +0530 Subject: [PATCH 2/3] test(provider): update test cases --- core/provider/service_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/core/provider/service_test.go b/core/provider/service_test.go index 28ccd4400..6be24ba5b 100644 --- a/core/provider/service_test.go +++ b/core/provider/service_test.go @@ -280,6 +280,14 @@ func (s *ServiceTestSuite) TestUpdate() { s.mockProviderRepository.EXPECT().Update(mock.AnythingOfType("*context.emptyCtx"), tc.expectedNewProvider).Return(nil) s.mockAuditLogger.On("Log", mock.Anything, provider.AuditKeyUpdate, mock.Anything).Return(nil).Once() + expectedResources := []*domain.Resource{} + s.mockResourceService.On("Find", mock.Anything, domain.ListResourcesFilter{ + ProviderType: tc.updatePayload.Type, + ProviderURN: tc.updatePayload.URN, + }).Return([]*domain.Resource{}, nil).Once() + s.mockProvider.On("GetResources", tc.updatePayload.Config).Return(expectedResources, nil).Once() + s.mockResourceService.On("BulkUpsert", mock.Anything, expectedResources).Return(nil).Once() + actualError := s.service.Update(context.Background(), tc.updatePayload) s.Nil(actualError) @@ -310,6 +318,13 @@ func (s *ServiceTestSuite) TestUpdate() { ctx := provider.WithDryRun(context.Background()) + expectedResources := []*domain.Resource{} + s.mockResourceService.On("Find", mock.Anything, domain.ListResourcesFilter{ + ProviderType: p.Type, + ProviderURN: p.URN, + }).Return([]*domain.Resource{}, nil).Once() + s.mockProvider.On("GetResources", p.Config).Return(expectedResources, nil).Once() + actualError := s.service.Update(ctx, p) s.Nil(actualError) From 09c76915b2520fba769b8001af9c0f29aa6af996 Mon Sep 17 00:00:00 2001 From: sushmith Date: Wed, 5 Apr 2023 14:08:50 +0530 Subject: [PATCH 3/3] chore: update log lines --- core/provider/service.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/provider/service.go b/core/provider/service.go index c46a25a09..95ef16c87 100644 --- a/core/provider/service.go +++ b/core/provider/service.go @@ -134,7 +134,7 @@ func (s *Service) Create(ctx context.Context, p *domain.Provider) error { } go func() { - s.logger.Info("fetching resources", "provider_urn", p.URN) + s.logger.Info("provider create fetching resources", "provider_urn", p.URN) ctx := audit.WithActor(context.Background(), domain.SystemActorName) resources, err := s.getResources(ctx, p) if err != nil { @@ -212,7 +212,7 @@ func (s *Service) Update(ctx context.Context, p *domain.Provider) error { } go func() { - s.logger.Info("fetching resources", "provider_urn", p.URN) + s.logger.Info("provider update fetching resources", "provider_urn", p.URN) ctx := audit.WithActor(context.Background(), domain.SystemActorName) resources, err := s.getResources(ctx, p) if err != nil {