package com.eactive.eai.rms.onl.common.service;//package com.eactive.eai.rms.onl.common.service;
//
//import java.text.DecimalFormat;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Map;
//
//import org.apache.log4j.Logger;
//import org.quartz.Job;
//import org.quartz.JobExecutionContext;
//import org.quartz.JobExecutionException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.stereotype.Component;
//
//import com.eactive.eai.rms.common.context.MonitoringContextImpl;
//import com.eactive.eai.rms.common.datasource.DataSourceContextHolder;
//import com.eactive.eai.rms.common.datasource.DataSourceType;
//import com.eactive.eai.rms.common.datasource.DataSourceTypeManager;
//import com.eactive.eai.rms.common.util.CommonUtil;
//import com.eactive.eai.rms.onl.common.scheduler.Schedule;
//import com.eactive.eai.rms.onl.common.scheduler.ScheduleMethod;
//import com.eactive.eai.rms.onl.common.scheduler.ScheduleType;
//import com.eactive.eai.rms.onl.server.repository.Repository;
//import com.eactive.eai.rms.onl.server.repository.TransactionRepositoryService;
//import com.eactive.eai.rms.onl.vo.HostStatusVo;
//import com.eactive.eai.rms.onl.vo.TransactionTrackingVo;
//
///**
// * �ֱ������� SMS �޽����� ������ �����͸� �����Ͽ� smslog ���Ͽ� write �Ѵ�.
// * ��������� �ֱ������� SMS �޽����� ���۵ȴ�.
// */
//public class SmsMonitorJob implements Job{
//
//    private static final Logger logger = Logger.getLogger(SmsMonitorJob.class);
//
//    private static final Logger SMS_LOGGER = Logger.getLogger("SMS_LOGGER");
//
//    @Autowired
//    private Repository repository;
//    
//    @Autowired
//    private TransactionRepositoryService transactionRepositoryService;
//
//    @Autowired
//    @Qualifier("monitoringContext")
//    private MonitoringContextImpl monitoringContext;
//    
//    @Autowired
//    @Qualifier("eaiServerInfoService")
//    private EaiServerInfoService eaiServerInfoService;
//
//	@Override
//	public void execute(JobExecutionContext arg0) throws JobExecutionException {
//		// TODO Auto-generated method stub
//		
//	}    
//    
//    
//    
//    public void sendSms() {
//        StringBuilder sb = new StringBuilder(100);
//        try {
//            //getMessage(sb);
//            SMS_LOGGER.info(sb.toString());
//
//            // SMS �޽��� ���� �� ���� ���ҽ� ���� max ���� �ʱ�ȭ ��Ų��.
////            smsService.resetTodaysHostStatusVo();
//        } catch (Exception e) {
//            logger.error(this + ":" + sb.toString(), e);
//        }
//    }
//
//    @SuppressWarnings("unchecked")
//    private void getMessage(StringBuilder sb) {
//        // �ŷ� ������ ����
//
//        TransactionTrackingVo todaysTransactionTrackingVo = new TransactionTrackingVo();
//        // transactionRepositoryService ���� Datasource ��ã�� ���� ������ ���� ����
//        DataSourceContextHolder.setDataSourceType(DataSourceTypeManager.getDataSourceType(DataSourceTypeManager.MONITORING));
//        for (Iterator<TransactionTrackingVo> it = transactionRepositoryService.getAllTrackingVo().values().iterator(); it.hasNext();) {
//            TransactionTrackingVo transactionTrackingVo = it.next();
//            todaysTransactionTrackingVo.addTotalProc(transactionTrackingVo.getTotalProc());
//            todaysTransactionTrackingVo.addTotalError(transactionTrackingVo.getTotalError());
//        }
//
//        DecimalFormat f = new DecimalFormat("#,###");
//
//        // Host������ ����
//        HashMap<String, Object> currentMap = new HashMap<String, Object>();
//        currentMap.put("currentVo", new HostStatusVo());
//        // 2014-07-18 : Datasource �������� �������� ����
//        for(DataSourceType source : DataSourceTypeManager.getDynamicDataSourceTypes()) {
//        	String service = source.getName();
//            currentMap = getCurrentMaxHostStatus(service, currentMap);
//        }
////        String service = DataSourceTypeManager.EAI;
////        currentMap = getCurrentMaxHostStatus(service, currentMap);
////        service = DataSourceTypeManager.FEP;
////        currentMap = getCurrentMaxHostStatus(service, currentMap);
//
//        HostStatusVo currentVo = (HostStatusVo)currentMap.get("currentVo");
//
//        if( todaysTransactionTrackingVo.getTotalProc() == 0 && todaysTransactionTrackingVo.getTotalError() == 0 && 
//        		currentVo.getCpu() == 0 && currentVo.getMemory() == 0 && currentVo.getDisk() == 0 ) {
//        	return ;
//        }
//
//        sb.append("[RMS]");
//        sb.append("[�ѰǼ�:").append(
//            f.format(todaysTransactionTrackingVo.getTotalProc())).append("]");
//
//        sb.append("[����:").append(
//            f.format(todaysTransactionTrackingVo.getTotalError())).append("]");
//
//        sb.append("[CPU:").append((String)currentMap.get("cpuHostName")).append(
//            ":").append(currentVo.getCpu()).append("%]");
//
//        sb.append("[MEM:")
//                .append((String)currentMap.get("memHostName"))
//                .append(":")
//                .append(currentVo.getMemory())
//                .append("%]");
//
//        sb.append("[DISK:")
//                .append((String)currentMap.get("dskHostName"))
//                .append(":")
//                .append(currentVo.getDisk())
//                .append("%]");
//    }
//
//    public HashMap<String, Object> getCurrentMaxHostStatus(String service, HashMap<String, Object> currentMap) {
//    	List<Map<String, String>> instList = eaiServerInfoService.getEaiServerIpList(service);
//
//        HostStatusVo currentVo = (HostStatusVo)currentMap.get("currentVo");
//
//        for (Map<String, String> map : instList) {
//            String hostName = map.get("HOSTNAME");
//            String instanceName = map.get("EAISVRINSTNM");
////            char num = hostName.charAt(hostName.length() - 1);
//            char num = instanceName.charAt(instanceName.length() - 2);
//
//            HostStatusVo hostStatusVo = (HostStatusVo) repository.getMonitorData(
//                hostName, instanceName, HostStatusVo.class);
//
//            if (hostStatusVo != null) {
//                if (currentVo.getCpu() < hostStatusVo.getCpu()) {
//                    currentVo.setCpu(hostStatusVo.getCpu());
//                    currentMap.put("cpuHostName", service.substring(0, 1) + num);
//                }
//
//                if (currentVo.getMemory() < hostStatusVo.getMemory()) {
//                    currentVo.setMemory(hostStatusVo.getMemory());
//                    currentMap.put("memHostName", service.substring(0, 1) + num);
//                }
//
//                if (currentVo.getDisk() < hostStatusVo.getDisk()) {
//                    currentVo.setDisk(hostStatusVo.getDisk());
//                    currentMap.put("dskHostName", service.substring(0, 1) + num);
//                }
//            }
//        }
//        
//        currentMap.put("currentVo", currentVo);
//        
//        return currentMap;
//    }
//    
//    /**
//     * Week 
//     * 00�� 30�� , 06�� 30�п� SMS����
//     */
//    @ScheduleMethod(type = ScheduleType.CRON, cronExpression = "0 * * * * ?")
//    public void week() {
//        sendSms();
//    }
//
//    /**
//     * Weekend
//     * 12�� 30��, 18�� 30�п� SMS����. 
//     */
//    @ScheduleMethod(type = ScheduleType.CRON, cronExpression = "0 30 12,18 ? * SUN,SAT")
//    public void weekend() {
//      	String times = monitoringContext.getStringProperty("rms.schedule.SmsMonitorScheduler", "1230;1830"); // ����ð�
//      	if( !CommonUtil.getThisSchedule(times, null) ) {
//      		logger.warn("NOT THIS TIME - SmsMonitorScheduler");
//      		return ; 
//      	}
//      	
//        sendSms();
//    }
//
//
//
//}
