Exemplo n.º 1
0
  @RequestMapping(value = "/task/log", method = RequestMethod.GET)
  @ResponseStatus(HttpStatus.OK)
  public Response getTaskLog(
      @RequestParam(defaultValue = "") String clusterName,
      @RequestParam(defaultValue = "") Long id) {
    EngineService engineService = getEngineService(clusterName);

    Response response = new Response();
    try {
      TaskHistory taskHistories = engineService.getTaskHistoryRemoteService().select(id);
      String filename = null;
      String task = taskHistories.getLogDirectory() + "/task.log";
      if (new File(task).exists() && new File(task).length() == 0) {
        String err = taskHistories.getLogDirectory() + "/err.log";
        if (new File(err).exists()) {
          filename = err;
        }
      } else {
        filename = task;
      }

      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      FileUtils.copyFile(new File(filename), baos);
      response.getMap().put("text", new String(baos.toByteArray()));
      response.setSuccess(true);
    } catch (Exception ex) {
      // FIXME 여기 WholeBodyException을 수정해야하지 않을까??
      response.setSuccess(false);
      response.getError().setMessage("Unable to load a log file.");
      response.getError().setException(ExceptionUtils.getFullStackTrace(ex));
      if (ex.getCause() != null) response.getError().setCause(ex.getCause().getMessage());
    }
    return response;
  }