コード例 #1
0
  @RequestMapping(value = "/listVariablesHdfs", method = RequestMethod.POST)
  @ResponseStatus(HttpStatus.OK)
  public Response listVariablesHdfs(@RequestBody Map params) {

    Response response = new Response();
    try {
      String clusterName = params.get("clusterName").toString();
      EngineService engineService = this.getEngineService(clusterName);

      VisualService service = engineService.getVisualService();
      Map resultMap = service.listVariablesHdfs(params);

      if ((boolean) resultMap.get("success")) {
        response.setSuccess(true);
        response.getMap().putAll(resultMap);
      } else {
        response.setSuccess(false);
      }

    } catch (Exception ex) {
      response.setSuccess(false);
      response.getError().setMessage(ex.getMessage());
      if (ex.getCause() != null) response.getError().setCause(ex.getCause().getMessage());
      response.getError().setException(ExceptionUtils.getFullStackTrace(ex));
      logger.info(ex.toString());
    }
    return response;
  }
コード例 #2
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;
  }
コード例 #3
0
  /**
   * 파일을 업로드한다.
   *
   * @return REST Response JAXB Object
   */
  @RequestMapping(
      value = "/upload",
      method = RequestMethod.POST,
      consumes = {"multipart/form-data"})
  @ResponseStatus(HttpStatus.OK)
  public ResponseEntity<String> upload(HttpServletRequest req) throws IOException {
    Response response = new Response();

    if (!(req instanceof DefaultMultipartHttpServletRequest)) {
      response.setSuccess(false);
      response.getError().setCause("Invalid Request.");
      response.getError().setMessage("Invalid Request.");
      String json = new ObjectMapper().writeValueAsString(response);
      return new ResponseEntity(json, HttpStatus.BAD_REQUEST);
    }

    try {
      DefaultMultipartHttpServletRequest request = (DefaultMultipartHttpServletRequest) req;
      logger.debug(
          "Uploaded File >> Path : {}, Filename : {}, Size: {} bytes",
          new Object[] {
            request.getParameter("path"),
            request.getFile("file").getOriginalFilename(),
            request.getFile("file").getSize()
          });

      String clusterName = request.getParameter("clusterName");
      Map params = new HashMap();

      EngineService engineService = this.getEngineService(clusterName);
      VisualService service = engineService.getVisualService();
      Map resultMap = service.saveFile(request.getFile("file"), request.getParameter("options"));

      response.getMap().putAll(resultMap);
      response.setSuccess(true);
      String json = new ObjectMapper().writeValueAsString(response);
      HttpStatus statusCode = HttpStatus.OK;
      return new ResponseEntity(json, statusCode);
    } catch (Exception ex) {
      response.setSuccess(false);
      response.getError().setMessage(ex.getMessage());
      if (ex.getCause() != null) response.getError().setCause(ex.getCause().getMessage());
      response.getError().setException(ExceptionUtils.getFullStackTrace(ex));

      String json = new ObjectMapper().writeValueAsString(response);
      HttpStatus statusCode = HttpStatus.INTERNAL_SERVER_ERROR;

      logger.debug(ExceptionUtils.getFullStackTrace(ex));

      return new ResponseEntity(json, statusCode);
    }
  }
コード例 #4
0
  @RequestMapping(value = "logs", method = RequestMethod.GET)
  @ResponseStatus(HttpStatus.OK)
  @ResponseBody
  public Response getLogs(
      @RequestParam(defaultValue = "") String clusterName,
      @RequestParam(defaultValue = "") String identifier,
      @RequestParam(defaultValue = "") String taskId,
      @RequestParam(defaultValue = "") String tabConditionKey) {
    Response response = new Response();
    EngineService engineService = getEngineService(clusterName);
    TaskHistoryRemoteService taskHistoryRemoteService = engineService.getTaskHistoryRemoteService();

    String log;
    String script;
    String command;
    String error;
    Map<String, Object> map = new HashMap<>();

    switch (tabConditionKey) {
      case "log":
        log = taskHistoryRemoteService.getTaskLog(identifier, taskId);
        map.put("log", log);
        break;
      case "script":
        script = taskHistoryRemoteService.getScript(identifier, taskId);
        map.put("script", script);
        break;
      case "command":
        command = taskHistoryRemoteService.getCommand(identifier, taskId);
        map.put("command", command);
        break;
      case "error":
        error = taskHistoryRemoteService.getError(identifier, taskId);
        map.put("error", error);
        break;
    }

    response.getMap().putAll(map);
    response.setSuccess(true);
    return response;
  }
コード例 #5
0
  @RequestMapping(value = "/reloadData", method = RequestMethod.GET)
  @ResponseStatus(HttpStatus.OK)
  public Response reloadData(@RequestParam Map params) {
    Response response = new Response();
    try {
      String clusterName = params.get("clusterName").toString();
      EngineService engineService = this.getEngineService(clusterName);

      VisualService service = engineService.getVisualService();
      Map resultMap = service.reloadData(params);

      if ((boolean) resultMap.get("success")) {
        response.setSuccess(true);
        response.getMap().putAll(resultMap);
      } else {
        response.setSuccess(false);
      }

    } catch (IOException ex) {
      throw new ServiceException("You can not reload data.", ex);
    }
    return response;
  }
コード例 #6
0
  /**
   * 선택한 시작 날짜 및 종료 날짜에 해당하는 Audit Log를 조회한다.
   *
   * @param clusterName Hadoop Cluster명
   * @param searchType 조회 유형
   * @param startDate 시작 날짜 (yyyy-MM-dd HH)
   * @param endDate 종료 날짜 (yyyy-MM-dd HH)
   * @return trend 목록
   */
  @RequestMapping(value = "trend", method = RequestMethod.GET)
  @ResponseStatus(HttpStatus.OK)
  @ResponseBody
  public Response trend(
      @RequestParam(defaultValue = "") String clusterName,
      @RequestParam(defaultValue = "ACT") String searchType,
      @RequestParam(defaultValue = "") String startDate,
      @RequestParam(defaultValue = "") String endDate) {

    EngineService engineService = this.getEngineService(clusterName);
    FileSystemAuditRemoteService service = engineService.getFileSystemAuditRemoteService();
    int level = getSessionUserLevel();
    String username = level == 1 ? "" : getSessionUsername();

    SimpleDateFormat hoursFormat = new SimpleDateFormat("yyyy-MM-dd HH");
    SimpleDateFormat daysFormat = new SimpleDateFormat("yyyy-MM-dd");

    Calendar calendar = Calendar.getInstance();
    List<Trend> trendList;
    Date startTime;
    Date endTime;

    try {
      if ("".equals(startDate) && "".equals(endDate)) {
        calendar.setTime(new Date());
        calendar.add(Calendar.HOUR, -12);
        trendList = trends(hoursFormat, calendar, Calendar.HOUR, 12);
      } else if ("".equals(startDate) && !"".equals(endDate)) {
        calendar.setTime(daysFormat.parse(endDate));
        calendar.add(Calendar.HOUR, -1);
        trendList = trends(hoursFormat, calendar, Calendar.HOUR, 24);
      } else {
        startTime = daysFormat.parse(startDate);
        calendar.setTime(new Date());
        endTime =
            (endDate.equals(""))
                ? daysFormat.parse(daysFormat.format(calendar.getTime()))
                : daysFormat.parse(endDate);
        long difference = (endTime.getTime() - startTime.getTime()) / (1000 * 60 * 60 * 24);
        calendar.setTime(startTime);
        calendar.add(Calendar.DATE, -1);
        trendList = trends(daysFormat, calendar, Calendar.DATE, (int) difference + 1);
        calendar.add(Calendar.DATE, 1);
      }
    } catch (ParseException e) {
      throw new ServiceException("Unable to parse the date.", e);
    }

    List<Trends> trendsList = service.auditTrend(startDate, endDate, searchType, username);
    HashMap<String, String> trendTitle = new HashMap<>();

    for (Trends trends : trendsList) {
      String trendsSearchType = trends.getSearchType();
      if (!trendTitle.containsKey(trendsSearchType)) {
        trendTitle.put(trendsSearchType, "data" + (trendTitle.size() + 1));
      }

      /** 날짜가 같은 필드에 데이터 삽입 */
      for (Trend trend : trendList) {
        if (trend.getTime().equals(trends.getTime())) {
          Integer position =
              Integer.parseInt(trendTitle.get(trendsSearchType).replaceAll("[^\\d]", ""));
          trend.setData(position, trend.getData(position) + trends.getCount());
        }
      }
    }

    Response response = new Response();
    response.getMap().putAll(trendTitle);
    response.getList().addAll(trendList);
    response.setTotal(trendList.size());
    response.setSuccess(true);

    return response;
  }