public static void Main(string[] args)
        {
            var configBuilder = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile(ConfigFile);

            IConfiguration configuration = configBuilder.Build();

            IJobStatusWebServiceCallServiceConfig auditingPersistenceServiceConfig = new JobStatusWebServiceCallServiceConfig(configuration["jobSchedulerApiEndPoint"]);
            IQueueConfiguration        queueConfiguration              = new JobStatusQueueConfiguration(configuration["queueConnectionString"], configuration["queueName"], 1);
            ISerializationService      serializationService            = new JsonSerializationService();
            IApplicationLoggerSettings applicationLoggerOutputSettings = new ApplicationLoggerSettings
            {
                ApplicationLoggerOutputSettingsCollection = new List <IApplicationLoggerOutputSettings>
                {
                    new MsSqlServerApplicationLoggerOutputSettings
                    {
                        ConnectionString = configuration["logConnectionString"],
                        MinimumLogLevel  = LogLevel.Information
                    },
                    new ConsoleApplicationLoggerOutputSettings
                    {
                        MinimumLogLevel = LogLevel.Information
                    }
                },
                TaskKey            = "Job Fail Status",
                EnableInternalLogs = true,
                JobId           = "Job Fail Status Service",
                MinimumLogLevel = LogLevel.Information
            };
            IExecutionContext executionContext = new ExecutionContext
            {
                JobId   = "Job Fail Status Service",
                TaskKey = "Job Fail Status"
            };
            ILogger           logger           = new SeriLogger(applicationLoggerOutputSettings, executionContext);
            IDateTimeProvider dateTimeProvider = new DateTimeProvider.DateTimeProvider();
            IQueueSubscriptionService <JobContextDto>       queueSubscriptionService        = new QueueSubscriptionService <JobContextDto>(queueConfiguration, serializationService, logger);
            IJobStatusWebServiceCallService <JobContextDto> failedJobsWebServiceCallService = new FailedJobsWebServiceCallService(auditingPersistenceServiceConfig, queueSubscriptionService, serializationService, logger);

            failedJobsWebServiceCallService.Subscribe();

            logger.LogInfo($"Started {executionContext.JobId}!");

            ManualResetEvent oSignalEvent = new ManualResetEvent(false);

            oSignalEvent.WaitOne();
        }
        public static void Main(string[] args)
        {
            var configBuilder = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile(ConfigFile);

            IConfiguration configuration = configBuilder.Build();

            IAuditingPersistenceServiceConfig auditingPersistenceServiceConfig = new AudtingPersistenceServiceConfig(configuration["auditConnectionString"]);
            IQueueConfiguration        queueConfiguration              = new AuditQueueConfiguration(configuration["queueConnectionString"], configuration["queueName"], 1);
            ISerializationService      serializationService            = new JsonSerializationService();
            IApplicationLoggerSettings applicationLoggerOutputSettings = new ApplicationLoggerSettings
            {
                ApplicationLoggerOutputSettingsCollection = new List <IApplicationLoggerOutputSettings>
                {
                    new MsSqlServerApplicationLoggerOutputSettings
                    {
                        ConnectionString = configuration["logConnectionString"],
                        MinimumLogLevel  = LogLevel.Information
                    },
                    new ConsoleApplicationLoggerOutputSettings
                    {
                        MinimumLogLevel = LogLevel.Information
                    }
                },
                TaskKey            = "Audit",
                EnableInternalLogs = true,
                JobId           = "Audit Service",
                MinimumLogLevel = LogLevel.Information
            };
            IExecutionContext executionContext = new ExecutionContext
            {
                JobId   = "Audit Service",
                TaskKey = "Audit"
            };
            ILogger logger = new SeriLogger(applicationLoggerOutputSettings, executionContext);
            IQueueSubscriptionService <AuditingDto>   queueSubscriptionService   = new QueueSubscriptionService <AuditingDto>(queueConfiguration, serializationService, logger);
            IAuditingPersistenceService <AuditingDto> auditingPersistenceService = new AuditingPersistenceService <AuditingDto>(auditingPersistenceServiceConfig, queueSubscriptionService, logger);

            auditingPersistenceService.Subscribe();

            logger.LogInfo("Started!");

            ManualResetEvent oSignalEvent = new ManualResetEvent(false);

            oSignalEvent.WaitOne();
        }
        private static ContainerBuilder BuildContainer()
        {
            Console.WriteLine($"BuildContainer:1");
            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterModule <PreValidationServiceModule>();

            Console.WriteLine($"BuildContainer:2");
            // get ServiceBus, Azurestorage config values and register container
            var configHelper      = new ConfigurationHelper();
            var serviceBusOptions =
                configHelper.GetSectionValues <ServiceBusOptions>("ServiceBusSettings");

            containerBuilder.RegisterInstance(serviceBusOptions).As <ServiceBusOptions>().SingleInstance();

            Console.WriteLine($"BuildContainer:3");
            var azureStorageOptions =
                configHelper.GetSectionValues <AzureStorageModel>("AzureStorageSection");

            containerBuilder.RegisterInstance(azureStorageOptions).As <AzureStorageModel>().SingleInstance();
            containerBuilder.RegisterInstance(azureStorageOptions).As <IAzureStorageKeyValuePersistenceServiceConfig>().SingleInstance();

            Console.WriteLine($"BuildContainer:4");
            // register logger
            var loggerOptions =
                configHelper.GetSectionValues <LoggerOptions>("LoggerSection");

            containerBuilder.RegisterInstance(loggerOptions).As <LoggerOptions>().SingleInstance();
            containerBuilder.RegisterModule <LoggerModule>();

            Console.WriteLine($"BuildContainer:5");
            var azureRedisCacheOptions = configHelper.GetSectionValues <AzureRedisCacheOptions>("AzureRedisSection");

            containerBuilder.Register(c => new RedisKeyValuePersistenceServiceConfig()
            {
                ConnectionString = azureRedisCacheOptions.RedisCacheConnectionString,
                KeyExpiry        = new TimeSpan(14, 0, 0, 0)
            }).As <IRedisKeyValuePersistenceServiceConfig>().SingleInstance();
            containerBuilder.RegisterType <RedisKeyValuePersistenceService>()
            .Keyed <IKeyValuePersistenceService>(PersistenceStorageKeys.Redis)
            .As <IKeyValuePersistenceService>()
            .InstancePerLifetimeScope();
            containerBuilder.RegisterType <AzureStorageKeyValuePersistenceService>()
            .Keyed <IKeyValuePersistenceService>(PersistenceStorageKeys.AzureStorage)
            .As <IKeyValuePersistenceService>()
            .As <IStreamableKeyValuePersistenceService>()
            .InstancePerLifetimeScope();

            Console.WriteLine($"BuildContainer:6");
            // service bus queue configuration
            var queueSubscriptionConfig = new ServiceBusQueueConfig(
                serviceBusOptions.ServiceBusConnectionString,
                serviceBusOptions.JobsQueueName,
                Environment.ProcessorCount);

            Console.WriteLine($"BuildContainer:7");
            var topicPublishConfig = new ServiceBusTopicConfiguration(
                serviceBusOptions.ServiceBusConnectionString,
                serviceBusOptions.TopicName,
                serviceBusOptions.FundingCalcSubscriptionName,
                Environment.ProcessorCount);

            Console.WriteLine($"BuildContainer:8");
            var auditPublishConfig = new ServiceBusQueueConfig(
                serviceBusOptions.ServiceBusConnectionString,
                serviceBusOptions.AuditQueueName,
                Environment.ProcessorCount);

            Console.WriteLine($"BuildContainer:9");
            // register queue services
            containerBuilder.Register(c =>
            {
                var queueSubscriptionService =
                    new QueueSubscriptionService <JobContextDto>(
                        queueSubscriptionConfig,
                        c.Resolve <IJsonSerializationService>(),
                        c.Resolve <ILogger>());
                return(queueSubscriptionService);
            }).As <IQueueSubscriptionService <JobContextDto> >();

            Console.WriteLine($"BuildContainer:10");
            containerBuilder.Register(c =>
            {
                var topicPublishService =
                    new TopicPublishService <JobContextDto>(
                        topicPublishConfig,
                        c.Resolve <IJsonSerializationService>());
                return(topicPublishService);
            }).As <ITopicPublishService <JobContextDto> >();

            Console.WriteLine($"BuildContainer:11");
            containerBuilder.Register(c => new QueuePublishService <AuditingDto>(
                                          auditPublishConfig,
                                          c.Resolve <IJsonSerializationService>()))
            .As <IQueuePublishService <AuditingDto> >();

            Console.WriteLine($"BuildContainer:12");
            // Job Status Update Service
            var jobStatusPublishConfig = new JobStatusQueueConfig(
                serviceBusOptions.ServiceBusConnectionString,
                serviceBusOptions.JobStatusQueueName,
                Environment.ProcessorCount);

            Console.WriteLine($"BuildContainer:13");
            containerBuilder.Register(c => new QueuePublishService <JobStatusDto>(
                                          jobStatusPublishConfig,
                                          c.Resolve <IJsonSerializationService>()))
            .As <IQueuePublishService <JobStatusDto> >();
            containerBuilder.RegisterType <JobStatus.JobStatus>().As <IJobStatus>();

            Console.WriteLine($"BuildContainer:14");
            // register job context manager
            containerBuilder.RegisterType <Auditor>().As <IAuditor>();
            containerBuilder.RegisterType <JobContextMessageMapper>()
            .As <IMapper <JobContextMessage, JobContextMessage> >();

            Console.WriteLine($"BuildContainer:15");
            // register Job Status
            containerBuilder.Register(c => new JobStatus.JobStatus(
                                          c.Resolve <IQueuePublishService <JobStatusDto> >()))
            .As <IJobStatus>();

            Console.WriteLine($"BuildContainer:16");
            containerBuilder.RegisterType <MessageHandler>().As <IMessageHandler>();

            Console.WriteLine($"BuildContainer:17");
            // register the  callback handle when a new message is received from ServiceBus
            containerBuilder.Register <Func <JobContextMessage, CancellationToken, Task <bool> > >(c => c.Resolve <IMessageHandler>().Handle);

            containerBuilder.RegisterType <JobContextManagerForQueue <JobContextMessage> >().As <IJobContextManager <JobContextMessage> >()
            .InstancePerLifetimeScope();

            Console.WriteLine($"BuildContainer:19");
            containerBuilder.RegisterType <JobContextMessage>().As <IJobContextMessage>()
            .InstancePerLifetimeScope();

            Console.WriteLine($"BuildContainer:20");

            return(containerBuilder);
        }
Beispiel #4
0
        public static void Main(string[] args)
        {
            var configBuilder = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile(ConfigFile);

            configuration    = configBuilder.Build();
            failJobFrequency = GetConfigItemAsInt(configuration, "numberOfMinutesCheckFail", 60);
            jobAgeToFail     = GetConfigItemAsInt(configuration, "numberOfMinutesBeforeFail", 240);

            IQueueConfiguration queueConfiguration  = new QueueConfiguration(configuration["queueConnectionString"], configuration["queueName"], 1);
            WebApiConfiguration webApiConfiguration = new WebApiConfiguration(configuration["jobSchedulerApiEndPoint"]);

            availableStreamers   = new Dictionary <string, IStreamableKeyValuePersistenceService>();
            mergeZipFilesService = new MergeZipFilesService();
            ISerializationService      serializationService            = new JsonSerializationService();
            IDateTimeProvider          dateTimeProvider                = new DateTimeProvider();
            IApplicationLoggerSettings applicationLoggerOutputSettings = new ApplicationLoggerSettings
            {
                ApplicationLoggerOutputSettingsCollection = new List <IApplicationLoggerOutputSettings>
                {
                    new MsSqlServerApplicationLoggerOutputSettings
                    {
                        ConnectionString = configuration["logConnectionString"],
                        MinimumLogLevel  = LogLevel.Debug
                    },
                    new ConsoleApplicationLoggerOutputSettings
                    {
                        MinimumLogLevel = LogLevel.Debug
                    }
                },
                TaskKey            = "Cross Loader",
                EnableInternalLogs = true,
                JobId           = "Cross Loader Service",
                MinimumLogLevel = LogLevel.Debug
            };
            IExecutionContext executionContext = new ExecutionContext
            {
                JobId   = "Cross Loader Service",
                TaskKey = "Cross Loader"
            };

            logger = new SeriLogger(applicationLoggerOutputSettings, executionContext);

            DbContextOptionsBuilder optionsBuilder = new DbContextOptionsBuilder();

            optionsBuilder.UseSqlServer(
                configuration["jobQueueManagerConnectionString"],
                options => options.EnableRetryOnFailure(3, TimeSpan.FromSeconds(3), new List <int>()));

            crossLoadStatusService    = new CrossLoadStatusService(webApiConfiguration, logger);
            crossLoadActiveJobService = new CrossLoadActiveJobService(optionsBuilder.Options, dateTimeProvider, jobAgeToFail);

            IQueueSubscriptionService <MessageCrossLoadDcftToDctDto> queueSubscriptionService = new QueueSubscriptionService <MessageCrossLoadDcftToDctDto>(queueConfiguration, serializationService, logger);

            logger.LogInfo("Cross Loader service subscribing to queue");
            queueSubscriptionService.Subscribe(Callback, CancellationToken.None);

            logger.LogInfo("Cross Loader service initialising crashed jobs timer");
            timer = new Timer(FindCrashedJobs, null, TimeSpan.FromSeconds(10), TimeSpan.FromMilliseconds(Timeout.Infinite));

            logger.LogInfo("Started Cross Loader Service!");

            ManualResetEvent oSignalEvent = new ManualResetEvent(false);

            oSignalEvent.WaitOne();
        }