package com.sitech.ismp.check.mbean; import com.sitech.base.AgentProperties; import com.sitech.ismp.check.util.RemoteControllerFactory; import com.sitech.ismp.coll.busi.BusiConstants; import com.sitech.ismp.messageObject.cc.CommandParameters; import com.sitech.ismp.messageObject.cc.CommandResults; import com.sitech.util.FileUtils; import com.sitech.util.RandomGUID; import com.sitech.util.upload.FTPIF; import com.sitech.util.upload.FTPSrv; import com.sitech.util.upload.RomoteController; import com.sitech.util.upload.SFTPClient; import org.apache.log4j.Logger; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.Date; import java.util.HashMap; /** * Created with IntelliJ IDEA. * User: Linxc * Date: 14-3-12 * Time: 下午1:16 * To change this template use File | Settings | File Templates. */ public class ShellExecutorThread { private Logger logger = Logger.getLogger(CommandExecutor.class); private String _taskid; private int _type; private String _content; private String _hostip; private String _hostusername; private String _hostpassword; private String _hostloginmode; private HashMap _customProp; private String guid; private String shellName; private void init(CommandParameters cps){ _taskid = cps.getTASK_ID(); _type = cps.getTYPE(); _content = cps.getCONTENT(); _hostip = cps.getHOST_IP(); _hostusername = cps.getHOST_USERNAME(); _hostpassword = cps.getHOST_PASSWORD(); _hostloginmode = cps.getHOST_LOGIN_MODE(); _customProp = cps.getCUSTOMPROP(); guid = "CCCP_" + RandomGUID.getRandomGUID(); shellName = guid + ".sh"; } public CommandResults doCommandLocal(CommandParameters req) { logger.info("doCommandLocal..."); init(req); writeScriptFile(); ShellExecutorUtil.cache.put(guid, req); writeNoticeFile(); return null; } private boolean writeScriptFile() { return FileUtils.writeFile(SCRIPT_FILE_DIR, shellName, _content, false); } private void writeNoticeFile() { String noticeContent = getNoticeContent(); String fileName = "notice_" + guid + ".sh"; logger.info("Create NoticeFile: " + fileName); FileUtils.writeFile(TMP_NOTICE_DIR, fileName, noticeContent, false); String noticeDir = AgentProperties.AGENT_HOME + "/notice/" + System.getProperty("user.name") + "/"; FileUtils.createNewFile(noticeDir, fileName); } /** * 生成notice文件,通知crontab执行脚本 */ private String getNoticeContent() { String content = BusiConstants.NOTICE_CONTENT; content = content.replaceAll("#AGENT_HOME#", AgentProperties.AGENT_HOME); content = content.replaceAll("#AGENT_ID#", AgentProperties.AGENT_ID); content = content.replaceAll("#REQUEST_ID#", guid); content = content.replaceAll("#SCHEDULE_ID#", _taskid); //1.脚本测试 2.调度任务同步 3.脚本下发 4.附件下发 5.附件验证 content = content.replaceAll("#OPERATE_TYPE#", OPR_TYPE_SHELL); content = content.replaceAll("#TRRIGGER_TYPE#", "AUTO"); content = content.replaceAll("#SEQ#", SEQ_1_NOTICE); content = content.replaceAll("#SHELL_NAME#", shellName); return content; } public static final String SEQ_1_NOTICE = "1"; public static final String OPR_TYPE_SHELL = "6"; public static final String TMP_NOTICE_DIR = AgentProperties.AGENT_HOME + "/script/busi/busi_tmp/"; public static final String SCRIPT_FILE_DIR = AgentProperties.AGENT_HOME + "/script/busi/"; }