/* * Copyright 1999-2017 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.druid.support.spring.stat; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class SpringStat { private ConcurrentMap<SpringMethodInfo, SpringMethodStat> methodStats = new ConcurrentHashMap<SpringMethodInfo, SpringMethodStat>(16, 0.75f, 1); public SpringStat(){ } public void reset() { for (SpringMethodStat stat : methodStats.values()) { stat.reset(); } } public SpringMethodStat getMethodStat(SpringMethodInfo methodInfo, boolean create) { SpringMethodStat methodStat = methodStats.get(methodInfo); if (methodStat != null) { return methodStat; } if (create) { methodStats.putIfAbsent(methodInfo, new SpringMethodStat(methodInfo)); methodStat = methodStats.get(methodInfo); } return methodStat; } public List<SpringMethodStatValue> getStatList(boolean reset) { List<SpringMethodStatValue> statValueList = new ArrayList<SpringMethodStatValue>(this.methodStats.size()); for (SpringMethodStat methodStat : this.methodStats.values()) { SpringMethodStatValue statValue = methodStat.getStatValue(reset); if (statValue.getRunningCount() == 0 && statValue.getExecuteCount() == 0) { continue; } statValueList.add(statValue); } return statValueList; } public List<Map<String, Object>> getMethodStatDataList() { List<Map<String, Object>> methodStatDataList = new ArrayList<Map<String, Object>>(this.methodStats.size()); for (SpringMethodStat methodStat : this.methodStats.values()) { Map<String, Object> methodStatData = methodStat.getStatData(); int runningCount = ((Number) methodStatData.get("RunningCount")).intValue(); long executeCount = (Long) methodStatData.get("ExecuteCount"); if (runningCount == 0 && executeCount == 0) { continue; } methodStatDataList.add(methodStatData); } return methodStatDataList; } public Map<String, Object> getMethodStatData(String clazz, String method) { for (SpringMethodStat methodStat : this.methodStats.values()) { SpringMethodInfo methodInfo = methodStat.getMethodInfo(); if (methodInfo.getClassName().equals(clazz) && methodInfo.getSignature().equals(method)) { return methodStat.getStatData(); } } return null; } }