CronScheduleLogService.java 8.15 KB
package com.sitech.ibnms.config.sync.service;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;

import com.sitech.ibnms.config.sync.db.dao.CronScheduleLogDao;
import com.sitech.ibnms.util.RandomGUID;
import com.sitech.ismp.messageObject.ScheduleLog;


public class CronScheduleLogService {

    private static Logger logger = Logger.getLogger("LOGGER");

    private CronScheduleLogDao logDao = new CronScheduleLogDao();

    public void insertCronScheduleLogs(ScheduleLog schLog) {
        String logInfo = schLog.getLogInfo();
        String[] logArr = null;
        Map<String, String> params = null;
        int seq = Integer.valueOf(schLog.getSeq());
        String scrStatus = schLog.getScrStatus();
        String outType = schLog.getType();
        try {
            if (0 == seq) {
                params = makeLogScheduleParam(schLog, seq, 0);
                logDao.insertTbLogSchedule(params);
                logDao.insertTbLogScheduleDetail(params);
            } else {
                if(null != logInfo && !"".equals(logInfo.trim())){
                    logArr = logInfo.split("\t");
                    for (int i = 0; i < logArr.length; i++) {
                        int lineno = 1;
                        if ("err_out".equals(outType)) {
                            lineno = i + 10001;
                        } else {
                            lineno = i + 1;
                        }
                        ScheduleLog logObj = schLog;
                        String info = logArr[i];
                        logObj.setLogInfo(info);
                        params = makeLogScheduleParam(logObj, seq, lineno);
                        logDao.insertTbLogScheduleDetail(params);
                        if (null != info && !"".equals(info.trim()) && info.trim().startsWith("ATTACH_UPLOAD_FILE_STATUS")) {
                            String[] arr = info.trim().split("=");
                            String fileStatus = arr[1].trim();
                            params.put("IS_SEND", fileStatus);
                            logDao.updateCronAttachHostStatus(params);
                        }

                    }
                }

                //判断当前处理的日志是否为结束日志--endtime不为空
                String endTime = schLog.getEndTime();
                if (null != endTime && !"".equals(endTime.trim())) {
                    params = makeLogScheduleParam(schLog,1,1);
                    //更新调度的结束时间和脚本的执行状态
                    logDao.updateTbLogScheduleEndTimeAndScrStatus(params);

                    //只有同步调度才会更新调度状态
                    String syncType = schLog.getSyncType();
                    if ("2".equals(schLog.getOperateType()) && null != syncType && !"".equals(syncType.trim())) {
                        Map<String, Object> extInfo = schLog.getExtInfo();
                        String scheduleStatus = (String) extInfo.get("SCHEDULE_STATUS");
                        String scheduleOprType = (String) extInfo.get("SCHEDULE_OPERATE");
                        // 增加/修改调度
                        if ("1".equals(schLog.getSyncType().trim()) || "2".equals(schLog.getSyncType().trim())) {
                            String nextFireTime = schLog.getNextFireTime();
                            logger.info("Start Add/Update CronSchedule:Sch_ID["+schLog.getSchId()
                                    +"],Agent_ID["+schLog.getAgentId()+"],SyncType["+schLog.getSyncType()+"],Next_Fire_time["+nextFireTime+"]");
                            params.put("SCHEDULE_STATUS",scheduleStatus);
                            params.put("NEXT_FIRE_TIME",nextFireTime);
                            //更新调度任务的状态
                            logDao.updateTbCCCrontabTaskHostStatus(params);
                            //增加或者修改调度任务需要更新调度任务的下次运行时间
                            logDao.updateTbLogScheduleNextFireTime(params);
                        //删除或者停止调度
                        } else if ("3".equals(syncType.trim())) {
                            switch (Integer.valueOf(scheduleOprType)){
                                case 1://删除调度 更新TB_CC_CRONTAB_TASK_HOST  delflag
                                    logger.info("Start delete CronSchedule:Sch_ID["+schLog.getSchId()+"],SyncType["
                                            +schLog.getSyncType()+"],Agent_ID["+schLog.getAgentId()+"]");
                                    String delFlag = "0";
                                    if("0".equals(scheduleStatus)){
                                        delFlag = "1";
                                    }
                                    params.put("DEL_FLAG",delFlag);
                                    logDao.updateTbCCCrontabTaskHostDelFlag(params);
                                    break;
                                case 2://停止调度  更新TB_CC_CRONTAB_TASK_HOST  status
                                    logger.info("Start stop CronSchedule:Sch_ID["+schLog.getSchId()+"],Agent_ID["+schLog.getAgentId()+"]");
//                                    String status = "";
//                                    if("1".equals(scheduleStatus)){
//                                        status = "0";
//                                    } else {
//                                        status = "1";
//                                    }
                                    params.put("SCHEDULE_STATUS",scheduleStatus);
                                    logDao.updateTbCCCrontabTaskHostStatus(params);
                                    break;
                                default:
                                    logger.info("SCHEDULE_OPERATE is not Exist");
                            }
                        }

                    }

                    //脚本同步更新调度任务的脚本同步状态
                    if("3".equals(schLog.getOperateType())){
                        String scriptSyncStatus = (String)schLog.getExtInfo().get("SCRIPT_SYNC_STATUS");
                        logger.info("Start update ScriptSyncStatus:Sch_ID["+schLog.getSchId()+"],Agent_ID["+schLog.getAgentId()+"],Sync["+scriptSyncStatus+"]");
                        params = new HashMap<String, String>();
                        params.put("SCRIPT_SYNC_STATUS",scriptSyncStatus);
                        params.put("SCH_ID",schLog.getSchId());
                        params.put("AGENT_ID",schLog.getAgentId());
                        logDao.updateTbCCCrontabTaskHostScriptSyncStatus(params);
                    }

                }

            }
        } catch (Exception e) {
            logger.error("[Cron Schedule] Exception while insertCronScheduleLogs", e);
        }
    }

    private Map<String, String> makeLogScheduleParam(ScheduleLog log, int seq, int linenum) {
        Map<String, String> map = new HashMap<String, String>();
        Map<String,Object> extInfo = log.getExtInfo()==null? new HashMap<String, Object>():log.getExtInfo();
        String scheduleFlag = (String) extInfo.get("SCHEDULE_FLAG");
        String shExecTime = extInfo.get("SH_EXEC_TIME")==null?"":(String)extInfo.get("SH_EXEC_TIME");
        String beginTime = log.getBeginTime();
        if("Y".equals(scheduleFlag)){
            beginTime = "";
        }
        map.put("SCH_ID", log.getSchId());
        map.put("REQ_ID", log.getRequestId() == null ? RandomGUID.getRandomGUID() : log.getRequestId());
        map.put("SEQ", "" + (seq + 1));
        map.put("LINE_NUM", "" + linenum);
        map.put("AGENT_ID", log.getAgentId());
        map.put("NEXT_FIRE_TIME", log.getNextFireTime());
        map.put("LOG_INFO", log.getLogInfo());
        map.put("AGENT_ID", log.getAgentId());
        map.put("OPR_TYPE", log.getOperateType());
        map.put("TRIGGER_TYPE", log.getTrigerType());
        map.put("TYPE", log.getType());
        map.put("BEGIN_TIME", beginTime);
        map.put("END_TIME", log.getEndTime());
        map.put("SCR_STATUS", log.getScrStatus() == null ? "0" : log.getScrStatus());
        map.put("LOG_TYPE",log.getLogType());
        map.put("SH_EXEC_TIME",shExecTime);
        return map;
    }

}