EyeTSS/radar/src/main/java/kr/gmtc/tss/filelog/DataLogger.java

85 lines
2.0 KiB
Java

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<String> radarTrackQueue;
private boolean isRunning = true;
private int listChunkSize = 100;
private long sleepMillis;
public DataLogger(Queue<String> 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<String> 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;
}
}