func()

in internal/resources/fetching/fetchers/azure/security_fetcher.go [51:96]


func (f *AzureSecurityAssetFetcher) Fetch(ctx context.Context, cycleMetadata cycle.Metadata) error {
	f.log.Info("Starting AzureSecurityAssetFetcher.Fetch")

	subscriptions, err := f.provider.GetSubscriptions(ctx, cycleMetadata)
	if err != nil {
		return fmt.Errorf("error fetching subscription information: %w", err)
	}

	fetches := map[string]func(context.Context, string) ([]inventory.AzureAsset, error){
		inventory.SecurityAutoProvisioningSettingsType: f.provider.ListAutoProvisioningSettings,
		inventory.SecurityContactsAssetType:            f.provider.ListSecurityContacts,
	}

	var errs []error
	for _, sub := range subscriptions {
		for assetType, fn := range fetches {
			securityContacts, err := fn(ctx, sub.ShortID)
			if err != nil {
				f.log.Errorf("AzureSecurityAssetFetcher.Fetch failed to fetch %s for subscription %s: %s", assetType, sub.ShortID, err.Error())
				errs = append(errs, err)
				continue
			}
			if securityContacts == nil {
				securityContacts = []inventory.AzureAsset{}
			}

			select {
			case <-ctx.Done():
				err := ctx.Err()
				f.log.Infof("AzureSecurityAssetFetcher.Fetch context err: %s", err.Error())
				errs = append(errs, err)
				return errors.Join(errs...)
			case f.resourceCh <- fetching.ResourceInfo{
				CycleMetadata: cycleMetadata,
				Resource: &AzureBatchResource{
					typePair:     AzureSecurityAssetTypeToTypePair[assetType],
					Assets:       securityContacts,
					Subscription: sub,
				},
			}:
			}
		}
	}

	return errors.Join(errs...)
}