package com.wangc.test_plan.jmeter;

import com.wangc.comm.StringUtils;
import com.wangc.test_plan.bean.RunPlanBean;
import com.wangc.test_plan.bean.TestPlanBean;
import com.wangc.test_plan.controler.TPController;
import org.beetl.core.Configuration;
import org.beetl.core.GroupTemplate;
import org.beetl.core.Template;
import org.beetl.core.resource.FileResourceLoader;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * Created by wangchao on 2017/3/9.
 */
@Component
public class GenerateJmx {

    // TODO: wangc@2017/3/13  读取配置 tp.jmeter.jmx .path
    private static String JMX_PATH = File.separator+"jmeter"+File.separator+"jmx";
    private static String JMX_NAME_PREFIX = "tp_";
    private static String JMX_NAME_SUFFIX = ".jmx";


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

    public static void generate(RunPlanBean rpb) {
        try {
            System.out.println(rpb.toString());

            String root = TPController.class.getClassLoader().getResource("").getPath() + "beetl";

            FileResourceLoader resourceLoader = new FileResourceLoader(root, "utf-8");
            Configuration cfg = Configuration.defaultConfiguration();
            GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);
            Template t = gt.getTemplate("/http_request.jmx");

            t.binding("v_duration", rpb.getDuration());
            t.binding("v_users_num", rpb.getUsersNum());
            t.binding("v_ramp_up", rpb.getRampUp());
            TestPlanBean tpb = rpb.getTestPlanBean(); // TODO: wangc@2017/3/13  不够优雅,改成解析成map,直接binding map 
            if (null != tpb) {
                t.binding("v_server_name", tpb.getServerNameIp());
                t.binding("v_port", tpb.getPortNum());
                t.binding("v_prol", tpb.getProtocol());
                t.binding("v_path", tpb.getPath());
            } else {
                t.binding("v_server_name", "111");
                t.binding("v_port", "222");
                t.binding("v_prol", "333");
                t.binding("v_path", "444");
            }

            String jmxRoot = System.getProperty("user.dir")+JMX_PATH;//系统(项目)路径,结尾无斜杠
            //jmx在系统(项目)中的存在路径,斜杠开头,结尾无斜杠
            
            String fullPath = jmxRoot+StringUtils.creAndGetDir(jmxRoot); //返回的应该是  c:/jmx/2017/03  ,并创建这个目录
            
            //文件名,斜杠开头
            String fileName = new StringBuilder(File.separator)
                    .append(JMX_NAME_PREFIX)
                    .append(StringUtils.getDate("yyyyMMddHHmmssSSS"))
                    .append(JMX_NAME_SUFFIX)
                    .toString();

            String jmxFilePath = fullPath+fileName;
            rpb.setJmxPath(jmxFilePath);
            OutputStream ops = new FileOutputStream(jmxFilePath);
            t.renderTo(ops);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}