示例#1
0
        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);
        }
示例#2
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;
        }
示例#3
0
        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);
                }
            }
        }