CollWindows.java 3.65 KB
package com.sitech.ismp.coll.host;

import com.sitech.base.AgentProperties;
import com.sitech.base.WinConf;
import com.sitech.ismp.app.coll.RPCTarget;
import com.sitech.ismp.coll.CollBase;
import com.sitech.ismp.coll.basic.TblATO_KPIDETAIL;
import com.sitech.jmx.MasterAgentWin;
import org.apache.log4j.Logger;

import java.io.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Vector;

/**
 * Created with IntelliJ IDEA.
 * User: Administrator
 * Date: 14-2-21
 * Time: 下午1:55
 * To change this template use File | Settings | File Templates.
 */
public class CollWindows extends CollBase implements CollWindowsMBean {
    private Logger logger = Logger.getLogger(CollWindows.class);

    private static String COMMAND = "cmd /c " + WinConf.AGENT_HOME + "/masteragent/bin/" + "coll.bat";

    private static String KPI_FILE_NAME = WinConf.AGENT_HOME + "/masteragent/data/local.txt";

    @Override
    public Vector<TblATO_KPIDETAIL> coll(HashMap<String, String> paramHashMap) {
        exec_coll();
        analy_result();
        return this.getKPISet();
    }

    private void exec_coll() {
        logger.info("****windows采集开始");

        new RPCTarget().execute(COMMAND);

        //execute(COMMAND);

        logger.info("*****生成指标文件完成");
    }

    private void analy_result() {
        logger.info("****analy_result 开始");

        File kpiFile = new File(KPI_FILE_NAME);

        if(!kpiFile.exists() || !kpiFile.canRead()){
            return;
        }


        FileInputStream fis = null;
        BufferedReader bfd = null;
        DataInputStream in = null;
        try {
            fis = new FileInputStream(kpiFile);
            in = new DataInputStream(fis);
            bfd = new BufferedReader(new InputStreamReader(in,"GBK"));

            String line = "";
            while ((line = bfd.readLine()) != null) {
                String[] context = line.split("#");
                String unit_id = context[0].trim();
                String kpi_id = context[1].trim();
                String kpi_value = context[4].trim();
                logger.info("---test---" + kpi_value + "--" + unit_id + "--" +
                        kpi_id);
                setResult(kpi_value, unit_id, kpi_id);
            }
        } catch (Exception e) {
            logger.error("Exception while analy_result", e);
        } finally {
            try {
                bfd.close();
                in.close();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        logger.info("****analy_result 结束");
    }

    private void setResult(String kpiValue, String unitId, String kpiId) {
        this.addKPI(unitId, kpiId, kpiValue);
    }

    private void execute(String shellCommand) {
        logger.info("excute command: \n" + shellCommand);

        StringBuffer sb = new StringBuffer();
        try {
            Process process = Runtime.getRuntime().exec(shellCommand);
            BufferedReader reader = null;
            reader = new BufferedReader(
                    new InputStreamReader(process.getInputStream()));
            String line = reader.readLine();
            while (line != null) {
                sb.append(line + "\n");
                line = reader.readLine();
                System.out.print(line);
            }
            reader.close();

        } catch (Exception e) {
            logger.error("在本机上可能没有 " + shellCommand + " 命令!", e);
        } finally {
            Runtime.getRuntime().freeMemory();
            Runtime.getRuntime().gc();
        }

    }

    public static void main(String[] args){
        new CollWindows().coll(null);
    }
}