in src/ApiForFhirMigrationTool.Function/Program.cs [33:132]
private static void Main(string[] args)
{
MigrationOptions config = new();
var host = new HostBuilder()
.ConfigureAppConfiguration((hostingContext, configuration) =>
{
configuration.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddUserSecrets(Assembly.GetExecutingAssembly(), true)
.AddEnvironmentVariables("AZURE_");
IConfigurationRoot configurationRoot = configuration.Build();
configurationRoot.Bind(config);
})
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices(services =>
{
var credential = new DefaultAzureCredential();
//When client want to use client credentials for gen1
ClientSecretCredential? clientcred =config.ClientCredential? new ClientSecretCredential(config.TenantId, config.ClientId, config.ClientSecret):null;
if (config.AppInsightConnectionstring != null)
{
services.AddLogging(builder =>
{
builder.AddFilter<ApplicationInsightsLoggerProvider>(string.Empty, config.Debug ? LogLevel.Debug : LogLevel.Information);
builder.AddApplicationInsights(op => op.ConnectionString = config.AppInsightConnectionstring, op => op.FlushOnDispose = true);
});
services.Configure<TelemetryConfiguration>(options =>
{
options.ConnectionString = config.AppInsightConnectionstring;
});
services.AddTransient<TelemetryClient>();
}
services.AddTransient<IOrchestrationHelper, OrchestrationHelper>();
services.AddTransient<ISurfaceCheck, SurfaceCheck>();
services.AddTransient<IDeepCheck, DeepCheck>();
services.AddTransient<IAzureTableClientFactory, AzureTableClientFactory>();
services.AddTransient<IAzureBlobClientFactory, AzureBlobClientFactory>();
services.AddTransient<IMetadataStore, AzureTableMetadataStore>();
TableClientOptions opts = new TableClientOptions(TableClientOptions.ServiceVersion.V2019_02_02);
opts.Retry.Delay = TimeSpan.FromSeconds(5);
opts.Retry.Mode = RetryMode.Fixed;
opts.Retry.MaxRetries = 3;
BlobClientOptions blobOpts = new BlobClientOptions(BlobClientOptions.ServiceVersion.V2019_02_02);
blobOpts.Retry.Delay = TimeSpan.FromSeconds(5);
blobOpts.Retry.Mode = RetryMode.Fixed;
blobOpts.Retry.MaxRetries = 3;
services.AddSingleton<TableServiceClient>(new TableServiceClient(new Uri(config.StagingStorageUri), credential, opts));
services.AddSingleton<BlobServiceClient>(new BlobServiceClient(new Uri(config.BlobStorageUri), credential, blobOpts));
services.AddTransient<IFhirProcessor, FhirProcessor>();
services.AddScoped<IFhirClient, FhirClient>();
services.AddTransient<ISearchParameterOperation, SearchParameterOperation>();
services.AddSingleton(config);
var baseUri = config.SourceUri;
var desUri = config.DestinationUri;
string[]? scopes = default;
#pragma warning disable CS8604 // Possible null reference argument.
services.AddHttpClient(config.SourceHttpClient, httpClient =>
{
httpClient.DefaultRequestHeaders.Add(HeaderNames.UserAgent, config.UserAgent);
httpClient.BaseAddress = baseUri;
})
.AddPolicyHandler(GetRetryPolicy())
.AddHttpMessageHandler(x => new BearerTokenHandler(config.ClientCredential? clientcred : credential, baseUri, scopes));
#pragma warning restore CS8604 // Possible null reference argument.
#pragma warning disable CS8604 // Possible null reference argument.
services.AddHttpClient(config.DestinationHttpClient, client =>
{
client.DefaultRequestHeaders.Add(HeaderNames.UserAgent, config.UserAgent);
client.BaseAddress = desUri;
})
.AddPolicyHandler(GetRetryPolicy())
.AddHttpMessageHandler(x => new BearerTokenHandler(credential, desUri, scopes));
#pragma warning restore CS8604 // Possible null reference argument.
})
.Build();
host.Run();
}