package com.ycsoft.report.query.menory;
import java.util.Map;
import com.ycsoft.commons.exception.ReportException;
import com.ycsoft.commons.helper.LoggerHelper;
import com.ycsoft.report.commons.CopiedIterator;
import com.ycsoft.report.commons.ReportConstants;
import com.ycsoft.report.query.QueryContainer;
import com.ycsoft.report.query.QueryResult;
public class CacheManageClearRealTime extends Thread {
public long clearCache() throws ReportException{
Map<String, QueryResult> qrmap = QueryContainer.getQueryrealtimecon();
long datenow=System.currentTimeMillis();
if(qrmap.size()==0) return datenow;
//Iterator<String> iterator=qrmap.keySet().iterator();
CopiedIterator<String> iterator=new CopiedIterator<String>(qrmap);
while(iterator.hasNext()){
QueryResult qr=qrmap.get(iterator.next());
int mi= (int)((datenow-qr.getVisitDate().getTime())/(1000*60));
if(mi>=ReportConstants.CLEAR_REP_CACHE){
qr.clear();
iterator.remove();
//LoggerHelper.debug(this.getClass(),"clear cache id:"+ qr.getQueryId());
}
}
return datenow;
}
/**
* 定时清理报表容器中的实时查询记录
*/
public void run() {
while (true) {
try {
Thread.sleep(ReportConstants.CLEAR_REP_CACHE * 60 * 1000);
clearCache();
} catch (Exception e) {
LoggerHelper.error(CacheManageClearRealTime.class, "CLEAR_REP_CACHE_ERROR:", e);
}
}
}
}