package com.vci.client.utils;
|
|
import java.util.Iterator;
|
import java.util.LinkedHashMap;
|
import java.util.Map;
|
|
public class TimeMonitor {
|
private Map<String, String> keyMap = new LinkedHashMap<String, String>();
|
private Map<String, Long> beginTimeMap = new LinkedHashMap<String, Long>();
|
private Map<String, Long> endTimeMap = new LinkedHashMap<String, Long>();
|
private int timeUnit = 1; // 1:ms(毫秒) 2:s(秒)
|
|
private int maxLen = 1;
|
|
public long getCurrentTimeMillis(){
|
return System.currentTimeMillis();
|
}
|
|
public void begin(String key){
|
begin(key, getCurrentTimeMillis());
|
}
|
|
public void begin(String key, long timeMillis){
|
putToMap(keyMap, beginTimeMap, key, timeMillis);
|
}
|
|
public void end(String key, boolean appendToEnd){
|
long begin = beginTimeMap.get(key);
|
removeFromMap(key);
|
long end = getCurrentTimeMillis();
|
begin(key, begin);
|
end(key, end);
|
}
|
private void removeFromMap(String key){
|
removeFromMap(key, keyMap);
|
removeFromMap(key, beginTimeMap);
|
removeFromMap(key, endTimeMap);
|
}
|
private void removeFromMap(String key, @SuppressWarnings("rawtypes") Map map){
|
map.remove(key);
|
}
|
|
public void end(String key){
|
end(key, getCurrentTimeMillis());
|
}
|
|
public void end(String key, long timeMillis){
|
putToMap(keyMap, endTimeMap, key, timeMillis);
|
}
|
|
private void putToMap(Map<String, String> keyMap, Map<String, Long> timeMap,
|
String key, long timeMillis){
|
int len = key.length();
|
if(len > maxLen){
|
maxLen = len;
|
}
|
keyMap.put(key, key);
|
timeMap.put(key, timeMillis);
|
}
|
|
public void beginEnd(String key, long begin, long end){
|
begin(key, begin);
|
end(key, end);
|
}
|
|
public Long getUseTime(String key){
|
Long begin = beginTimeMap.get(key);
|
Long end = endTimeMap.get(key);
|
if(begin == null || end == null) return Long.MAX_VALUE;
|
|
Long span = ((end - begin));
|
return span;
|
}
|
|
public String getAllUseTimeInfo(){
|
String format = getOutFormat();
|
StringBuffer sb = new StringBuffer();
|
Iterator<String> its = keyMap.keySet().iterator();
|
while(its.hasNext()){
|
String key = its.next();
|
Long span = getUseTime(key);
|
sb.append(String.format(format, key, String.valueOf(span))).append("\n");
|
}
|
return sb.toString();
|
}
|
|
public String getOutFormat(){
|
return "%" + String.valueOf(getMaxLen()) + "s: %s(ms)";
|
}
|
public int getTimeUnit() {
|
return timeUnit;
|
}
|
|
public void setTimeUnit(int timeUnit) {
|
this.timeUnit = timeUnit;
|
}
|
|
public int getMaxLen() {
|
return maxLen;
|
}
|
|
public void setMaxLen(int maxLen) {
|
this.maxLen = maxLen;
|
}
|
|
@Override
|
public String toString(){
|
return getAllUseTimeInfo();
|
}
|
}
|