%@ page
contentType="text/html; charset=UTF-8"
import="javax.servlet.*"
import="javax.servlet.http.*"
import="java.io.*"
%>
<%!
String taskId = null;
long logOffset = -1, logLength = -1;
boolean tailLog = false;
long tailSize = 1024;
int tailWindow = 1;
boolean entireLog = false;
boolean plainText = false;
TaskLog.LogFilter filter = null;
private void printTaskLog(JspWriter out, TaskLog.LogFilter filter)
throws IOException {
if (!plainText) {
out.println("
" + filter + " logs
");
out.println("
");
}
boolean gotRequiredData = true;
try {
TaskLog.Reader taskLogReader = new TaskLog.Reader(taskId, filter);
byte[] b = null;
int bytesRead = 0;
int targetLength = 0;
if (entireLog) {
b = taskLogReader.fetchAll();
targetLength = bytesRead = b.length;
} else {
if (tailLog) {
b = new byte[(int)tailSize];
targetLength = (int)tailSize;
bytesRead = taskLogReader.tail(b, 0, b.length, tailSize, tailWindow);
} else {
b = new byte[(int)logLength];
targetLength = (int)logLength;
bytesRead = taskLogReader.read(b, 0, b.length, logOffset, logLength);
}
}
if (bytesRead != targetLength &&
targetLength <= taskLogReader.getTotalLogSize()) {
if( !plainText) {
out.println("Warning: Could not fetch " + targetLength +
" bytes from the task-logs; probably purged!
");
}else{
out.println("Warning: Could not fetch " + targetLength +
" bytes from the task-logs; probably purged!");
}
gotRequiredData = false;
}
String logData = new String(b, 0, bytesRead);
if (!plainText) {
out.print("" + logData + " |
");
} else {
out.print(logData);
}
} catch (IOException ioe) {
out.println("Failed to retrieve '" + filter + "' logs for task: " + taskId);
}
if( !plainText ) {
out.println("
\n");
}
if (!entireLog && !plainText) {
if (tailLog) {
if (gotRequiredData) {
out.println("Earlier");
}
if (tailWindow > 1) {
out.println("Later");
}
} else {
if (gotRequiredData) {
out.println("Earlier");
}
out.println("Later");
}
}
if (!plainText) {
out.println("
");
}
}
%>
<%
taskId = request.getParameter("taskid");
if (taskId == null) {
out.println("Missing 'taskid' for fetching logs!
");
return;
}
String logFilter = request.getParameter("filter");
if (logFilter == null) {
logFilter = "stderr";
}
try {
filter = TaskLog.LogFilter.valueOf(TaskLog.LogFilter.class,
logFilter.toUpperCase());
} catch (IllegalArgumentException iae) {
out.println("Illegal 'filter': " + logFilter + "
");
return;
}
String sLogOff = request.getParameter("off");
if (sLogOff != null) {
logOffset = Long.valueOf(sLogOff).longValue();
}
String sLogLen = request.getParameter("len");
if (sLogLen != null) {
logLength = Long.valueOf(sLogLen).longValue();
}
String sEntireLog = request.getParameter("all");
if (sEntireLog != null) {
entireLog = Boolean.valueOf(sEntireLog);
}
String sTail = request.getParameter("tail");
if (sTail != null) {
tailLog = Boolean.valueOf(sTail);
}
String sTailLen = request.getParameter("tailsize");
if (sTailLen != null) {
tailSize = Long.valueOf(sTailLen).longValue();
}
String sTailWindow = request.getParameter("tailwindow");
if (sTailWindow != null) {
tailWindow = Integer.valueOf(sTailWindow).intValue();
}
String sPlainText = request.getParameter("plaintext");
if (sPlainText != null) {
plainText = Boolean.valueOf(sPlainText);
}
if (logOffset == -1 || logLength == -1) {
tailLog = true;
tailWindow = 1;
}
if (entireLog) {
tailLog = false;
}
if( !plainText ) {
out.println("");
out.println("Task Logs: '" + taskId + "'");
out.println("");
out.println("Task Logs: '" + taskId + "'
");
printTaskLog(out, TaskLog.LogFilter.STDOUT);
printTaskLog(out, TaskLog.LogFilter.STDERR);
printTaskLog(out, TaskLog.LogFilter.SYSLOG);
out.println("Hadoop, 2006.
");
out.println("");
out.println("");
} else {
printTaskLog(out, filter);
}
%>