/// <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)); }
/// <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."); }
/// <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); }