use of com.emc.storageos.systemservices.impl.logsvc.LogMessage in project coprhd-controller by CoprHD.
the class LogReader method readNextLogMessage.
/**
* Read one log message from log file
*
* @return
* @throws IOException
*/
@Override
public LogMessage readNextLogMessage() {
// logger.info("readMessage()");
try {
if (reader == null) {
return null;
}
while (true) {
String line = reader.readLine();
if (line == null) {
close();
if (currentLog != null && matchRegex(currentLog)) {
incrementLogCount(currentLog);
return currentLog;
}
return null;
}
fileLineNumber++;
LogMessage nextLog = null;
if (parser != null) {
// already find the match parser
nextLog = parser.parseLine(line, request);
} else {
// match parser
for (LogParser parser : parserTable) {
nextLog = parser.parseLine(line, request);
if (!nextLog.isContinuation()) {
this.parser = parser;
break;
}
}
// this line does not match all parsers, skip it and write it into status
if (nextLog == null || nextLog.isContinuation()) {
status.appendInfo(this.filePath, fileLineNumber);
continue;
}
}
if (nextLog.isContinuation()) {
if (currentLog != null) {
currentLog.appendMessage(LogUtil.stringToBytes(line));
}
} else if (nextLog.isRejected()) {
// logs are only rejected in the first line
if (currentLog != null) {
LogMessage returnedLog = currentLog;
currentLog = null;
if (matchRegex(returnedLog)) {
incrementLogCount(returnedLog);
return returnedLog;
}
// else read the next line
}
} else if (nextLog.isRejectedLast()) {
// log is too late
if (currentLog != null) {
LogMessage returnedLog = currentLog;
currentLog = null;
if (matchRegex(returnedLog)) {
incrementLogCount(returnedLog);
return returnedLog;
}
// else break from the loop
}
break;
} else {
// accepted as the first line of a new log message
if (currentLog != null) {
LogMessage returnedLog = currentLog;
currentLog = nextLog;
// skip all but the last one
if (returnedLog.isHeader() && currentLog.isHeader()) {
continue;
}
if (matchRegex(returnedLog)) {
incrementLogCount(returnedLog);
return returnedLog;
}
// else read the next line
} else {
currentLog = nextLog;
}
}
}
} catch (IOException e) {
status.appendErrFileName(filePath);
}
return null;
}
use of com.emc.storageos.systemservices.impl.logsvc.LogMessage in project coprhd-controller by CoprHD.
the class ParserTest method testNginxAccessLog.
@Test
public void testNginxAccessLog() throws Exception {
LogReader reader = null;
String regexStr = ".*login HTTP.*";
Calendar calendar = Calendar.getInstance();
calendar.set(2014, 1, 20, 16, 38, 16);
Date startTimeFilter = calendar.getTime();
calendar.set(2014, 6, 16, 16, 38, 0);
Date endTimeFilter = calendar.getTime();
LogRequest request = new LogRequest.Builder().regex(regexStr).startTime(startTimeFilter).endTime(endTimeFilter).build();
LogStatusInfo status = new LogStatusInfo();
// "/opt/storageos/logs/nginx_access.log";
String filePath = nginxAccessLogPath;
String baseName = "nginx";
reader = new LogReader(filePath, request, status, baseName);
final LogMessage log = reader.readNextLogMessage();
assertTrue("log is null", log != null);
assertTrue("log message is null", !new String(log.getLogContent()).equals("null"));
assertTrue("log message does not match regex", Pattern.compile(regexStr, Pattern.DOTALL | Pattern.MULTILINE).matcher(LogUtil.bytesToString(log.getLogContent())).matches());
assertTrue("log time does not fit time filter", log.getTime() >= startTimeFilter.getTime() && log.getTime() <= endTimeFilter.getTime());
assertTrue("log file name is not null", new String(log.getFileName()).equals("null"));
assertTrue("log thread name not is null", new String(log.getThreadName()).equals("null"));
assertTrue("log level is not null", new String(log.getLevel()).equals("null"));
assertTrue("log line is not -1", new String(log.getLineNumber()).equals("-1"));
}
use of com.emc.storageos.systemservices.impl.logsvc.LogMessage in project coprhd-controller by CoprHD.
the class ParserTest method testParticularLog.
@Test
public void testParticularLog() throws Exception {
LogReader reader = null;
LogRequest request = new LogRequest.Builder().build();
LogStatusInfo status = new LogStatusInfo();
String filePath = particularLogPath;
String baseName = "log";
reader = new LogReader(filePath, request, status, baseName);
final LogMessage log = reader.readNextLogMessage();
assertTrue("log is null", log != null);
// assertTrue("log message is null", log.getLogContent() != null);
assertTrue("log message is null", log.getLogContent() != null);
assertTrue("log file name is null", log.getFileName() != null);
assertTrue("log thread name is null", log.getThreadName() != null);
assertTrue("log level is not Error", new String(log.getLevel()).equals("ERROR"));
assertTrue("log line is null", log.getLineNumber() != null);
}
use of com.emc.storageos.systemservices.impl.logsvc.LogMessage in project coprhd-controller by CoprHD.
the class ParserTest method testNginxErrorLog.
@Test
public void testNginxErrorLog() throws Exception {
LogReader reader = null;
String regexStr = ".*server: localhost, request:.*";
Calendar calendar = Calendar.getInstance();
calendar.set(2014, 1, 20, 16, 38, 16);
Date startTimeFilter = calendar.getTime();
calendar.set(2014, 6, 16, 16, 38, 0);
Date endTimeFilter = calendar.getTime();
LogRequest request = new LogRequest.Builder().regex(regexStr).startTime(startTimeFilter).endTime(endTimeFilter).build();
LogStatusInfo status = new LogStatusInfo();
// "/opt/storageos/logs/nginx_error.log";
String filePath = nginxErrorLogPath;
String baseName = "nginx";
reader = new LogReader(filePath, request, status, baseName);
final LogMessage log = reader.readNextLogMessage();
assertTrue("log is null", log != null);
assertTrue("log message is null", !new String(log.getLogContent()).equals("null"));
assertTrue("log message does not match regex", Pattern.compile(regexStr, Pattern.DOTALL | Pattern.MULTILINE).matcher(LogUtil.bytesToString(log.getLogContent())).matches());
assertTrue("log time does not fit time filter", log.getTime() >= startTimeFilter.getTime() && log.getTime() <= endTimeFilter.getTime());
assertTrue("log file name is not null", new String(log.getFileName()).equals("null"));
assertTrue("log thread name not is null", new String(log.getThreadName()).equals("null"));
assertTrue("log level is not Error", new String(log.getLevel()).equalsIgnoreCase("ERROR"));
assertTrue("log line is not -1", new String(log.getLineNumber()).equals("-1"));
}
use of com.emc.storageos.systemservices.impl.logsvc.LogMessage in project coprhd-controller by CoprHD.
the class SysLogReaderTest method testAllLogFormatSmallFileNoFilterSysParser.
/**
* Test if readMessage() can read and parse syssvc file which has different
* format logs correctly
*/
@Test
public void testAllLogFormatSmallFileNoFilterSysParser() throws Exception {
System.out.println("starting testAllLogFormatSmallFileNoFilterSysParser");
LogStatusInfo status = new LogStatusInfo();
String filePath = "src/main/data/testReaderData/testSyslogParser.log";
LogReader reader = null;
LogRequest req = new LogRequest.Builder().build();
reader = new LogReader(filePath, req, status, null);
BufferedReader br = new BufferedReader(new FileReader("src/main/data/testReaderData/testSyslogParser.log"));
while (true) {
LogMessage log = reader.readNextLogMessage();
String line = br.readLine();
if (line == null) {
assertNull("Log should be null", log);
break;
}
assertEquals("whole log message mismatch", log.toStringOriginalFormatSysLog(), line);
}
br.close();
System.out.println("done testAllLogFormatSmallFileNoFilterSysParser");
}
Aggregations