@Override public Response path(Request request) { //返回密码文件的路径... return Response.response(request).setSuccess(true) .setExitCode(ExitCode.SUCCESS_EXIT.getValue()) .setMessage(Constants.JOBX_HOME) .end(); }
@Override public void messageReceived(IoSession session, Object message) throws Exception { Response response = (Response) message; if (logger.isInfoEnabled()) { logger.info("[JobX] minaRPC client receive response id:{}", response.getId()); } RpcFuture rpcFuture = this.minaClient.getRpcFuture(response.getId()); rpcFuture.received(response); }
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(); } }
Response response = Response.response(request).setExitCode(Constants.ExitCode.SUCCESS_EXIT.getValue()).setSuccess(true); ResponseFile responseFile = new ResponseFile(start, requestFile.getFileMD5()); responseFile.setEnd(true); response.setExitCode(Constants.ExitCode.NOTFOUND.getValue()).setSuccess(false).setUploadFile(responseFile).end(); handlerContext.writeAndFlush(response).addListener(new ChannelFutureListener() { @Override ResponseFile responseFile = new ResponseFile(start, requestFile.getFileMD5()); responseFile.setEnd(true); handlerContext.writeAndFlush(response.setUploadFile(responseFile).end()).addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture channelFuture) throws Exception { final ResponseFile responseFile = new ResponseFile(start, requestFile.getFileMD5(), (start * 100) / requestFile.getFileSize()); responseFile.setReadBuffer(requestFile.getReadBuffer()); handlerContext.writeAndFlush(response.setUploadFile(responseFile).end()).addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture channelFuture) throws Exception { ResponseFile responseFile = new ResponseFile(start, requestFile.getFileMD5()); responseFile.setEnd(true); handlerContext.writeAndFlush(response.setUploadFile(responseFile).end()).addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture channelFuture) throws Exception {
@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; }
@Override protected void channelRead0(ChannelHandlerContext handlerContext, Response response) throws Exception { if (!response.getAction().equals(Action.UPLOAD)) { if (logger.isInfoEnabled()) { logger.info("[JobX] nettyRPC client receive response id:{}", response.getId()); nettyClient.getRpcFuture(response.getId()).received(response); return; ResponseFile responseFile = response.getUploadFile(); if (responseFile.isEnd()) { randomAccessFile.close(); response.setUploadFile(responseFile); handlerContext.writeAndFlush(request); } else { nettyClient.getRpcFuture(response.getId()).received(response);
public Response setExitCode(int exitCode) { this.exitCode = exitCode; setSuccess(Constants.ExitCode.SUCCESS_EXIT.getValue() == exitCode); return this; }
private void invokeCallback() { if (this.invokeCallback == null) { return; } if (logger.isInfoEnabled()) { logger.info("[JobX] async callback invoke"); } if (this.response == null) { throw new IllegalStateException("[JobX]response cannot be null. host:" + this.request.getAddress() + ",action: " + this.request.getAction()); } if (this.response.getThrowable() == null) { try { invokeCallback.done(this.response); } catch (Exception e) { logger.error("[JobX]callback done invoke error .host:{},action:{}:,caught:{}", this.request.getAddress(), this.request.getAction(), e); } } else { try { invokeCallback.caught(response.getThrowable()); } catch (Exception e) { logger.error("[JobX]callback caught invoke error .host:{},action:{}:,caught:{}", this.request.getAddress(), this.request.getAction(), e); } } }
@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()); }
public static void received(Response response) { try { RpcFuture future = futures.remove(response.getId()); if (future != null) { future.doReceived(response); } else { logger.warn("[JobX]The timeout response finally returned at " + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())) + ", response " + future.getRequest().getAddress()); } } finally { futures.remove(response.getId()); } }
@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; }
/** * 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 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(); }
@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 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; }
Map<String,String> result = new HashMap<String, String>(0); result.put(Action.PING.name(),"0"); return Response.response(request) .setSuccess(false) .setResult(result) .setExitCode(ExitCode.ERROR_PASSWORD.getValue()) .setMessage(ExitCode.ERROR_PASSWORD.getDescription()) .end();
@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; }