public LogJournalMonitor(IConfiguration config, IJournalReaderFactory readerFactory, DateTimeOffset?startTime = null) { startTime = startTime ?? DateTimeOffset.MinValue; var folder = config["JournalFolder"]; var logPattern = config["LogPattern"]; _logReaders = new SortedList <DateTimeOffset, LogJournalReader>(); _logFileWatcher = new CustomFileWatcher(folder, logPattern); _logFileWatcher.CreatedFiles.Subscribe(f => { var file = new FileInfo(Path.Combine(folder, f)); var newReader = readerFactory.CreateLogJournalReader(file); // As long as the files has some entries that happened after our desired start time, it's a valid source if (newReader.Context.LastEntry >= startTime) { _logReaders.Add(newReader.Context.HeaderTimestamp, newReader); _journalFileWatch.OnNext(new JournalWatchActivity(JournalWatchAction.Started, file)); } }); _logFileWatcher.DeletedFiles.Subscribe(f => { foreach (var reader in _logReaders.Where(x => x.Value.File.Name.Equals(f))) { _logReaders.Remove(reader.Key); _journalFileWatch.OnNext(new JournalWatchActivity(JournalWatchAction.Stopped, reader.Value.File)); } }); _logFileWatcher.Start(); }
public LiveJournalMonitor(IConfiguration config, IJournalReaderFactory readerFactory) { var folder = config["JournalFolder"]; var liveFilenames = config["LiveFilenames"].Split(';').Select(x => x.Trim()); _liveReaders = new List <LiveJournalReader>(); foreach (var filename in liveFilenames) { var file = new FileInfo(Path.Combine(folder, filename)); var newReader = readerFactory.CreateLiveJournalReader(file); _liveReaders.Add(newReader); _journalFileWatch.OnNext(new JournalWatchActivity(JournalWatchAction.Started, file)); } }