
com.googlecode.openbox.server.log.monitor.AbstractServerLogMonitor Maven / Gradle / Ivy
package com.googlecode.openbox.server.log.monitor;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.googlecode.openbox.server.log.ServerLog;
public abstract class AbstractServerLogMonitor implements
ServerLogMonitor {
private static final Logger logger = LogManager.getLogger();
private List> handlers;
private Map startLineNumbers;
private List serverLogProviders;
private List serverLogs;
public AbstractServerLogMonitor() {
this.serverLogs = new LinkedList();
this.serverLogProviders = new LinkedList();
this.handlers = new LinkedList>();
this.startLineNumbers = new HashMap();
this.addServerLogHandler(new LogPrintHandler());
}
@Override
public void addServerLogProvider(ServerLogProvider serverLogProvider) {
serverLogProviders.add(serverLogProvider);
}
@Override
public void addServerLog(ServerLog serverLog) {
serverLogs.add(serverLog);
}
@Override
public AbstractServerLogMonitor addServerLogHandler(
ServerLogHandler handler) {
handlers.add(handler);
return this;
}
@Override
public T execute() throws Exception {
init();
start();
T t = null;
try {
t = triggerActions();
} finally {
String logs = getMergedTriggerDuringLogs();
verify(t, logs);
}
return t;
}
private void init() {
collectServerLogsFromServerLogProvider();
}
private void collectServerLogsFromServerLogProvider() {
for (ServerLogProvider serverLogProvider : serverLogProviders) {
List serverLogs = serverLogProvider.getServerLogs();
if (null != serverLogs) {
for (ServerLog serverLog : serverLogs) {
addServerLog(serverLog);
}
}
}
}
private void start() {
for (ServerLog serverLog : serverLogs) {
try {
startLineNumbers.put(serverLog.toString(),
serverLog.getCurrentLineNum());
} catch (Exception e) {
logger.warn(e.getMessage());
}
}
}
private String getMergedTriggerDuringLogs() {
String content = "";
for (ServerLog serverLog : serverLogs) {
try {
TimeUnit.SECONDS.sleep(10);
int startLineNum = startLineNumbers.get(serverLog.toString());
content = content + "\n" + serverLog.getServer() + "\n"
+ serverLog.getLastestContent(startLineNum);
} catch (Exception e) {
logger.warn(e.getMessage());
}
}
return content;
}
private void verify(T t, String logs) {
for (ServerLogHandler handler : handlers) {
handler.action(t, logs);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy