public void ProcessLine(string line, long lastReadLineStartPosition) { try { if (string.IsNullOrWhiteSpace(line)) { var currentDay = records.Any() ? records.Last().Day : 0; records.Add(new Record(currentDay, lastReadLineStartPosition)); } else if (line.StartsWith("Logging started", StringComparison.Ordinal)) { var lastDay = records.Any() ? records.Last().Day : 0; var dayStamp = ParsingHelper.GetDateFromLogFileLoggingStarted(line); ReadjustPreviousRecords(lastDay, dayStamp); records.Add(new Record(dayStamp.Day, lastReadLineStartPosition)); LastLogLineStamp = TimeSpan.Zero; } else { var currentDay = records.Any() ? records.Last().Day : 0; var lineStamp = ParsingHelper.GetTimestampFromLogLine(line); if (OverflowsToNextDay(lineStamp)) { LastLogLineStamp = TimeSpan.Zero; if (!(OverflowsBeyondToday(currentDay + 1) || OverflowsBeyondMaxMonth(currentDay + 1))) { currentDay++; } } else { LastLogLineStamp = lineStamp; } records.Add(new Record(currentDay, lastReadLineStartPosition)); } } catch (WurmApiException exception) { // this line must be added to records, because lastReadLineStartPosition var currentDay = records.Any() ? records.Last().Day : 0; records.Add(new Record(currentDay, lastReadLineStartPosition)); // ignore this line logger.Log( LogLevel.Warn, string.Format("Unexpected exception while parsing line: {0}", line), this, exception); } }
public void ProcessLine(string line, long lastReadLineStartPosition) { AssertResultNotTaken(); LineCounter++; try { if (line.StartsWith("Logging started", StringComparison.Ordinal)) { var dayStamp = ParsingHelper.GetDateFromLogFileLoggingStarted(line); if (dayStamp.Day > CurrentDay) { CurrentDay = dayStamp.Day; LastLogLineStamp = TimeSpan.Zero; AdvanceDays(line, lastReadLineStartPosition); } else if (firstLoggingStartedFound && dayStamp.Day < CurrentDay) { //seems the logs have invalid timestamps, we need to flag for rollback RollbackHeuristics(dayStamp.Day); } firstLoggingStartedFound = true; } else { var lineStamp = ParsingHelper.GetTimestampFromLogLine(line); if (lineStamp < LastLogLineStamp && ParsingHelper.AreMoreThanOneHourAppartOnSameDay(lineStamp, LastLogLineStamp)) { CurrentDay++; LastLogLineStamp = TimeSpan.Zero; AdvanceDays(line, lastReadLineStartPosition); } else { LastLogLineStamp = lineStamp; } } } catch (WurmApiException exception) { // ignore this line logger.Log( LogLevel.Warn, string.Format("Unexpected exception while parsing line: {0}", line), this, exception); } }