in tools/code/extractor/Product.cs [35:65]
private static ExtractProducts GetExtractProducts(IServiceProvider provider)
{
var list = provider.GetRequiredService<ListProducts>();
var writeArtifacts = provider.GetRequiredService<WriteProductArtifacts>();
var extractPolicies = provider.GetRequiredService<ExtractProductPolicies>();
var extractGroups = provider.GetRequiredService<ExtractProductGroups>();
var extractTags = provider.GetRequiredService<ExtractProductTags>();
var extractApis = provider.GetRequiredService<ExtractProductApis>();
var activitySource = provider.GetRequiredService<ActivitySource>();
var logger = provider.GetRequiredService<ILogger>();
return async cancellationToken =>
{
using var _ = activitySource.StartActivity(nameof(ExtractProducts));
logger.LogInformation("Extracting products...");
await list(cancellationToken)
.IterParallel(async resource => await extractProduct(resource.Name, resource.Dto, cancellationToken),
cancellationToken);
};
async ValueTask extractProduct(ProductName name, ProductDto dto, CancellationToken cancellationToken)
{
await writeArtifacts(name, dto, cancellationToken);
await extractPolicies(name, cancellationToken);
await extractGroups(name, cancellationToken);
await extractTags(name, cancellationToken);
await extractApis(name, cancellationToken);
}
}