예제 #1
0
        static void Main(string[] args)
        {
            Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();
            var appSettings = configuration.Get <AppSettings>();

            var log = Common.Logging.NLog.NLog.Instace;

            NLog.LogManager.LoadConfiguration("nlog.config");
            var collectorConfiguration      = new CollectorConfiguration(appSettings);
            var logProcessor                = new Postgres.LogProcessor(collectorConfiguration.LogProcessing);
            var logEntryGroupBox            = new Postgres.LogEntryGroupBox();
            var oneFileProcessor            = new FileProcessor(log, collectorConfiguration.LogProcessing, logProcessor, logEntryGroupBox);
            var continuousFileProcessor     = new ContinuousFileProcessor(log, collectorConfiguration.LogProcessing, logProcessor, logEntryGroupBox);
            var logProcessingService        = new LogProcessingService(collectorConfiguration.LogProcessing, oneFileProcessor, continuousFileProcessor);
            var logEntriesProcessingQueue   = new CommandProcessingQueue <IExecutableCommand>(log, "LogEntriesProcessingQueue");
            var statisticsProcessingQueue   = new CommandProcessingQueue <IExecutableCommand>(log, "StatisticsProcessingQueue");
            var dateTimeSelectors           = DateTimeSelectorsProvider.Instance;
            var statementDataAccumulator    = new StatementsProcessingDataAccumulator(dateTimeSelectors.MinuteSelector);
            var statisticsDataAccumulator   = new StatisticsProcessingDataAccumulator(dateTimeSelectors.MinuteSelector, CacheProvider.Instance.MemoryCache);
            var postgresRepositories        = DBMS.Postgres.RepositoriesFactory.Instance;
            var dalRepositories             = RepositoriesFactory.Instance;
            var lastProcessedEvidence       = new LastProcessedLogEntryEvidence(log, dalRepositories.GetSettingPropertiesRepository());
            var dependencyHierarchyProvider = new DatabaseDependencyHierarchyProvider(log, new Postgres.DatabaseDependencyHierarchyBuilder(log, postgresRepositories), postgresRepositories.GetDatabasesRepository());
            var generalCommands             = new GeneralProcessingCommandFactory(log, collectorConfiguration, statementDataAccumulator, postgresRepositories,
                                                                                  dalRepositories, lastProcessedEvidence);
            var externalCommands               = new Postgres.LogEntryProcessingCommandFactory(postgresRepositories);
            var statisticsCommands             = new StatisticsProcessingCommandFactory(log, statisticsProcessingQueue, statisticsDataAccumulator, postgresRepositories, dalRepositories, dependencyHierarchyProvider);
            var logEntryProcessingChainFactory = new LogEntryProcessingChainFactory(log, generalCommands, statisticsCommands, externalCommands, dalRepositories);
            var statisticsChainFactory         = new StatisticsProcessingChainFactory(statisticsCommands);
            var logEntryProcessingService      = new LogEntryProcessingService(logEntryGroupBox, logEntriesProcessingQueue, logEntryProcessingChainFactory, lastProcessedEvidence);
            var statisticsCollectorService     = new StatisticsCollectorService(statisticsProcessingQueue, statisticsChainFactory);

            var mergeStatisticsCommands     = new MergeStatisticsCommandFactory(dalRepositories);
            var mergeStatisticsChainFactory = new MergeStatisticsChainFactory(mergeStatisticsCommands);
            var regularTasks  = PlanRegularTasks(mergeStatisticsChainFactory, dateTimeSelectors);
            var taskScheduler = new RegularTaskScheduler(statisticsProcessingQueue, regularTasks);

            statisticsCollectorService.Start();
            logProcessingService.Start();
            logEntryProcessingService.Start();
            taskScheduler.Start();
            Console.WriteLine("Collector is running. Press any key to exit...");
            Console.ReadLine();
            dependencyHierarchyProvider.Dispose();
            taskScheduler.Dispose();
            logProcessingService.Dispose();
            continuousFileProcessor.Dispose();
            logEntryGroupBox.Dispose();
            logEntryProcessingService.Dispose();
            statisticsCollectorService.Dispose();
            logEntriesProcessingQueue.Dispose();
            statisticsProcessingQueue.Dispose();
        }
예제 #2
0
        static void Main(string[] args)
        {
            var log              = Common.Logging.NLog.NLog.Instace;
            var queue            = new CommandProcessingQueue <IExecutableCommand>(log, "ProcessingQueue");
            var dalRepositories  = DAL.RepositoriesFactory.Instance;
            var dbmsRepositories = DBMS.Postgres.RepositoriesFactory.Instance;
            var razorEngine      = new RazorEngine();
            var commands         = new CommandFactory(log, dalRepositories, dbmsRepositories, razorEngine);
            var chains           = new CommandChainFactory(commands);
            var regularTasks     = PlanRegularTasks(chains);
            var taskScheduler    = new RegularTaskScheduler(queue, regularTasks);

            taskScheduler.Start();
            Console.WriteLine("ReportingService is running. Type in S to immediately send current report. Type in any other key to exit...");
            bool canQuit = false;

            do
            {
                var line = (Console.ReadLine() ?? "").ToLower();
                if (line == "s")
                {
                    DateTime now     = DateTime.Now;
                    var      context = new ReportContextWithModel <SummaryEmailModel>();
                    context.DateFromInclusive = now.AddDays(-1);
                    context.DateToExclusive   = now;
                    context.TemplateId        = DAL.Contracts.SettingPropertyKeys.EMAIL_TEMPLATE_SUMMARY_REPORT;
                    try
                    {
                        chains.SummaryReportChain(context).Execute();
                        Console.WriteLine("Current report sent.");
                    }
                    catch (Exception ex)
                    {
                        Console.Write(ex);
                    }
                    canQuit = false;
                }
                else
                {
                    canQuit = true;
                }
            } while (!canQuit);
            taskScheduler.Stop();
            taskScheduler.Dispose();
            queue.Dispose();
            razorEngine.Dispose();
        }