public long ReadFileInReverseOrder(string fileName, long offSet, LogParserParameters parameters, LogResponse response) { ReverseLineReader reader = new ReverseLineReader(fileName, offSet); long i = 0; long lastOffset = 0; var lastLine = ""; foreach (var line in reader) { DateTime date = GetDateFromLog(line, parameters); i += line.Length; lastLine += line; if ((date != new DateTime() && date <= parameters.StartTime)) { return(reader.OffSet - line.Length); } } response.DataScanned += i; return(0); }
public void ReadFileInOrder(long offSet, LogParserParameters parameters, Dictionary <string, LogMetrics> logMetricsList, LogResponse response) { string fileName = response.LogFile; double timeSpanInMinutes = parameters.EndTime.Subtract(parameters.StartTime).TotalMinutes; bool includeLogs = (timeSpanInMinutes <= 10 && timeSpanInMinutes > 0); long i = 0; using (Stream stream = File.Open(fileName, FileMode.Open)) { stream.Seek(offSet, SeekOrigin.Begin); using (StreamReader reader = new StreamReader(stream)) { string prevLine = ""; bool first = true; var prevDate = new DateTime(); var logDate = new DateTime(); while (!reader.EndOfStream) { string line = reader.ReadLine(); i += line.Length; logDate = GetDateFromLog(line, parameters); if (logDate != new DateTime()) { if (!string.IsNullOrEmpty(prevLine)) { AddLogsToResponse(prevDate, prevLine, includeLogs, parameters, logMetricsList, response); prevLine = line; } if (first) { prevLine = line; first = false; } prevDate = logDate; } else { if (!first) { prevLine = prevLine + Environment.NewLine + line; } ; } if ((logDate != new DateTime() && logDate > parameters.EndTime)) { break; } } //reached the end of the file try last line AddLogsToResponse(prevDate, prevLine, includeLogs, parameters, logMetricsList, response); } } response.DataScanned += i; }
private void AddLogsToResponse(DateTime prevDate, string prevLine, bool includeLogs, LogParserParameters parameters, Dictionary <string, LogMetrics> logMetricsList, LogResponse response) { var dateLessExceptionStr = RemoveDateFromLog(prevLine).Trim(); if (prevDate >= parameters.StartTime && prevDate <= parameters.EndTime) { GetMetricFromLine(prevDate, dateLessExceptionStr, parameters, logMetricsList); if (!response.ExceptionCount.ContainsKey(dateLessExceptionStr)) { response.ExceptionCount.Add(dateLessExceptionStr, 0); } response.ExceptionCount[dateLessExceptionStr] += 1; if (includeLogs) { response.LinkedLogs.AddLast(prevLine); } } }