public void getLog()

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());
        }
    }