Example #1
0
        /// <summary>
        /// Create the directories parser/handler.
        /// </summary>
        /// <param name="logger"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        private static IDirectory CreateDirectory(interfaces.Logging.ILogger logger, IConfig config)
        {
            var paths = new List <string>(config.Paths.IgnoredPaths);

            paths.AddRange(config.Database?.IgnoredPaths ?? new List <string>());
            return(new Directory(logger, paths));
        }
Example #2
0
        /// <summary>
        /// Create the persister
        /// </summary>
        /// <param name="parsers"></param>
        /// <param name="logger"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        private static IPersister CreatePersister(IList <IFileParser> parsers, interfaces.Logging.ILogger logger, IConfig config)
        {
            if (config.Database is ConfigSqliteDatabase sqlData)
            {
                return(new SqlitePersister(
                           config.Performance,
                           parsers,
                           logger,
                           sqlData,
                           config.MaxNumCharactersPerWords,
                           config.MaxNumCharactersPerParts
                           ));
            }

            throw new ArgumentException("Unknown Database type.");
        }
Example #3
0
        /// <summary>
        /// Start the process as a service or as a console app.
        /// </summary>
        /// <returns></returns>
        private bool StartParserAndProcessor()
        {
            var errorDuringStartup = false;

            try
            {
                System.IO.Directory.SetCurrentDirectory(
                    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? throw new InvalidOperationException()
                    );

                // create the config
                var config = CreateConfig();

                // (re)create the performance counters
                CreatePerformance(config.Performance);

                // and the logger
                _logger = CreateLogger(config.Loggers);

                // we now need to create the files parsers
                var fileParsers = CreateFileParsers <IFileParser>(config.Paths.ComponentsPaths);

                // the persister
                _persister = CreatePersister(fileParsers, _logger, config);

                // the directory parser
                var directory = CreateDirectory(_logger, config);

                // and we can now create and start the parser.
                _parser = new Parser(config, _persister, _logger, directory);

                // create the processor
                _processor = new Processor(fileParsers, config.Processors, config.Timers, config.Maintenance, _parser, _persister, _logger, directory, config.Performance);

                // create the http server
                _http = new HttpServer(config.WebServer, _persister, _logger);

                // create the cancellation source
                _cancellationTokenSource = new CancellationTokenSource();
                var token = _cancellationTokenSource.Token;

                // we can now start everything
                _persister.Start(token);
                _http.Start(token);      //  the http server
                _parser.Start(token);    //  the parser
                _processor.Start(token); //  the processor

                LogStartupComplete(config);
            }
            catch (AggregateException ex)
            {
                errorDuringStartup = true;
                if (null != _logger)
                {
                    _logger.Exception(ex);
                }
                else
                {
                    Console.WriteLine(ex.Message);
                }
            }
            catch (Exception ex)
            {
                errorDuringStartup = true;
                if (null != _logger)
                {
                    _logger.Exception(ex);
                }
                else
                {
                    Console.WriteLine(ex.Message);
                }
            }

            // if there were any errors in startup stop everything.
            if (errorDuringStartup)
            {
                Stop();
            }

            // return if we had an error or not.
            return(!errorDuringStartup);
        }