private AspNetDiagnosticTelemetryModule CreateModule(string rootIdHeaderName = null, string parentIdHeaderName = null) { var initializer = new Web.OperationCorrelationTelemetryInitializer(); if (rootIdHeaderName != null) { initializer.RootOperationIdHeaderName = rootIdHeaderName; } if (parentIdHeaderName != null) { initializer.ParentOperationIdHeaderName = parentIdHeaderName; } this.configuration.TelemetryInitializers.Add(new Extensibility.OperationCorrelationTelemetryInitializer()); AspNetDiagnosticTelemetryModule result = new AspNetDiagnosticTelemetryModule(); var requestModule = new RequestTrackingTelemetryModule() { EnableChildRequestTrackingSuppression = false }; var exceptionModule = new ExceptionTrackingTelemetryModule(); requestModule.Initialize(this.configuration); exceptionModule.Initialize(this.configuration); TelemetryModules.Instance.Modules.Add(requestModule); TelemetryModules.Instance.Modules.Add(exceptionModule); result.Initialize(this.configuration); return(result); }
public void RequestTrackingTelemetryModuleDoesNoThrowIfInitializeAfterDispose() { RequestTrackingTelemetryModule requestTrackingTelemetryModule = new RequestTrackingTelemetryModule(null); requestTrackingTelemetryModule.Dispose(); requestTrackingTelemetryModule.Initialize(new TelemetryConfiguration()); }
private static void InitializeApplicationInsightsRequestTracking() { if (_requestTrackingModule != null) { return; } // Requests may come in before the JobHost has started (like during cold starts), which means // they will not be properly tracked by Application Insights because there's nothing listening // for them yet. This wires up the request tracking module with default values to catch those // events and properly create an Activity. Once the JobHost has started, we dispose this and the // JobHost tracking module takes over. var module = new RequestTrackingTelemetryModule(new ApplicationInsightsApplicationIdProvider()) { CollectionOptions = new RequestCollectionOptions { TrackExceptions = false, EnableW3CDistributedTracing = true, InjectResponseHeaders = true } }; var telemetryConfig = new TelemetryConfiguration(); module.Initialize(telemetryConfig); _telemetryConfiguration = telemetryConfig; _requestTrackingModule = module; }
public AppInsightsTelemetry(Guid session) { TelemetryConfiguration.Active.InstrumentationKey = "a11b9e48-55fe-4efa-aec7-44e7a8905577"; var performanceModule = new PerformanceCollectorModule(); performanceModule.Initialize(TelemetryConfiguration.Active); var quickPulseModule = new QuickPulseTelemetryModule(); quickPulseModule.Initialize(TelemetryConfiguration.Active); var webModule = new RequestTrackingTelemetryModule(); webModule.Initialize(TelemetryConfiguration.Active); var exceptionModule = new UnhandledExceptionTelemetryModule(); exceptionModule.Initialize(TelemetryConfiguration.Active); _client = new TelemetryClient(TelemetryConfiguration.Active); }
/// <summary> /// This method gets called by the runtime. Use this method to add services to the container. /// </summary> /// <param name="services">An instance of <see cref="IServiceCollection"/>.</param> public void ConfigureServices(IServiceCollection services) { this.ConfigureServicesCommon(services); _ = services.AddMvc(); _ = services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "NotificationService", Version = "v1" }); }); ITelemetryInitializer[] itm = new ITelemetryInitializer[1]; var envInitializer = new EnvironmentInitializer { Service = this.Configuration[AIConstants.ServiceConfigName], ServiceLine = this.Configuration[AIConstants.ServiceLineConfigName], ServiceOffering = this.Configuration[AIConstants.ServiceOfferingConfigName], ComponentId = this.Configuration[AIConstants.ComponentIdConfigName], ComponentName = this.Configuration[AIConstants.ComponentNameConfigName], EnvironmentName = this.Configuration[AIConstants.EnvironmentName], IctoId = "IctoId", }; itm[0] = envInitializer; NotificationProviders.Common.Logger.LoggingConfiguration loggingConfiguration = new NotificationProviders.Common.Logger.LoggingConfiguration { IsTraceEnabled = true, TraceLevel = (SeverityLevel)Enum.Parse(typeof(SeverityLevel), this.Configuration[ConfigConstants.AITraceLelelConfigKey]), EnvironmentName = this.Configuration[AIConstants.EnvironmentName], }; var tconfig = TelemetryConfiguration.CreateDefault(); tconfig.InstrumentationKey = this.Configuration[ConfigConstants.AIInsrumentationConfigKey]; DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule(); depModule.Initialize(tconfig); RequestTrackingTelemetryModule requestTrackingTelemetryModule = new RequestTrackingTelemetryModule(); requestTrackingTelemetryModule.Initialize(tconfig); _ = services.AddSingleton <NotificationProviders.Common.Logger.ILogger>(_ => new NotificationProviders.Common.Logger.AILogger(loggingConfiguration, tconfig, itm)); _ = services.AddScoped <IEmailManager, EmailManager>(s => new EmailManager( this.Configuration, s.GetService <IRepositoryFactory>(), s.GetService <ILogger>(), s.GetService <IMailTemplateManager>(), s.GetService <ITemplateMerge>())) .AddScoped <IEmailServiceManager, EmailServiceManager>(s => new EmailServiceManager(this.Configuration, s.GetService <IRepositoryFactory>(), s.GetService <ICloudStorageClient>(), s.GetService <ILogger>(), s.GetService <INotificationProviderFactory>(), s.GetService <IEmailManager>())) .AddScoped <ITemplateMerge, TemplateMerge>() .AddSingleton <IEmailAccountManager, EmailAccountManager>() .AddScoped <INotificationProviderFactory, NotificationProviderFactory>(); NotificationProviderType providerType = (NotificationProviderType)Enum.Parse(typeof(NotificationProviderType), this.Configuration[ConfigConstants.NotificationProviderType]); if (NotificationProviderType.DirectSend == providerType) { this.ConfigureDirectSendServices(services); } else if (NotificationProviderType.SMTP == providerType) { this.ConfigureSMTPServices(services); } else { this.ConfigureGraphServices(services); } }
/// <summary> /// This method gets called by the runtime. Use this method to add services to the container. /// </summary> /// <param name="services">An instance of <see cref="IServiceCollection"/>.</param> public void ConfigureServicesCommon(IServiceCollection services) { _ = services.AddAzureAppConfiguration(); _ = services.AddAuthorization(configure => { configure.AddPolicy(ApplicationConstants.AppNameAuthorizePolicy, policy => { policy.Requirements.Add(new AppNameAuthorizeRequirement()); }); configure.AddPolicy(ApplicationConstants.AppIdAuthorizePolicy, policy => { policy.Requirements.Add(new AppIdAuthorizeRequirement()); }); }); _ = services.AddSingleton <IAuthorizationHandler, AppNameAuthorizePolicyHandler>(s => new AppNameAuthorizePolicyHandler(s.GetService <IHttpContextAccessor>(), this.Configuration)); _ = services.AddSingleton <IAuthorizationHandler, AppIdAuthorizePolicyHandler>(s => new AppIdAuthorizePolicyHandler(s.GetService <IHttpContextAccessor>(), this.Configuration)); _ = services.AddControllers(); _ = services.AddApplicationInsightsTelemetry(); _ = services.AddScoped(typeof(ValidateModelAttribute)); _ = services.AddOptions(); _ = services.Configure <StorageAccountSetting>(this.Configuration.GetSection(ConfigConstants.StorageAccountConfigSectionKey)); _ = services.Configure <StorageAccountSetting>(s => s.ConnectionString = this.Configuration[ConfigConstants.StorageAccountConnectionStringConfigKey]); _ = services.Configure <UserTokenSetting>(this.Configuration.GetSection(ConfigConstants.UserTokenSettingConfigSectionKey)); _ = services.Configure <RetrySetting>(this.Configuration.GetSection(ConfigConstants.RetrySettingConfigSectionKey)); _ = services.AddSingleton <IConfiguration>(this.Configuration); _ = services.AddSingleton <IEncryptionService, EncryptionService>(); _ = services.AddSingleton <IKeyEncryptionKey, CryptographyClient>(cc => new CryptographyClient(new Uri(this.Configuration[ConfigConstants.KeyVaultRSAUriConfigKey]), new DefaultAzureCredential())); _ = services.AddTransient <IHttpContextAccessor, HttpContextAccessor>() .AddSingleton <ICloudStorageClient, CloudStorageClient>() .AddScoped <ITokenHelper, TokenHelper>() .AddScoped <IRepositoryFactory, RepositoryFactory>() .AddSingleton <IEmailAccountManager, EmailAccountManager>(); StorageType storageType = (StorageType)Enum.Parse(typeof(StorageType), this.Configuration?[ConfigConstants.StorageType]); if (storageType == StorageType.DocumentDB) { this.ConfigureCosmosDB(services); } ConfigureStorageAccountServices(services); _ = services.AddHttpContextAccessor(); _ = services.AddAuthentication(ApplicationConstants.BearerAuthenticationScheme).AddJwtBearer(options => { options.Authority = this.Configuration[ConfigConstants.BearerTokenIssuerConfigKey]; options.ClaimsIssuer = this.Configuration[ConfigConstants.BearerTokenIssuerConfigKey]; options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters() { ValidateIssuer = false, ValidAudiences = this.Configuration[ConfigConstants.BearerTokenValidAudiencesConfigKey].Split(ApplicationConstants.SplitCharacter), }; }); ITelemetryInitializer[] itm = new ITelemetryInitializer[1]; var envInitializer = new EnvironmentInitializer { Service = this.Configuration[AIConstants.ServiceConfigName], ServiceLine = this.Configuration[AIConstants.ServiceLineConfigName], ServiceOffering = this.Configuration[AIConstants.ServiceOfferingConfigName], ComponentId = this.Configuration[AIConstants.ComponentIdConfigName], ComponentName = this.Configuration[AIConstants.ComponentNameConfigName], EnvironmentName = this.Configuration[AIConstants.EnvironmentName], IctoId = "IctoId", }; itm[0] = envInitializer; LoggingConfiguration loggingConfiguration = new LoggingConfiguration { IsTraceEnabled = true, TraceLevel = (SeverityLevel)Enum.Parse(typeof(SeverityLevel), this.Configuration[ConfigConstants.AITraceLelelConfigKey]), EnvironmentName = this.Configuration[AIConstants.EnvironmentName], }; #pragma warning disable CA2000 // Dispose objects before losing scope var tconfig = TelemetryConfiguration.CreateDefault(); #pragma warning restore CA2000 // Dispose objects before losing scope tconfig.InstrumentationKey = this.Configuration[ConfigConstants.AIInsrumentationConfigKey]; #pragma warning disable CA2000 // Dispose objects before losing scope DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule(); #pragma warning restore CA2000 // Dispose objects before losing scope depModule.Initialize(tconfig); #pragma warning disable CA2000 // Dispose objects before losing scope RequestTrackingTelemetryModule requestTrackingTelemetryModule = new RequestTrackingTelemetryModule(); #pragma warning restore CA2000 // Dispose objects before losing scope requestTrackingTelemetryModule.Initialize(tconfig); _ = services.AddSingleton <ILogger>(_ => new AILogger(loggingConfiguration, tconfig, itm)); }
/// <summary> /// This method gets called by the runtime. Use this method to add services to the container. /// </summary> /// <param name="services">An instance of <see cref="IServiceCollection"/>.</param> public void ConfigureServicesCommon(IServiceCollection services) { _ = services.AddAuthorization(configure => { configure.AddPolicy(Constants.AppNameAuthorizePolicy, policy => { policy.Requirements.Add(new AppNameAuthorizeRequirement()); }); configure.AddPolicy(Constants.AppAudienceAuthorizePolicy, policy => { policy.Requirements.Add(new AppAudienceAuthorizeRequirement()); }); }); _ = services.AddSingleton <IAuthorizationHandler, AppNameAuthorizePolicyHandler>(s => new AppNameAuthorizePolicyHandler(s.GetService <IHttpContextAccessor>(), this.Configuration)); _ = services.AddSingleton <IAuthorizationHandler, AppAudienceAuthorizePolicyHandler>(s => new AppAudienceAuthorizePolicyHandler(s.GetService <IHttpContextAccessor>(), this.Configuration)); _ = services.AddControllers(); _ = services.AddApplicationInsightsTelemetry(); _ = services.AddScoped(typeof(ValidateModelAttribute)); _ = services.AddOptions(); _ = services.Configure <MSGraphSetting>(this.Configuration.GetSection("MSGraphSetting")); _ = services.Configure <MSGraphSetting>(s => s.ClientCredential = this.Configuration["MSGraphSettingClientCredential"]); _ = services.Configure <MSGraphSetting>(s => s.ClientId = this.Configuration["MSGraphSettingClientId"]); _ = services.Configure <CosmosDBSetting>(this.Configuration.GetSection("CosmosDB")); _ = services.Configure <CosmosDBSetting>(s => s.Key = this.Configuration["CosmosDBKey"]); _ = services.Configure <CosmosDBSetting>(s => s.Uri = this.Configuration["CosmosDBURI"]); _ = services.Configure <StorageAccountSetting>(this.Configuration.GetSection("StorageAccount")); _ = services.Configure <StorageAccountSetting>(s => s.ConnectionString = this.Configuration["StorageAccountConnectionString"]); _ = services.Configure <UserTokenSetting>(this.Configuration.GetSection("UserTokenSetting")); _ = services.Configure <RetrySetting>(this.Configuration.GetSection("RetrySetting")); _ = services.AddSingleton <IConfiguration>(this.Configuration); _ = services.AddSingleton <IEncryptionService, EncryptionService>(); _ = services.AddSingleton <IKeyEncryptionKey, CryptographyClient>(cc => new CryptographyClient(new Uri(this.Configuration["KeyVault:RSAKeyUri"]), new DefaultAzureCredential())); _ = services.AddTransient <IHttpContextAccessor, HttpContextAccessor>() .AddScoped <ICosmosLinqQuery, CustomCosmosLinqQuery>() .AddSingleton <ICosmosDBQueryClient, CosmosDBQueryClient>() .AddSingleton <ICloudStorageClient, CloudStorageClient>() .AddScoped <ITokenHelper, TokenHelper>() .AddHttpClient <IMSGraphProvider, MSGraphProvider>(); _ = services.AddHttpContextAccessor(); _ = services.AddAuthentication("Bearer").AddJwtBearer(options => { options.Authority = this.Configuration["Authority"]; options.ClaimsIssuer = this.Configuration["BearerTokenAuthentication:Issuer"]; options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters() { ValidateIssuer = true, ValidAudiences = this.Configuration["BearerTokenAuthentication:ValidAudiences"].Split(Constants.SplitCharacter), }; }); ITelemetryInitializer[] itm = new ITelemetryInitializer[1]; var envInitializer = new EnvironmentInitializer { Service = this.Configuration[Constants.ServiceConfigName], ServiceLine = this.Configuration[Constants.ServiceLineConfigName], ServiceOffering = this.Configuration[Constants.ServiceOfferingConfigName], ComponentId = this.Configuration[Constants.ComponentIdConfigName], ComponentName = this.Configuration[Constants.ComponentNameConfigName], EnvironmentName = this.Configuration[Constants.EnvironmentName], IctoId = "IctoId", }; itm[0] = envInitializer; LoggingConfiguration loggingConfiguration = new LoggingConfiguration { IsTraceEnabled = true, TraceLevel = (SeverityLevel)Enum.Parse(typeof(SeverityLevel), this.Configuration["ApplicationInsights:TraceLevel"]), EnvironmentName = this.Configuration[Constants.EnvironmentName], }; var tconfig = TelemetryConfiguration.CreateDefault(); tconfig.InstrumentationKey = this.Configuration["ApplicationInsights:InstrumentationKey"]; DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule(); depModule.Initialize(tconfig); RequestTrackingTelemetryModule requestTrackingTelemetryModule = new RequestTrackingTelemetryModule(); requestTrackingTelemetryModule.Initialize(tconfig); _ = services.AddSingleton <ILogger>(_ => new AILogger(loggingConfiguration, tconfig, itm)); }
private static void RegisterApplicationInsightsTelemetryModules(TelemetryConfiguration configuration) { RegisterApplicationInsightsTelemetryModule( new AppServicesHeartbeatTelemetryModule(), configuration); RegisterApplicationInsightsTelemetryModule( new AzureInstanceMetadataTelemetryModule(), configuration); RegisterApplicationInsightsTelemetryModule( new DeveloperModeWithDebuggerAttachedTelemetryModule(), configuration); RegisterApplicationInsightsTelemetryModule( new UnhandledExceptionTelemetryModule(), configuration); RegisterApplicationInsightsTelemetryModule( new UnobservedExceptionTelemetryModule(), configuration); var requestTrackingModule = new RequestTrackingTelemetryModule(); requestTrackingModule.Handlers.Add("Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.RequestDataHttpHandler"); requestTrackingModule.Handlers.Add("System.Web.StaticFileHandler"); requestTrackingModule.Handlers.Add("System.Web.Handlers.AssemblyResourceLoader"); requestTrackingModule.Handlers.Add("System.Web.Optimization.BundleHandler"); requestTrackingModule.Handlers.Add("System.Web.Script.Services.ScriptHandlerFactory"); requestTrackingModule.Handlers.Add("System.Web.Handlers.TraceHandler"); requestTrackingModule.Handlers.Add("System.Web.Services.Discovery.DiscoveryRequestHandler"); requestTrackingModule.Handlers.Add("System.Web.HttpDebugHandler"); RegisterApplicationInsightsTelemetryModule( requestTrackingModule, configuration); RegisterApplicationInsightsTelemetryModule( new ExceptionTrackingTelemetryModule(), configuration); RegisterApplicationInsightsTelemetryModule( new AspNetDiagnosticTelemetryModule(), configuration); var dependencyTrackingModule = new DependencyTrackingTelemetryModule(); dependencyTrackingModule.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.windows.net"); dependencyTrackingModule.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.chinacloudapi.cn"); dependencyTrackingModule.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.cloudapi.de"); dependencyTrackingModule.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.usgovcloudapi.net"); dependencyTrackingModule.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.EventHubs"); dependencyTrackingModule.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.ServiceBus"); RegisterApplicationInsightsTelemetryModule( dependencyTrackingModule, configuration); RegisterApplicationInsightsTelemetryModule( new PerformanceCollectorModule(), configuration); RegisterApplicationInsightsTelemetryModule( new QuickPulseTelemetryModule(), configuration); }
public void RequestTrackingTelemetryModuleDoesNoThrowWhenAppIdProviderisNull() { RequestTrackingTelemetryModule requestTrackingTelemetryModule = new RequestTrackingTelemetryModule(null); }
/// <summary> /// This method gets called by the runtime. Use this method to add services to the container. /// </summary> /// <param name="services">An instance of <see cref="IServiceCollection"/>.</param> public void ConfigureServices(IServiceCollection services) { this.ConfigureServicesCommon(services); _ = services.AddMvc(); _ = services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "NotificationService", Version = "v1" }); }); ITelemetryInitializer[] itm = new ITelemetryInitializer[1]; var envInitializer = new EnvironmentInitializer { Service = this.Configuration[Constants.ServiceConfigName], ServiceLine = this.Configuration[Constants.ServiceLineConfigName], ServiceOffering = this.Configuration[Constants.ServiceOfferingConfigName], ComponentId = this.Configuration[Constants.ComponentIdConfigName], ComponentName = this.Configuration[Constants.ComponentNameConfigName], EnvironmentName = this.Configuration[Constants.EnvironmentName], IctoId = "IctoId", }; itm[0] = envInitializer; NotificationProviders.Common.Logger.LoggingConfiguration loggingConfiguration = new NotificationProviders.Common.Logger.LoggingConfiguration { IsTraceEnabled = true, TraceLevel = (SeverityLevel)Enum.Parse(typeof(SeverityLevel), this.Configuration["ApplicationInsights:TraceLevel"]), EnvironmentName = this.Configuration[Constants.EnvironmentName], }; var tconfig = TelemetryConfiguration.CreateDefault(); tconfig.InstrumentationKey = this.Configuration["ApplicationInsights:InstrumentationKey"]; DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule(); depModule.Initialize(tconfig); RequestTrackingTelemetryModule requestTrackingTelemetryModule = new RequestTrackingTelemetryModule(); requestTrackingTelemetryModule.Initialize(tconfig); _ = services.AddSingleton <NotificationProviders.Common.Logger.ILogger>(_ => new NotificationProviders.Common.Logger.AILogger(loggingConfiguration, tconfig, itm)); _ = services.AddSingleton <SendAccountConfiguration>(new SendAccountConfiguration() { DisplayName = this.Configuration["DirectSendSetting:DisplayName"], }); if (int.TryParse(this.Configuration["DirectSendSetting:SmtpPort"], out int port)) { _ = services.AddSingleton <ISmtpConfiguration>(new SmtpConfiguration() { SmtpPort = port, SmtpServer = this.Configuration["DirectSendSetting:SmtpServer"] }); } _ = services.AddSingleton <ISmtpClientFactory, DSSmtpClientFactory>() .AddSingleton <ISmtpClientPool, SmtpClientPool>() .AddSingleton <IEmailService, DirectSendMailService>(); _ = services.AddScoped <INotificationReportManager, NotificationReportManager>() .AddScoped <IEmailManager, EmailManager>(s => new EmailManager( this.Configuration, s.GetService <IRepositoryFactory>(), s.GetService <ILogger>(), s.GetService <IMailTemplateManager>(), s.GetService <ITemplateMerge>())) .AddScoped <IEmailServiceManager, EmailServiceManager>(s => new EmailServiceManager(this.Configuration, s.GetService <IRepositoryFactory>(), s.GetService <ICloudStorageClient>(), s.GetService <ILogger>(), s.GetService <INotificationProviderFactory>(), s.GetService <IEmailManager>())) .AddScoped <IRepositoryFactory, RepositoryFactory>() .AddScoped <EmailNotificationRepository>() .AddScoped <IEmailNotificationRepository, EmailNotificationRepository>(s => s.GetService <EmailNotificationRepository>()) .AddScoped <TableStorageEmailRepository>() .AddScoped <IEmailNotificationRepository, TableStorageEmailRepository>(s => s.GetService <TableStorageEmailRepository>()) .AddScoped <ITableStorageClient, TableStorageClient>() .AddScoped <IMailTemplateManager, MailTemplateManager>() .AddScoped <IMailTemplateRepository, MailTemplateRepository>() .AddScoped <IMailAttachmentRepository, MailAttachmentRepository>() .AddScoped <ITemplateMerge, TemplateMerge>() .AddSingleton <IEmailAccountManager, EmailAccountManager>() .AddScoped <INotificationProviderFactory, NotificationProviderFactory>() .AddScoped <DirectSendNotificationProvider>(s => new DirectSendNotificationProvider(this.Configuration, s.GetService <IEmailService>(), s.GetService <ILogger>(), s.GetService <IEmailManager>())) .AddScoped <INotificationProvider, DirectSendNotificationProvider>() .AddScoped <MSGraphNotificationProvider>(s => new MSGraphNotificationProvider(this.Configuration, s.GetService <IEmailAccountManager>(), s.GetService <ILogger>(), Options.Create(this.Configuration.GetSection("MSGraphSetting").Get <MSGraphSetting>()), Options.Create(this.Configuration.GetSection("PollyRetrySetting").Get <RetrySetting>()), s.GetService <ITokenHelper>(), s.GetService <IMSGraphProvider>(), s.GetService <IEmailManager>())) .AddScoped <INotificationProvider, MSGraphNotificationProvider>(); }
/// <inheritdoc/> public override void Configure(IFunctionsHostBuilder builder) { var azureFuncConfig = builder?.Services?.BuildServiceProvider()?.GetService <IConfiguration>(); var configBuilder = new ConfigurationBuilder(); _ = configBuilder.AddConfiguration(azureFuncConfig); var configFolder = Directory.GetParent(Assembly.GetExecutingAssembly().Location).Parent?.FullName; _ = configBuilder.SetBasePath(configFolder); _ = configBuilder.AddJsonFile("functionSettings.json"); _ = configBuilder.AddEnvironmentVariables(); var configuration = configBuilder.Build(); MaxDequeueCount = configuration.GetSection(ConfigConstants.MaxDequeueCountConfigKey); AzureKeyVaultConfigurationOptions azureKeyVaultConfigurationOptions = new AzureKeyVaultConfigurationOptions(configuration[ConfigConstants.KeyVaultUrlConfigKey]) { ReloadInterval = TimeSpan.FromSeconds(double.Parse(configuration[Constants.KeyVaultConfigRefreshDurationSeconds])), }; _ = configBuilder.AddAzureKeyVault(azureKeyVaultConfigurationOptions); configuration = configBuilder.Build(); _ = configBuilder.AddAzureAppConfiguration(options => { var settings = options.Connect(configuration[ConfigConstants.AzureAppConfigConnectionstringConfigKey]) .Select(KeyFilter.Any, "Common").Select(KeyFilter.Any, "QueueProcessor"); _ = settings.ConfigureRefresh(refreshOptions => { _ = refreshOptions.Register(key: configuration[ConfigConstants.ForceRefreshConfigKey], refreshAll: true, label: LabelFilter.Null); }); }); configuration = configBuilder.Build(); ITelemetryInitializer[] itm = new ITelemetryInitializer[1]; var envInitializer = new EnvironmentInitializer { Service = configuration[AIConstants.ServiceConfigName], ServiceLine = configuration[AIConstants.ServiceLineConfigName], ServiceOffering = configuration[AIConstants.ServiceOfferingConfigName], ComponentId = configuration[AIConstants.ComponentIdConfigName], ComponentName = configuration[AIConstants.ComponentNameConfigName], EnvironmentName = configuration[AIConstants.EnvironmentName], IctoId = "IctoId", }; itm[0] = envInitializer; LoggingConfiguration loggingConfiguration = new LoggingConfiguration { IsTraceEnabled = true, TraceLevel = (SeverityLevel)Enum.Parse(typeof(SeverityLevel), configuration[ConfigConstants.AITraceLelelConfigKey]), EnvironmentName = configuration[AIConstants.EnvironmentName], }; var tconfig = TelemetryConfiguration.CreateDefault(); tconfig.InstrumentationKey = configuration[ConfigConstants.AIInsrumentationConfigKey]; DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule(); depModule.Initialize(tconfig); RequestTrackingTelemetryModule requestTrackingTelemetryModule = new RequestTrackingTelemetryModule(); requestTrackingTelemetryModule.Initialize(tconfig); _ = builder.Services.AddSingleton <ILogger>(_ => new AILogger(loggingConfiguration, tconfig, itm)); StorageType storageType = (StorageType)Enum.Parse(typeof(StorageType), configuration?[ConfigConstants.StorageType]); if (storageType == StorageType.DocumentDB) { _ = builder.Services.Configure <CosmosDBSetting>(configuration.GetSection(ConfigConstants.CosmosDBConfigSectionKey)); _ = builder.Services.Configure <CosmosDBSetting>(s => s.Key = configuration[ConfigConstants.CosmosDBKeyConfigKey]); _ = builder.Services.Configure <CosmosDBSetting>(s => s.Uri = configuration[ConfigConstants.CosmosDBURIConfigKey]); _ = builder.Services.AddScoped <ICosmosLinqQuery, CustomCosmosLinqQuery>(); _ = builder.Services.AddSingleton <ICosmosDBQueryClient, CosmosDBQueryClient>(); } _ = builder.Services.Configure <StorageAccountSetting>(configuration.GetSection(ConfigConstants.StorageAccountConfigSectionKey)); _ = builder.Services.Configure <StorageAccountSetting>(s => s.ConnectionString = configuration[ConfigConstants.StorageAccountConnectionStringConfigKey]); _ = builder.Services.AddSingleton <IConfiguration>(configuration); _ = builder.Services.AddScoped <IRepositoryFactory, RepositoryFactory>(); _ = builder.Services.AddScoped <EmailNotificationRepository>(); _ = builder.Services.AddScoped <IEmailNotificationRepository, EmailNotificationRepository>(s => s.GetService <EmailNotificationRepository>()); _ = builder.Services.AddScoped <TableStorageEmailRepository>(); _ = builder.Services.AddScoped <IEmailNotificationRepository, TableStorageEmailRepository>(s => s.GetService <TableStorageEmailRepository>()); _ = builder.Services.AddScoped <ITableStorageClient, TableStorageClient>(); _ = builder.Services.AddHttpClient <IHttpClientHelper, HttpClientHelper>(); }
/// <inheritdoc/> public override void Configure(IFunctionsHostBuilder builder) { var configuration = builder?.Services?.BuildServiceProvider()?.GetService <IConfiguration>(); MaxDequeueCount = configuration.GetSection(ConfigConstants.MaxDequeueCountConfigKey); _ = builder.Services.AddAzureAppConfiguration(); ITelemetryInitializer[] itm = new ITelemetryInitializer[1]; var envInitializer = new EnvironmentInitializer { Service = configuration[AIConstants.ServiceConfigName], ServiceLine = configuration[AIConstants.ServiceLineConfigName], ServiceOffering = configuration[AIConstants.ServiceOfferingConfigName], ComponentId = configuration[AIConstants.ComponentIdConfigName], ComponentName = configuration[AIConstants.ComponentNameConfigName], EnvironmentName = configuration[AIConstants.EnvironmentName], IctoId = "IctoId", }; itm[0] = envInitializer; LoggingConfiguration loggingConfiguration = new LoggingConfiguration { IsTraceEnabled = true, TraceLevel = (SeverityLevel)Enum.Parse(typeof(SeverityLevel), configuration[ConfigConstants.AITraceLelelConfigKey]), EnvironmentName = configuration[AIConstants.EnvironmentName], }; var tconfig = TelemetryConfiguration.CreateDefault(); tconfig.InstrumentationKey = configuration[ConfigConstants.AIInsrumentationConfigKey]; DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule(); depModule.Initialize(tconfig); RequestTrackingTelemetryModule requestTrackingTelemetryModule = new RequestTrackingTelemetryModule(); requestTrackingTelemetryModule.Initialize(tconfig); _ = builder.Services.AddSingleton <ILogger>(_ => new AILogger(loggingConfiguration, tconfig, itm)); StorageType storageType = (StorageType)Enum.Parse(typeof(StorageType), configuration?[ConfigConstants.StorageType]); if (storageType == StorageType.DocumentDB) { _ = builder.Services.Configure <CosmosDBSetting>(configuration.GetSection(ConfigConstants.CosmosDBConfigSectionKey)); _ = builder.Services.Configure <CosmosDBSetting>(s => s.Key = configuration[ConfigConstants.CosmosDBKeyConfigKey]); _ = builder.Services.Configure <CosmosDBSetting>(s => s.Uri = configuration[ConfigConstants.CosmosDBURIConfigKey]); _ = builder.Services.AddScoped <ICosmosLinqQuery, CustomCosmosLinqQuery>(); _ = builder.Services.AddSingleton <ICosmosDBQueryClient, CosmosDBQueryClient>(); _ = builder.Services.AddScoped <EmailNotificationRepository>(); _ = builder.Services.AddScoped <IEmailNotificationRepository, EmailNotificationRepository>(s => s.GetService <EmailNotificationRepository>()); } _ = builder.Services.Configure <StorageAccountSetting>(configuration.GetSection(ConfigConstants.StorageAccountConfigSectionKey)); _ = builder.Services.Configure <StorageAccountSetting>(s => s.ConnectionString = configuration[ConfigConstants.StorageAccountConnectionStringConfigKey]); _ = builder.Services.AddScoped <IRepositoryFactory, RepositoryFactory>(); _ = builder.Services.AddScoped <TableStorageEmailRepository>(); _ = builder.Services.AddScoped <IEmailNotificationRepository, TableStorageEmailRepository>(s => s.GetService <TableStorageEmailRepository>()); _ = builder.Services.AddScoped <ITableStorageClient, TableStorageClient>(); _ = builder.Services.AddHttpClient <IHttpClientHelper, HttpClientHelper>(); _ = builder.Services.BuildServiceProvider(); }