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());
        }
示例#3
0
        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);
            }
        }
示例#6
0
        /// <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));
        }
示例#7
0
        /// <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));
        }
示例#8
0
        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);
 }
示例#10
0
        /// <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>();
        }
示例#11
0
        /// <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>();
        }
示例#12
0
        /// <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();
        }