public SingleFileMonitorFactory( LogFileStreamReaderFactory streamReaderFactory, LogFileParser logFileParser) { if (streamReaderFactory == null) throw new ArgumentNullException("streamReaderFactory"); if (logFileParser == null) throw new ArgumentNullException("logFileParser"); this.streamReaderFactory = streamReaderFactory; this.logFileParser = logFileParser; }
public SingleFileMonitor( LogFileInfo logFileInfo, LogFileStreamReaderFactory streamReaderFactory, LogFileParser logFileParser) { if (logFileInfo == null) throw new ArgumentNullException("logFileInfo"); if (streamReaderFactory == null) throw new ArgumentNullException("streamReaderFactory"); if (logFileParser == null) throw new ArgumentNullException("logFileParser"); this.logFileInfo = logFileInfo; this.streamReaderFactory = streamReaderFactory; this.logFileParser = logFileParser; fileInfo = new FileInfo(logFileInfo.FullPath); lastFileSize = fileInfo.Length; }
private void ParseMonthlyFile( CharacterMonthlyLogHeuristics heuristicsFileMap, LogFileInfo logFileInfo, List<LogEntry> result, LogFileParser logFileParser) { var heuristics = heuristicsFileMap.GetFullHeuristicsForMonth(logFileInfo); var dayToSearchFrom = GetMinDayToSearchFrom(logSearchParameters.DateFrom, logFileInfo.LogFileDate.DateTime); var dayToSearchTo = GetMaxDayToSearchUpTo(logSearchParameters.DateTo, logFileInfo.LogFileDate.DateTime); LogFileStreamReader reader = null; try { for (int day = dayToSearchFrom; day <= dayToSearchTo; day++) { var thisDayHeuristics = heuristics.GetForDay(day); if (thisDayHeuristics.LinesLength == 0) continue; if (reader == null) { if (heuristics.HasValidFilePositions) { reader = streamReaderFactory.Create( logFileInfo.FullPath, thisDayHeuristics.StartPositionInBytes); } else { reader = streamReaderFactory.CreateWithLineCountFastForward( logFileInfo.FullPath, thisDayHeuristics.TotalLinesSinceBeginFile); } } var thisEntryDate = new DateTime( logFileInfo.LogFileDate.DateTime.Year, logFileInfo.LogFileDate.DateTime.Month, day, 0, 0, 0); int readLinesCount = 0; List<string> allLines = new List<string>(); string currentLine; while ((currentLine = reader.TryReadNextLine()) != null) { allLines.Add(currentLine); readLinesCount++; if (readLinesCount == thisDayHeuristics.LinesLength) { break; } } IEnumerable<LogEntry> parsedLines = logFileParser.ParseLinesForDay(allLines, thisEntryDate, logFileInfo); result.AddRange(parsedLines); cancellationManager.ThrowIfCancelled(); } } finally { if (reader != null) reader.Dispose(); } }
private void ParseDailyFile(LogFileInfo logFileInfo, List<LogEntry> result, LogFileParser logFileParser) { List<string> allLines = new List<string>(); using (var reader = streamReaderFactory.Create(logFileInfo.FullPath)) { string currentLine; while ((currentLine = reader.TryReadNextLine()) != null) { allLines.Add(currentLine); } } IEnumerable<LogEntry> parsedLines = logFileParser.ParseLinesForDay( allLines, logFileInfo.LogFileDate.DateTime, logFileInfo); result.AddRange(parsedLines); }