in tools/code/extractor/Api.cs [38:72]
private static ExtractApis GetExtractApis(IServiceProvider provider)
{
var list = provider.GetRequiredService<ListApis>();
var writeArtifacts = provider.GetRequiredService<WriteApiArtifacts>();
var extractApiPolicies = provider.GetRequiredService<ExtractApiPolicies>();
var extractApiTags = provider.GetRequiredService<ExtractApiTags>();
var extractApiDiagnostics = provider.GetRequiredService<ExtractApiDiagnostics>();
var extractApiOperations = provider.GetRequiredService<ExtractApiOperations>();
var activitySource = provider.GetRequiredService<ActivitySource>();
var logger = provider.GetRequiredService<ILogger>();
return async cancellationToken =>
{
using var _ = activitySource.StartActivity(nameof(ExtractApis));
logger.LogInformation("Extracting APIs...");
await list(cancellationToken)
// Group APIs by version set (https://github.com/Azure/apiops/issues/316).
// We'll process each group in parallel, but each API within a group sequentially.
.GroupBy(api => api.Dto.Properties.ApiVersionSetId ?? Guid.NewGuid().ToString())
.IterParallel(async group => await group.Iter(async api => await extractApi(api.Name, api.Dto, api.SpecificationOption, cancellationToken),
cancellationToken),
cancellationToken);
};
async ValueTask extractApi(ApiName name, ApiDto dto, Option<(ApiSpecification Specification, BinaryData Contents)> specificationOption, CancellationToken cancellationToken)
{
await writeArtifacts(name, dto, specificationOption, cancellationToken);
await extractApiPolicies(name, cancellationToken);
await extractApiTags(name, cancellationToken);
await extractApiDiagnostics(name, cancellationToken);
await extractApiOperations(name, cancellationToken);
}
}