ShellExecutorThread.java 3.66 KB
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/";
}