@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; }
@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; }
/** * 파일을 업로드한다. * * @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); } }
@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; }
@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; }
/** * 선택한 시작 날짜 및 종료 날짜에 해당하는 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; }