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...)
}