/******************************************************************************* * Copyright (c) 2013 hangum. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v2.1 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Contributors: * hangum - initial API and implementation ******************************************************************************/ package com.hangum.tadpole.engine.query.sql; import java.sql.SQLException; import java.sql.Timestamp; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import com.hangum.tadpole.commons.dialogs.message.dao.RequestResultDAO; import com.hangum.tadpole.commons.exception.TadpoleSQLManagerException; import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine; import com.hangum.tadpole.commons.util.ApplicationArgumentUtils; import com.hangum.tadpole.engine.initialize.TadpoleSystemInitializer; import com.hangum.tadpole.engine.manager.TadpoleSQLManager; import com.hangum.tadpole.engine.query.dao.system.ExecutedSqlResourceDAO; import com.hangum.tadpole.engine.query.dao.system.ExecutedSqlResourceDataDAO; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.utils.TimeZoneUtil; import com.ibatis.sqlmap.client.SqlMapClient; /** * executed_sql_resource관련 테이블 쿼리. * 해당 테이블은 사용자 sql 실행쿼리에 관한 정보를 가지고 있습니다. * * @author hangum * */ public class TadpoleSystem_ExecutedSQL { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(TadpoleSystem_ExecutedSQL.class); /** * 모든 sql 히스토리 조회 * * @param strEmail * @param strType * @param startTime * @param endTime * @param duringExecute * @param strSearch * @return * @throws TadpoleSQLManagerException * @throws SQLException */ public static List<RequestResultDAO> getAllExecuteQueryHistoryDetail(String strEmail, String strType, long startTime, long endTime, int duringExecute, String strSearch) throws TadpoleSQLManagerException, SQLException { return getExecuteQueryHistoryDetail(strEmail, strType, "", startTime, endTime, duringExecute, strSearch); } /** * 쿼리 실행 히스토리 디테일 창을 얻습니다. * * @param strType * @param dbSeq * @param executeTime * @param durationLimit * @return * @throws TadpoleSQLManagerException, SQLException */ public static List<RequestResultDAO> getExecuteQueryHistoryDetail(String strEmail, String strType, String dbSeq, long startTime, long endTime, int duringExecute, String strSearch) throws TadpoleSQLManagerException, SQLException { List<RequestResultDAO> returnSQLHistory = new ArrayList<RequestResultDAO>(); Map<String, Object> queryMap = new HashMap<String, Object>(); queryMap.put("email", strEmail); if(!"".equals(dbSeq)) queryMap.put("db_seq", dbSeq); if(!"All".equals(strType)) queryMap.put("type", strType); if(ApplicationArgumentUtils.isDBServer()) { Date date = new Date(TimeZoneUtil.chageTimeZone(startTime)); DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); queryMap.put("startTime", formatter.format(date)); Date dateendTime = new Date(TimeZoneUtil.chageTimeZone(endTime)); queryMap.put("endTime", formatter.format(dateendTime)); } else { queryMap.put("startTime", startTime); queryMap.put("endTime", endTime); } queryMap.put("duration", duringExecute); queryMap.put("count", 3000); queryMap.put("strSearch", strSearch); SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); List<java.util.Map> listResourceData = new ArrayList<Map>(); if(PublicTadpoleDefine.EXECUTE_SQL_TYPE.API.name().endsWith(strType)) { listResourceData = sqlClient.queryForList("getExecuteQueryHistoryAPIDetail", queryMap); } else { listResourceData = sqlClient.queryForList("getExecuteQueryHistoryDetail", queryMap); } for (Map resultMap : listResourceData) { long seq = (Long)resultMap.get("executed_sql_resource_seq"); Long startdateexecute = 0l; String strSQLText = (String)resultMap.get("datas"); Long enddateexecute = 0l; if(ApplicationArgumentUtils.isDBServer()) { startdateexecute = ((Timestamp)resultMap.get("startdateexecute")).getTime(); enddateexecute = ((Timestamp)resultMap.get("enddateexecute")).getTime(); } else { startdateexecute = (Long)resultMap.get("startdateexecute"); enddateexecute = (Long)resultMap.get("enddateexecute"); } int row = (Integer)resultMap.get("row"); String result = (String)resultMap.get("result"); String userName = resultMap.get("name") == null?"":(String)resultMap.get("name"); String userEmail = (String)resultMap.get("email"); String dbName = (String) resultMap.get("display_name"); String ipAddress = (String) resultMap.get("ipaddress"); int dbSeq2 = (Integer) resultMap.get("dbseq"); String strMessage = (String)resultMap.get("message"); int duration = (Integer) resultMap.get("duration"); RequestResultDAO dao = new RequestResultDAO(duration,userName+"("+ userEmail+")", dbName, new Timestamp(startdateexecute), strSQLText, new Timestamp(enddateexecute), row, result, strMessage, ipAddress, dbSeq2); dao.setSeq(seq); if(PublicTadpoleDefine.EXECUTE_SQL_TYPE.API.name().endsWith(strType)) { dao.setEXECUSTE_SQL_TYPE(PublicTadpoleDefine.EXECUTE_SQL_TYPE.API); } else { dao.setEXECUSTE_SQL_TYPE(PublicTadpoleDefine.EXECUTE_SQL_TYPE.EDITOR); } returnSQLHistory.add(dao); } return returnSQLHistory; } /** * execute query * * @param seq * @return * @throws TadpoleSQLManagerException * @throws SQLException */ public static ExecutedSqlResourceDAO getExecuteQuery(long seq) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); ExecutedSqlResourceDAO queryObjectDAO = (ExecutedSqlResourceDAO)sqlClient.queryForObject("getExecuteQueryObject", seq); return queryObjectDAO; } /** * 마지막 실행했떤 쿼리 20개를 리턴합니다. * * @param user_seq * @param dbSeq * @return * @throws TadpoleSQLManagerException, SQLException */ public static List<RequestResultDAO> getExecuteQueryHistory(int user_seq, int dbSeq, String filter) throws TadpoleSQLManagerException, SQLException { List<RequestResultDAO> returnSQLHistory = new ArrayList<RequestResultDAO>(); Map<String, Object> queryMap = new HashMap<String, Object>(); queryMap.put("user_seq",user_seq); queryMap.put("db_seq", dbSeq); queryMap.put("filter", "%" + filter + "%"); queryMap.put("count", 20); SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); List<java.util.Map> listResourceData = sqlClient.queryForList("getExecuteQueryHistory", queryMap); for (Map resultMap : listResourceData) { long seq = (Long)resultMap.get("executed_sql_resource_seq"); Long startdateexecute = 0l; // This case sqlite if(resultMap.get("startdateexecute") instanceof Long) { startdateexecute = (Long)resultMap.get("startdateexecute"); // This case mysql } else { startdateexecute = ((Timestamp)resultMap.get("startdateexecute")).getTime(); } String strSQLText = (String)resultMap.get("datas"); Long enddateexecute = 0l; // This case sqlite if(resultMap.get("enddateexecute") instanceof Long) { enddateexecute = (Long)resultMap.get("enddateexecute"); // This case mysql } else { enddateexecute = ((Timestamp)resultMap.get("enddateexecute")).getTime(); } String strMessage = (String)resultMap.get("message"); int row = (Integer)resultMap.get("row"); String result = (String)resultMap.get("result"); int duration = (Integer)resultMap.get("duration"); RequestResultDAO dao = new RequestResultDAO(duration, new Timestamp(startdateexecute), strSQLText, new Timestamp(enddateexecute), row, result, strMessage); dao.setSeq(seq); returnSQLHistory.add(dao); } return returnSQLHistory; } /** * save sqlhistory * * @param user_seq * @param userDB * @param sqlType * @param requestResultDAO */ public static long saveExecuteSQUeryResource(int user_seq, UserDBDAO userDB, PublicTadpoleDefine.EXECUTE_SQL_TYPE sqlType, RequestResultDAO requestResultDAO) throws TadpoleSQLManagerException, SQLException { if(PublicTadpoleDefine.YES_NO.YES.name().equals(userDB.getIs_profile())) { ExecutedSqlResourceDAO executeSQLResourceDao = new ExecutedSqlResourceDAO(); executeSQLResourceDao.setDb_seq(userDB.getSeq()); executeSQLResourceDao.setUser_seq(user_seq); executeSQLResourceDao.setTypes(sqlType.toString()); executeSQLResourceDao.setStartDateExecute(requestResultDAO.getStartDateExecute()); executeSQLResourceDao.setEndDateExecute(requestResultDAO.getEndDateExecute()); long duration = 0l; try { duration = requestResultDAO.getEndDateExecute().getTime() - requestResultDAO.getStartDateExecute().getTime(); } catch(Exception e){} executeSQLResourceDao.setDuration(Integer.parseInt(""+duration)); executeSQLResourceDao.setRow(requestResultDAO.getRows()); executeSQLResourceDao.setResult(requestResultDAO.getResult()); executeSQLResourceDao.setMessage(requestResultDAO.getMesssage()); executeSQLResourceDao.setIpAddress(requestResultDAO.getIpAddress()); // 기존에 등록 되어 있는지 검사한다 SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); ExecutedSqlResourceDAO executeSQL = (ExecutedSqlResourceDAO)sqlClient.insert("userExecuteSQLResourceInsert", executeSQLResourceDao); //$NON-NLS-1$ insertResourceData(executeSQL.getSeq(), requestResultDAO.getStartDateExecute(), requestResultDAO.getStrSQLText()); return executeSQL.getSeq(); } return -1; } /** * resource data * * @param seq * @param startDateExecute * @param contents * @throws TadpoleSQLManagerException, SQLException */ private static void insertResourceData(long seq, Timestamp startDateExecute, String contents) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); // content data를 저장합니다. ExecutedSqlResourceDataDAO dataDao = new ExecutedSqlResourceDataDAO(); dataDao.setExecuted_sql_resource_seq(seq); dataDao.setStartDateExecute(startDateExecute); dataDao.setDatas(contents); sqlClient.insert("userExecuteSQLResourceDataInsert", dataDao); //$NON-NLS-1$ } }