예제 #1
0
        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();
        }
예제 #2
0
        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));
            }
        }