in bigtop-manager-agent/src/main/java/org/apache/bigtop/manager/agent/grpc/service/TaskLogServiceGrpcImpl.java [40:71]
public void getLog(TaskLogRequest request, StreamObserver<TaskLogReply> responseObserver) {
String path = ProjectPathUtils.getLogFilePath(request.getTaskId());
try (RandomAccessFile file = new RandomAccessFile(path, "r")) {
// Read from beginning
long fileLength = file.length();
while (file.getFilePointer() < fileLength) {
String line = file.readLine();
if (line != null) {
line = new String(line.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
responseObserver.onNext(
TaskLogReply.newBuilder().setText(line).build());
}
}
// Waiting for new logs
boolean isTaskRunning = true;
while (isTaskRunning) {
isTaskRunning = Caches.RUNNING_TASK != null;
readNewLogs(file, responseObserver);
Thread.sleep(1000);
}
responseObserver.onCompleted();
} catch (Exception e) {
String errMsg = "Error when reading task log: " + e.getMessage() + ", please fix it";
responseObserver.onNext(TaskLogReply.newBuilder().setText(errMsg).build());
log.error("Error reading task log", e);
Status status = Status.UNKNOWN.withDescription(e.getMessage());
responseObserver.onError(status.asRuntimeException());
}
}