package kr.gmtc.tss.filelog; import java.util.Queue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import kr.gmtc.tss.data.vo.RadarTrackVO; import kr.gmtc.tss.main.MainServer; import kr.gmtc.tss.util.FileUtil; public class DataLogger implements Runnable { private Logger logger = LoggerFactory.getLogger(this.getClass()); private Queue radarTrackQueue; private boolean isRunning = true; private int listChunkSize = 100; private long sleepMillis; public DataLogger(Queue radarTrackQueue, int listChunkSize, long sleepMillis) { this.radarTrackQueue = radarTrackQueue; this.listChunkSize = listChunkSize; this.sleepMillis = sleepMillis; } @Override public void run() { isRunning = true; while (isRunning) { try { String [] chunkArr = getChunkMessageArr(radarTrackQueue); for (int i = 0; i < chunkArr.length; i++) { FileUtil.writeLogFile(getMessageBody(chunkArr[i]), MainServer.DATA_FILE_NAME); } } catch (Exception e) { logger.info("-- [SqlLogger] LogSave error : " +e.getLocalizedMessage()); } sleep(sleepMillis); } } private String [] getChunkMessageArr(Queue radarTrackQueue) { int loopCnt = 0; if(radarTrackQueue.size()>listChunkSize) { loopCnt = listChunkSize; }else { loopCnt = radarTrackQueue.size(); } String [] chunkArr = new String[loopCnt]; for (int i = 0; i < loopCnt; i++) { chunkArr[i] = radarTrackQueue.poll(); } return chunkArr; } private String getMessageBody(String str) { StringBuilder sb = new StringBuilder(); sb.append(str); sb.append("\n"); return sb.toString(); } private void sleep(long millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { logger.debug("[SqlLogger] sleep error : "+e.getLocalizedMessage()); } } public void setRunning(boolean isRunning) { this.isRunning = isRunning; } }