/** * 즐겨찾기 추가 Action * * @return */ public String addFavorite() { PropertyReader gProps = PropertyReader.getInstance(); String FAVORITE_URL = gProps.getPropertyValue("FAVORITE_URL"); String FAVORITE_V_TITLE = gProps.getPropertyValue("FAVORITE_V_TITLE"); String NGC_DOMAIN = Constant.NGC_DOMAIN; String WAP_CONTEXT_NAME = Constant.NGC_CONTEXT_NAME; String SU = gProps.getPropertyValue("SK_SU"); String SM = gProps.getPropertyValue("SK_SM"); String favoriteUrl = FAVORITE_URL + "?v_title=" + FAVORITE_V_TITLE + "&v_url=" + NGC_DOMAIN + WAP_CONTEXT_NAME + "?SU=" + SU + "&SM=" + SM; m_favoriteURL = favoriteUrl; return SUCCESS; }
public class GameLogExecutorNate extends SqlMapBuilder implements Executor { private static Logger m_traceLogger = Logger.getLogger("TRACE"); private static PropertyReader pror = PropertyReader.getInstance(); private static final String ECG_LOG_PATH = ""; // 선언된 값만큼 LOG파일에서 데이터를 읽어와 배치를 실행한다. private static final int INSERT_DATA_LIMIT_COUNT = 100; int totalCount = 0; @Override public void execute() throws Exception { m_traceLogger.info("GameLogExecutorNate start"); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); BufferedReader br = null; try { Calendar c = Calendar.getInstance(); c.add(Calendar.DAY_OF_YEAR, -1); // 하루전 날짜 가져옴 String str = String.format("%1$tF", c); // yyyy-mm-dd String path = pror.getPropertyValue("GAME_LOG_PATH") + "stat.log_" + str; ArrayList<GameLogVo> gameVoList = null; // String path = pror.getPropertyValue("GAME_LOG_PATH") + "stat.log_2011-07-12"; //test File f = new File(path); if (m_traceLogger.isDebugEnabled()) { m_traceLogger.debug(" [ File : " + path + "]Is File Exist : " + f.exists()); } if (!f.exists()) { // stat.log_yyyy-mm-dd 파일이 존재하지 않는 경우 stat.log 마지막 수정일 조회 String pathDefault = pror.getPropertyValue("GAME_LOG_PATH") + "stat.log"; File defaultFile = new File(pathDefault); String statModyfy = sdf.format(defaultFile.lastModified()); // stat.log 파일 마지막 변경일 String yesterDay = sdf.format(c.getTime()); // 어제일짜 if (m_traceLogger.isDebugEnabled()) { m_traceLogger.debug("PageViewStat log path : " + pathDefault); m_traceLogger.debug("YesterDay : " + yesterDay); m_traceLogger.debug("stat.log Last Modify Day : " + statModyfy); } if (yesterDay.equals(statModyfy)) { // stat.log 전일 일짜로 수정한 기록이 있을 경우 stat.log DB에 저장 try { br = new BufferedReader(new FileReader(defaultFile)); // 파일 읽기 gameVoList = getGameLogList(br); if (gameVoList == null) { m_traceLogger.warn("Log Data Is Empty .... exit!!"); } else { // DB 저장 boolean result = true; while (result) { result = insertLog(gameVoList); } if (m_traceLogger.isDebugEnabled()) { m_traceLogger.debug("gameVoList : " + gameVoList); m_traceLogger.debug("Total Count : " + gameVoList.size()); } } // defaultFile.delete(); } catch (Exception e) { m_traceLogger.error(e.getMessage()); } finally { m_traceLogger.debug("GameLogExecutorNate end"); } } else { // 수정한 기록이 없을 경루 DB기록 안함 m_traceLogger.error("PageViewStat log file does not exist."); } } else { // stat.log_yyyy-mm-dd 어제일짜 로그파일이 존재하는 경우 DB 기록 if (m_traceLogger.isDebugEnabled()) { m_traceLogger.debug("PageViewStat log path : " + path); } try { br = new BufferedReader(new FileReader(f)); // 파일 읽기 gameVoList = getGameLogList(br); if (gameVoList == null) { m_traceLogger.warn("Log Data Is Empty .... exit!!"); } else { // DB 저장 boolean result = true; while (result) { result = insertLog(gameVoList); } if (m_traceLogger.isDebugEnabled()) { m_traceLogger.debug("gameVoList : " + gameVoList); m_traceLogger.debug("Total Count : " + gameVoList.size()); } } // f.delete(); } catch (Exception e) { e.printStackTrace(); m_traceLogger.error(e.getMessage()); } } } catch (Exception e) { e.printStackTrace(); m_traceLogger.error(e.getMessage()); } m_traceLogger.info("GameLogExecutorNate end"); } /** * DB 데이터 저장 * * @param gameVoList * @return */ private boolean insertLog(ArrayList<GameLogVo> gameVoList) { int insertIndex = 0; boolean result = true; try { getSqlMapClient().startTransaction(); m_traceLogger.info("startTransaction()"); getSqlMapClient().startBatch(); m_traceLogger.info("startBatch()"); while (result) { getSqlMapClient().insert("Daemon.insertLog", gameVoList.get(totalCount)); totalCount++; insertIndex++; if (totalCount == gameVoList.size()) { // 리스트 사이즈 마지막 인덱스일경우 중지 result = false; } else if (insertIndex == INSERT_DATA_LIMIT_COUNT) { // 100개 입력시 중지 result = false; } } getSqlMapClient().executeBatch(); m_traceLogger.info("executeBatch()"); getSqlMapClient().commitTransaction(); m_traceLogger.info("commitTransaction()"); } catch (SQLException e) { m_traceLogger.error("stat.log File DB Insert Error [ message : " + e.getMessage() + " ]"); m_traceLogger.error("rollbackTransaction()"); printQuery("Daemon.insertLog", gameVoList.get(totalCount)); } catch (Exception e) { m_traceLogger.error("rollbackTransaction()"); printQuery("Daemon.insertLog", gameVoList.get(totalCount)); m_traceLogger.error(e.getMessage()); e.printStackTrace(); } finally { try { getSqlMapClient().endTransaction(); if (totalCount == gameVoList.size()) { // 리스트 데이터를 모두 저장하였으면 false return false; } else { // 저장할 데이터가 남아있으면 true return true; } } catch (SQLException e) { m_traceLogger.error("endTransaction ERROR"); } m_traceLogger.info("EndTransaction()"); } return result; } /** * log 파일을 GameLogVO 객체 리스트로 변환 * * @param br * @return * @throws IOException */ private ArrayList<GameLogVo> getGameLogList(BufferedReader br) throws IOException { String r = ""; GameLogVo vo = null; ArrayList<GameLogVo> list = new ArrayList<GameLogVo>(); while ((r = br.readLine()) != null) { vo = new GameLogVo(); String[] fValue = r.split(","); if (fValue != null) { if (fValue.length == 3 || fValue.length == 4) { vo.setDate(transCal(fValue[0])); vo.setMdn(fValue[1]); vo.setPage_url(fValue[2]); vo.setPageCount(1); if (fValue.length != 4) { vo.setSiteCode(""); } else { vo.setSiteCode(fValue[3]); } if (list.size() == 0) { list.add(vo); } else { boolean isExistData = false; int equalsListIndex = 0; for (int i = 0; i < list.size(); i++) { if (vo.getMdn().equals(list.get(i).getMdn()) && vo.getPage_url().equals(list.get(i).getPage_url()) && vo.getSiteCode().equals(list.get(i).getSiteCode())) { isExistData = true; equalsListIndex = i; } } if (isExistData) { // 동일한 데이터 존재시 count + 1 list.get(equalsListIndex).setPageCount(list.get(equalsListIndex).getPageCount() + 1); } else { // 동일한 데이터 존재하지 않을 경우 list.add(vo); } } } } } if (list.isEmpty() || list.size() == 0) { return null; } return list; } public static String transCal(String date) { Calendar c = Calendar.getInstance(); c.setTimeInMillis(Long.parseLong(date)); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); return sdf.format(c.getTime()); } public static void main(String[] args) { Executor ex = new GameLogExecutorNate(); try { ex.execute(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }