Beispiel #1
0
        public override void Init(IServiceContainer serviceContainer, IDictionary <string, string> jobArgsDictionary)
        {
            base.Init(serviceContainer, jobArgsDictionary);

            InitializationConfiguration = _serviceProvider.GetRequiredService <IOptionsSnapshot <InitializationConfiguration> >().Value;

            var serializer  = new ServiceBusMessageSerializer();
            var topicClient = new TopicClientWrapper(InitializationConfiguration.EmailPublisherConnectionString, InitializationConfiguration.EmailPublisherTopicName);
            var enqueuer    = new EmailMessageEnqueuer(topicClient, serializer, LoggerFactory.CreateLogger <EmailMessageEnqueuer>());

            EmailService = new AsynchronousEmailMessageService(
                enqueuer,
                LoggerFactory.CreateLogger <AsynchronousEmailMessageService>(),
                InitializationConfiguration);

            FromAddress = new MailAddress(InitializationConfiguration.MailFrom);

            var storageAccount = CloudStorageAccount.Parse(InitializationConfiguration.DataStorageAccount);
            var storageFactory = new AzureStorageFactory(
                storageAccount,
                InitializationConfiguration.ContainerName,
                LoggerFactory.CreateLogger <AzureStorage>());

            Storage = storageFactory.Create();
        }
        private ITopicClientWrapper InstantiateTopic(TopicConfiguration config, IVeStatsDClient statsDClient, string topicId)
        {
            _creator.SetTopic(config.ConnectionString, config.TopicName, config.Update);
            var messagingFactory = GetMessagingFactory(config.ConnectionString, config.BatchFlushInterval);
            var client           = messagingFactory.CreateTopicClient(config.TopicName);
            var topic            = new TopicClientWrapper(client, statsDClient);

            _topics.Add(topicId, topic);
            return(topic);
        }
        protected override void ConfigureDefaultAutofacServices(ContainerBuilder containerBuilder, IConfigurationRoot configurationRoot)
        {
            base.ConfigureDefaultAutofacServices(containerBuilder, configurationRoot);

            ConfigureFeatureFlagAutofacServices(containerBuilder);

            containerBuilder
            .Register(c =>
            {
                var serviceBusConfiguration = c.Resolve <IOptionsSnapshot <PackageValidationServiceBusConfiguration> >();
                var topicClient             = new TopicClientWrapper(serviceBusConfiguration.Value.ConnectionString, serviceBusConfiguration.Value.TopicPath);
                return(topicClient);
            })
            .Keyed <TopicClientWrapper>(PackageValidationServiceBusBindingKey);

            containerBuilder
            .RegisterType <PackageValidationEnqueuer>()
            .WithParameter(new ResolvedParameter(
                               (pi, ctx) => pi.ParameterType == typeof(ITopicClient),
                               (pi, ctx) => ctx.ResolveKeyed <TopicClientWrapper>(PackageValidationServiceBusBindingKey)))
            .As <IPackageValidationEnqueuer>();
        }
Beispiel #4
0
        protected override void ConfigureAutofacServices(ContainerBuilder containerBuilder, IConfigurationRoot configurationRoot)
        {
            containerBuilder
            .Register(c =>
            {
                var serviceBusConfiguration = c.Resolve <IOptionsSnapshot <ServiceBusConfiguration> >();
                var topicClient             = new TopicClientWrapper(serviceBusConfiguration.Value.ConnectionString, serviceBusConfiguration.Value.TopicPath);
                return(topicClient);
            })
            .Keyed <TopicClientWrapper>(PackageVerificationTopicClientBindingKey);

            containerBuilder
            .RegisterType <ProcessSignatureEnqueuer>()
            .WithParameter(new ResolvedParameter(
                               (pi, ctx) => pi.ParameterType == typeof(ITopicClient),
                               (pi, ctx) => ctx.ResolveKeyed <TopicClientWrapper>(PackageVerificationTopicClientBindingKey)))
            .WithParameter(new ResolvedParameter(
                               (pi, ctx) => pi.ParameterType == typeof(IBrokeredMessageSerializer <SignatureValidationMessage>),
                               (pi, ctx) => ctx.Resolve <SignatureValidationMessageSerializer>()))
            .As <IProcessSignatureEnqueuer>();

            containerBuilder
            .RegisterType <ScopedMessageHandler <PackageValidationMessageData> >()
            .Keyed <IMessageHandler <PackageValidationMessageData> >(OrchestratorBindingKey);

            containerBuilder
            .RegisterTypeWithKeyedParameter <
                ISubscriptionProcessor <PackageValidationMessageData>,
                SubscriptionProcessor <PackageValidationMessageData>,
                IMessageHandler <PackageValidationMessageData> >(
                OrchestratorBindingKey);

            // Configure the email enqueuer.
            containerBuilder
            .Register(c =>
            {
                var configuration = c.Resolve <IOptionsSnapshot <EmailConfiguration> >().Value.ServiceBus;
                return(new TopicClientWrapper(configuration.ConnectionString, configuration.TopicPath));
            })
            .Keyed <ITopicClient>(EmailBindingKey);

            containerBuilder
            .RegisterTypeWithKeyedParameter <
                IEmailMessageEnqueuer,
                EmailMessageEnqueuer,
                ITopicClient>(
                EmailBindingKey);

            // Configure Validators
            var validatingType = configurationRoot
                                 .GetSection(RunnerConfigurationSectionName)
                                 .GetValue(nameof(OrchestrationRunnerConfiguration.ValidatingType), ValidatingType.Package);

            switch (validatingType)
            {
            case ValidatingType.Package:
                ConfigurePackageSigningValidators(containerBuilder);
                ConfigurePackageCertificatesValidator(containerBuilder);
                ConfigureScanAndSignProcessor(containerBuilder);
                ConfigureFlatContainer(containerBuilder);
                break;

            case ValidatingType.SymbolPackage:
                ConfigureSymbolScanValidator(containerBuilder);
                ConfigureSymbolsValidator(containerBuilder);
                ConfigureSymbolsIngester(containerBuilder);
                break;

            default:
                throw new NotImplementedException($"Unknown type: {validatingType}");
            }

            ValidationJobBase.ConfigureFeatureFlagAutofacServices(containerBuilder);
            ConfigureLeaseService(containerBuilder);
        }
Beispiel #5
0
        private static IServiceProvider CreateProvider(IServiceCollection services)
        {
            var containerBuilder = new ContainerBuilder();

            containerBuilder.Populate(services);

            /// Initialize dependencies for the <see cref="VcsValidator"/>. There is some additional complexity here
            /// because the implementations require ambiguous types (such as a <see cref="string"/> and a
            /// <see cref="CloudStorageAccount"/> which there may be more than one configuration of).
            containerBuilder
            .Register(c =>
            {
                var vcsConfiguration    = c.Resolve <IOptionsSnapshot <VcsConfiguration> >();
                var cloudStorageAccount = CloudStorageAccount.Parse(vcsConfiguration.Value.DataStorageAccount);
                return(cloudStorageAccount);
            })
            .Keyed <CloudStorageAccount>(VcsBindingKey);
            containerBuilder
            .Register(c =>
            {
                var serviceBusConfiguration = c.Resolve <IOptionsSnapshot <ServiceBusConfiguration> >();
                var topicClient             = new TopicClientWrapper(serviceBusConfiguration.Value.ConnectionString, serviceBusConfiguration.Value.TopicPath);
                return(topicClient);
            })
            .Keyed <TopicClientWrapper>(PackageVerificationTopicClientBindingKey);

            containerBuilder
            .RegisterType <PackageValidationService>()
            .WithKeyedParameter(typeof(CloudStorageAccount), VcsBindingKey)
            .WithParameter(new ResolvedParameter(
                               (pi, ctx) => pi.ParameterType == typeof(string),
                               (pi, ctx) => ctx.Resolve <IOptionsSnapshot <VcsConfiguration> >().Value.ContainerName))
            .As <IPackageValidationService>();

            containerBuilder
            .RegisterType <PackageValidationAuditor>()
            .WithKeyedParameter(typeof(CloudStorageAccount), VcsBindingKey)
            .WithParameter(new ResolvedParameter(
                               (pi, ctx) => pi.ParameterType == typeof(string),
                               (pi, ctx) => ctx.Resolve <IOptionsSnapshot <VcsConfiguration> >().Value.ContainerName))
            .As <IPackageValidationAuditor>();

            containerBuilder
            .RegisterType <ProcessSignatureEnqueuer>()
            .WithParameter(new ResolvedParameter(
                               (pi, ctx) => pi.ParameterType == typeof(ITopicClient),
                               (pi, ctx) => ctx.ResolveKeyed <TopicClientWrapper>(PackageVerificationTopicClientBindingKey)))
            .WithParameter(new ResolvedParameter(
                               (pi, ctx) => pi.ParameterType == typeof(IBrokeredMessageSerializer <SignatureValidationMessage>),
                               (pi, ctx) => ctx.Resolve <SignatureValidationMessageSerializer>()
                               ))
            .As <IProcessSignatureEnqueuer>();

            containerBuilder
            .RegisterType <ScopedMessageHandler <PackageValidationMessageData> >()
            .Keyed <IMessageHandler <PackageValidationMessageData> >(OrchestratorBindingKey);

            containerBuilder
            .RegisterTypeWithKeyedParameter <
                ISubscriptionProcessor <PackageValidationMessageData>,
                SubscriptionProcessor <PackageValidationMessageData>,
                IMessageHandler <PackageValidationMessageData> >(
                OrchestratorBindingKey);

            ConfigurePackageSigningValidator(containerBuilder);
            ConfigurePackageCertificatesValidator(containerBuilder);

            return(new AutofacServiceProvider(containerBuilder.Build()));
        }
        protected SupportRequestsNotificationScheduledTask(
            InitializationConfiguration configuration,
            Func <Task <SqlConnection> > openSupportRequestSqlConnectionAsync,
            ILoggerFactory loggerFactory)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }

            var serializer     = new ServiceBusMessageSerializer();
            var topicClient    = new TopicClientWrapper(configuration.EmailPublisherConnectionString, configuration.EmailPublisherTopicName);
            var enqueuer       = new EmailMessageEnqueuer(topicClient, serializer, loggerFactory.CreateLogger <EmailMessageEnqueuer>());
            var messageService = new AsynchronousEmailMessageService(
                enqueuer,
                loggerFactory.CreateLogger <AsynchronousEmailMessageService>(),
                configuration);

            _messagingService = new MessagingService(messageService, loggerFactory.CreateLogger <MessagingService>());

            _supportRequestRepository = new SupportRequestRepository(loggerFactory, openSupportRequestSqlConnectionAsync);
        }