package org.xmx0632.deliciousfruit.api.v1.helper; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import org.springframework.stereotype.Component; import org.xmx0632.deliciousfruit.web.admin.ApiStat; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @Component public class ApiStatService { private Map<String, AtomicInteger> apiInvokeStat = Maps.newConcurrentMap(); public int increaseCounter(String apiName) { if (apiInvokeStat.containsKey(apiName)) { AtomicInteger apiCounter = apiInvokeStat.get(apiName); int newCounter = apiCounter.incrementAndGet(); return newCounter; } else { int startFrom = 1; apiInvokeStat.put(apiName, new AtomicInteger(startFrom)); return startFrom; } } public String getApiInvokeInfo() { StringBuilder sb = new StringBuilder(); Set<Entry<String, AtomicInteger>> set = apiInvokeStat.entrySet(); for (Entry<String, AtomicInteger> info : set) { sb.append(info.getKey()).append(" ").append(info.getValue()) .append(" times").append("\n"); } return sb.toString(); } public List<ApiStat> getStatList() { List<ApiStat> stats = Lists.newArrayList(); Set<Entry<String, AtomicInteger>> set = apiInvokeStat.entrySet(); for (Entry<String, AtomicInteger> info : set) { stats.add(new ApiStat(info.getKey(), info.getValue().intValue())); } return stats; } public void reset() { apiInvokeStat.clear(); } }