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); }
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(); }