package com.eactive.eai.batch.running.management;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.TimerTask;
import com.eactive.eai.batch.doc.BatchDoc;
import com.eactive.eai.batch.running.BatchRunningJobManager;
import com.eactive.eai.batch.scheduler.JobProcessingVO;
import com.eactive.eai.batch.scheduler.SchedulerMessageManager;
import com.eactive.eai.common.util.Logger;
import com.eactive.eai.common.util.UCMsgSenderUtil;

public class RunningJobChecker  extends TimerTask{
	
    /** 
     * EAI FRAMEWORK DEFAULT FILE LOGGER
     */
	static Logger logger = Logger.getLogger(Logger.LOGGER_SCHEDULER);
	    
    
    /** 
    * 1. 기능 : Default 생성자
    * 2. 처리 개요 : 
    * 3. 주의사항 
    **/   
    public RunningJobChecker() {
    }
    
    
    
    
    /** 
    * 1. 기능 : 정해진시간에 초기화 수행
    * 2. 처리 개요 : 
    *     - DatetimeUtil로부터 현재 일자를 얻어 비교하여 일자가 변경된 경우 reset
    *     - 최근시간(10분 또는 1시간) 마다 reset
    * 3. 주의사항 
    **/   
    public void run()
    {
    	logger.debug( "[RunningJobChecker]비정상적인 Processing Data 검사 시작" );
    	try {
    		ArrayList<JobProcessingVO> al1 = SchedulerMessageManager.getInstance().getProcessinbgJobList();
    		HashMap<String, BatchDoc>  hm  = BatchRunningJobManager.getInstance().getAllRunningDocuments();
    		ArrayList<JobProcessingVO> al2 = SchedulerMessageManager.getInstance().getProcessinbgJobList();
    		for (int inx = 0; inx < al2.size(); inx++) {
				String uuid = al2.get(inx).getBjobDmndMsgID();
				BatchDoc doc = hm.get(uuid);
				if ( doc == null ){
					for (int jnx = 0; jnx < al1.size(); jnx++) {
						if ( al1.get(jnx).getBjobDmndMsgID().equals(uuid) ){
							String message = "[RunningJobChecker]비정상적인 Processing Data 발견--->\n" + al2.get(inx);
							logger.warn( message );
							try {
								UCMsgSenderUtil.sendUCMsg( message );
							} catch (Exception e) {
							}
						}
					}
				}
			}
        	logger.debug( "[RunningJobChecker]비정상적인 Processing Data 검사 종료" );
		} catch (Exception e) {
			logger.warn( "[RunningJobChecker]비정상적인 Processing Data 검사 중 ..." + e.getMessage(), e);
		}
    }
}
