public void caught(Throwable throwable) { lock.lock(); try { if (!(throwable instanceof IOException) && !(throwable instanceof SecurityException)) { throwable = new IOException(throwable); } this.response = Response.response(request); this.response.setThrowable(throwable); this.response.setStartTime(this.startTime); this.response.setSuccess(false); this.response.setExitCode(Constants.ExitCode.ERROR_EXEC.getValue()); invokeCallback(); } finally { lock.unlock(); } }
@Override public Response listPath(Request request) { Response response = Response.response(request).setExitCode(ExitCode.SUCCESS_EXIT.getValue()); String path = request.getParams().getString(Constants.PARAM_LISTPATH_PATH_KEY); if (CommonUtils.isEmpty(path)) return response.setSuccess(false).end(); File file = new File(path); if (!file.exists()) { return response.setSuccess(false).end(); } Map<String, String> result = new HashMap<String, String>(0); List<Map<String, String>> data = new ArrayList<Map<String, String>>(0); for (File itemFile : file.listFiles()) { if (itemFile.isHidden()) continue; Map<String, String> itemMap = new HashMap<String, String>(0); itemMap.put(Constants.PARAM_LISTPATH_NAME_KEY, itemFile.getName()); itemMap.put(Constants.PARAM_LISTPATH_PATH_KEY, itemFile.getAbsolutePath()); itemMap.put(Constants.PARAM_LISTPATH_ISDIRECTORY_KEY, itemFile.isDirectory() ? "0" : "1"); data.add(itemMap); } result.put(Constants.PARAM_LISTPATH_PATH_KEY, JSON.toJSONString(data)); response.setSuccess(true).setResult(result).end(); return response; }
@Override public Response kill(Request request) { String pid = request.getParams().getString(Constants.PARAM_PID_KEY); if (logger.isInfoEnabled()) { logger.info("[JobX]:kill pid:{}", pid); } Response response = Response.response(request); JobXProcess jobXProcess = processMap.get(pid); if (jobXProcess!=null) { jobXProcess.kill(ExitCode.KILL); response.setExitCode(ExitCode.SUCCESS_EXIT.getValue()).end(); if (logger.isInfoEnabled()) { logger.info("[JobX]:kill successful"); } }else { response.setExitCode(ExitCode.ERROR_EXIT.getValue()).end(); if (logger.isInfoEnabled()) { logger.info("[JobX]:kill error,can not found process"); } } return response; }
/** * ping的时候将失联的信息返回server... * @param request * @return */ @Override public Response ping(Request request) { Map<String, String> result = new HashMap<String, String>(0); //agent Platform... if (CommonUtils.isWindows()) { result.put(Constants.PARAM_OS_KEY, Constants.Platform.Windows.toString()); } else { result.put(Constants.PARAM_OS_KEY, Constants.Platform.Unix.toString()); } if (!lostResponse.isEmpty()) { result.putAll(lostResponse); lostResponse.clear(); } return Response.response(request) .setResult(result) .setSuccess(true) .setExitCode(ExitCode.SUCCESS_EXIT.getValue()) .end(); }
@Override public Response path(Request request) { //返回密码文件的路径... return Response.response(request).setSuccess(true) .setExitCode(ExitCode.SUCCESS_EXIT.getValue()) .setMessage(Constants.JOBX_HOME) .end(); }
@Override public Response execute(final Request request) { String command = request.getParams().getString(Constants.PARAM_COMMAND_KEY); String pid = request.getParams().getString(Constants.PARAM_PID_KEY); Integer timeout = request.getTimeOut(); String execUser = request.getParams().getString(Constants.PARAM_EXECUSER_KEY); if (logger.isInfoEnabled()) { logger.info("[JobX]:execute:{},pid:{}", command, pid); } Response response = Response.response(request); JobXProcess jobXProcess = new JobXProcess(command,timeout,pid,execUser); processMap.put(pid,jobXProcess); try { response.setExitCode(jobXProcess.start()); }catch (Exception e) { response.setExitCode(-1); }finally { String message = jobXProcess.getLogMessage(); response.setMessage(message); response.end(); jobXProcess.deleteExecShell(); //todo 得确保server和agent是连接的状态才可以清理log... jobXProcess.deleteLog(); processMap.remove(pid); } return response; }
Response response = Response.response(request).setExitCode(Constants.ExitCode.SUCCESS_EXIT.getValue()).setSuccess(true);
@Override public Response macId(Request request) { String guid = getMacId(); Response response = Response.response(request).end(); if (notEmpty(guid)) { return response.setMessage(guid).setSuccess(true).setExitCode(ExitCode.SUCCESS_EXIT.getValue()); } return response.setSuccess(false).setExitCode(ExitCode.ERROR_EXIT.getValue()); }
@Override public Response monitor(Request request) { Constants.ConnType connType = Constants.ConnType.getByName(request.getParams().getString("connType")); Response response = Response.response(request); switch (connType) { case PROXY: try { Monitor monitor = monitorService.monitor(); Map<String, String> map = monitor.toMap(); response.setResult(map) .setSuccess(true) .setExitCode(ExitCode.SUCCESS_EXIT.getValue()) .end(); return response; } catch (SigarException e) { e.printStackTrace(); } default: return null; } }
@Override public Response proxy(Request request) { if (this.client == null) { this.client = ExtensionLoader.load(Client.class); } String proxyHost = request.getParams().getString(Constants.PARAM_PROXYHOST_KEY); String proxyPort = request.getParams().getString(Constants.PARAM_PROXYPORT_KEY); String proxyAction = request.getParams().getString(Constants.PARAM_PROXYACTION_KEY); String proxyPassword = request.getParams().getString(Constants.PARAM_PROXYPASSWORD_KEY); //其他参数.... String proxyParams = request.getParams().getString(Constants.PARAM_PROXYPARAMS_KEY); HashMap<String, Object> params = new HashMap<String, Object>(0); if (CommonUtils.notEmpty(proxyParams)) { params = (HashMap<String, Object>) JSON.parse(proxyParams); } Request proxyReq = Request.request(proxyHost, toInt(proxyPort), Action.findByName(proxyAction), proxyPassword, request.getTimeOut(), null).setParams(params); Response response; try { response = this.client.sentSync(proxyReq); } catch (Exception e) { e.printStackTrace(); response = Response.response(request); response.setExitCode(ExitCode.ERROR_EXIT.getValue()) .setMessage("[JobX]:proxy error:" + e.getLocalizedMessage()) .setSuccess(false) .end(); } return response; }
Map<String,String> result = new HashMap<String, String>(0); result.put(Action.PING.name(),"0"); return Response.response(request) .setSuccess(false) .setResult(result)
@Override public Response password(Request request) { String newPassword = request.getParams().getString(Constants.PARAM_NEWPASSWORD_KEY); Response response = Response.response(request); if (isEmpty(newPassword)) { return response.setSuccess(false).setExitCode(ExitCode.SUCCESS_EXIT.getValue()).setMessage("密码不能为空").end(); } //把老的注册删除 unRegister(request.getHost(),request.getPort()); SystemPropertyUtils.setProperty(Constants.PARAM_JOBX_PASSWORD_KEY, newPassword); IOUtils.writeText(Constants.JOBX_PASSWORD_FILE, newPassword, Constants.CHARSET_UTF8); //最新密码信息注册进来 register(request.getHost(),request.getPort()); return response.setSuccess(true).setExitCode(ExitCode.SUCCESS_EXIT.getValue()).end(); }