package com.hangum.tadpole.monitoring.core.manager.event; import java.io.FileWriter; import java.util.List; import org.apache.log4j.Logger; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.hangum.tadpole.engine.define.DBDefine; import com.hangum.tadpole.engine.manager.TadpoleSQLManager; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.query.dao.system.monitoring.MonitoringResultDAO; import com.hangum.tadpole.monitoring.core.utils.MonitoringDefine.AFTER_PROCESS_TYPE; import com.hangum.tadpole.monitoring.core.utils.Utils; import com.ibatis.sqlmap.client.SqlMapClient; /** * monitoring event manager * * @author hangum * */ public class EventManager { private static final Logger logger = Logger.getLogger(EventManager.class); private static EventManager instance; private EventManager() {} public static EventManager getInstance() { if(instance == null) { instance = new EventManager(); } return instance; } /** * event proceed * * @param listEvent */ public void proceedEvent(List<MonitoringResultDAO> listMonitoringResult) { final JsonParser parser = new JsonParser(); for (MonitoringResultDAO resultDAO : listMonitoringResult) { final UserDBDAO userDB = resultDAO.getUserDB(); String strAfterType = resultDAO.getMonitoringIndexDAO().getAfter_type(); if("EMAIL".equals(strAfterType)) { sendEmail(resultDAO); } else if(AFTER_PROCESS_TYPE.PUSH_EMAIL.equals(strAfterType)) { sendEmail(resultDAO); } else if("KILL_AFTER_EMAIL".equals(strAfterType)) { sendEmail(resultDAO); JsonElement jsonElement = parser.parse(resultDAO.getQuery_result()); if(jsonElement == null) { logger.info("Not found to SQL Result. Result index is " + resultDAO.getSeq()); continue; } else { JsonObject jsonObject = jsonElement.getAsJsonObject(); String id = ""; if(DBDefine.MYSQL_DEFAULT == resultDAO.getUserDB().getDBDefine() || DBDefine.MARIADB_DEFAULT == resultDAO.getUserDB().getDBDefine()) { id = jsonObject.getAsJsonPrimitive("id").getAsString(); } else if(DBDefine.POSTGRE_DEFAULT == resultDAO.getUserDB().getDBDefine()) { id = jsonObject.getAsJsonPrimitive("pid").getAsString(); } else { logger.error("Do not support Session kill."); continue; } try { SqlMapClient client = TadpoleSQLManager.getInstance(userDB); if (userDB.getDBDefine() == DBDefine.POSTGRE_DEFAULT) { client.queryForObject("killProcess", Integer.parseInt(id)); } else { client.queryForObject("killProcess", id); } } catch(Exception e) { logger.error("=[monitoring kill session][start]=============================================================================="); logger.error(resultDAO.getCreate_time() + "\t[db seq]" + resultDAO.getUserDB().getSeq() + "\t [Json msg]" + jsonElement.toString()); logger.error("kill session", e); logger.error("=[monitoring kill session][end]=============================================================================="); } } } // end if kill_after email } } /** * send mail * * @param resultDao */ private void sendEmail(MonitoringResultDAO resultDao) { if(logger.isDebugEnabled()) logger.debug(resultDao.getQuery_result()); try { String strMailTitle = resultDao.getUserDB().getDisplay_name() + " - " + resultDao.getMonitoringIndexDAO().getTitle(); String strMailContent = strMailTitle + "\n" + resultDao.getSystem_description() + "\n" + resultDao.getQuery_result(); // TODO 이메일 보내기를 막아놓고 임시조취 // Utils.sendEmail(resultDao.getMonitoringIndexDAO().getReceiver(), strMailTitle, strMailContent); FileWriter fw = new FileWriter("/Users/hangum/Downloads/mail.txt", true); fw.write(strMailTitle); fw.flush(); fw.close(); } catch (Exception e) { logger.error("Mail send", e); } } }