package net.ttddyy.dsproxy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Hold QueryCount object by datasource name.
*
* @author Tadaya Tsuyukubo
*/
public class QueryCountHolder {
private static ThreadLocal<Map<String, QueryCount>> queryCountMapHolder = new ThreadLocal<Map<String, QueryCount>>() {
@Override
protected Map<String, QueryCount> initialValue() {
return new HashMap<String, QueryCount>();
}
};
public static QueryCount get(String dataSourceName) {
final Map<String, QueryCount> map = queryCountMapHolder.get();
return map.get(dataSourceName);
}
public static QueryCount getGrandTotal() {
final QueryCount totalCount = new QueryCount();
final Map<String, QueryCount> map = queryCountMapHolder.get();
for (QueryCount queryCount : map.values()) {
totalCount.setSelect(totalCount.getSelect() + queryCount.getSelect());
totalCount.setInsert(totalCount.getInsert() + queryCount.getInsert());
totalCount.setUpdate(totalCount.getUpdate() + queryCount.getUpdate());
totalCount.setDelete(totalCount.getDelete() + queryCount.getDelete());
totalCount.setOther(totalCount.getOther() + queryCount.getOther());
totalCount.setTotal(totalCount.getTotal() + queryCount.getTotal());
totalCount.setSuccess(totalCount.getSuccess() + queryCount.getSuccess());
totalCount.setFailure(totalCount.getFailure() + queryCount.getFailure());
totalCount.setTime(totalCount.getTime() + queryCount.getTime());
}
return totalCount;
}
public static void put(String dataSourceName, QueryCount count) {
queryCountMapHolder.get().put(dataSourceName, count);
}
public static List<String> getDataSourceNamesAsList() {
return new ArrayList<String>(getDataSourceNames());
}
public static Set<String> getDataSourceNames() {
return queryCountMapHolder.get().keySet();
}
public static void clear() {
queryCountMapHolder.get().clear();
}
}