From 07d0386d8aa2c54dd06f011dfb8aa0494017480a Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 13 Aug 2012 15:48:15 +0800 Subject: [PATCH] add spring stat support --- .../druid/support/JSONDruidStatService.java | 3 +++ .../druid/support/http/stat/WebAppStat.java | 18 ++++++++++++++++++ .../support/http/stat/WebAppStatManager.java | 18 +++++++++++++----- .../support/http/stat/WebAppStatUtils.java | 17 +++++++++++++++-- .../support/spring/stat/SpringMethodStat.java | 15 +++++++++++++++ .../druid/support/spring/stat/SpringStat.java | 8 +++++++- .../support/spring/stat/SpringStatManager.java | 8 ++++++++ .../support/spring/stat/SpringStatUtils.java | 13 +++++++++++++ 8 files changed, 92 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/alibaba/druid/support/JSONDruidStatService.java b/src/main/java/com/alibaba/druid/support/JSONDruidStatService.java index 09523a81f3..9718685702 100644 --- a/src/main/java/com/alibaba/druid/support/JSONDruidStatService.java +++ b/src/main/java/com/alibaba/druid/support/JSONDruidStatService.java @@ -48,6 +48,9 @@ public class JSONDruidStatService { if (url.equals("/reset-all.json")) { druidStatManager.resetAll(); + SpringStatManager.getInstance().resetStat(); + WebAppStatManager.getInstance().resetStat(); + return returnJSONResult(RESULT_CODE_SUCCESS, null); } diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java index 18bfe0f566..87e1880be0 100644 --- a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java @@ -45,6 +45,24 @@ public class WebAppStat { return currentLocal.get(); } + public void reset() { + concurrentMax.set(0); + requestCount.set(0); + requestCount.set(0); + + sessionStatLock.writeLock().lock(); + try { + sessionStatMap.clear(); + } finally { + sessionStatLock.writeLock().unlock(); + } + + uriStatMap.clear(); + + uriStatMapFullCount.set(0); + uriSessionMapFullCount.set(0); + } + public WebAppStat(){ this(null); } diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatManager.java b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatManager.java index 1920155671..d46332c42f 100644 --- a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatManager.java +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatManager.java @@ -39,7 +39,7 @@ public class WebAppStatManager { return statDataList; } - + public List> getURIStatData() { Set stats = getWebAppStatSet(); @@ -52,17 +52,17 @@ public class WebAppStatManager { return allAppUriStatDataList; } - + public List> getSessionStatData() { Set stats = getWebAppStatSet(); - + List> allAppUriStatDataList = new ArrayList>(); - + for (Object stat : stats) { List> uriStatDataList = WebAppStatUtils.getSessionStatDataList(stat); allAppUriStatDataList.addAll(uriStatDataList); } - + return allAppUriStatDataList; } @@ -93,4 +93,12 @@ public class WebAppStatManager { return webAppStats; } + public void resetStat() { + Set stats = getWebAppStatSet(); + + for (Object stat : stats) { + WebAppStatUtils.rset(stat); + } + } + } diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatUtils.java b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatUtils.java index 33b583ad59..022951d787 100644 --- a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatUtils.java +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatUtils.java @@ -32,7 +32,7 @@ public class WebAppStatUtils { if (webStat.getClass() == WebAppStat.class) { return ((WebAppStat) webStat).getURIStatDataList(); } - + try { Method method = webStat.getClass().getMethod("getURIStatDataList"); Object obj = method.invoke(webStat); @@ -48,7 +48,7 @@ public class WebAppStatUtils { if (webStat.getClass() == WebAppStat.class) { return ((WebAppStat) webStat).getSessionStatDataList(); } - + try { Method method = webStat.getClass().getMethod("getSessionStatDataList"); Object obj = method.invoke(webStat); @@ -58,4 +58,17 @@ public class WebAppStatUtils { return null; } } + + public static void rset(Object webStat) { + if (webStat.getClass() == WebAppStat.class) { + ((WebAppStat) webStat).reset(); + } + + try { + Method method = webStat.getClass().getMethod("rset"); + method.invoke(webStat); + } catch (Exception e) { + LOG.error("reset error", e); + } + } } diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStat.java b/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStat.java index 66e87d6e36..b2084a2423 100644 --- a/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStat.java +++ b/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStat.java @@ -28,6 +28,21 @@ public class SpringMethodStat { public SpringMethodStat(MethodInfo methodInfo){ this.methodInfo = methodInfo; } + + public void reset() { + concurrentMax.set(0); + executeCount.set(0); + executeErrorCount.set(0); + executeTimeNano.set(0); + + jdbcFetchRowCount.set(0); + jdbcUpdateCount.set(0); + jdbcExecuteCount.set(0); + jdbcExecuteTimeNano.set(0); + + jdbcCommitCount.set(0); + jdbcRollbackCount.set(0); + } public MethodInfo getMethodInfo() { return methodInfo; diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/SpringStat.java b/src/main/java/com/alibaba/druid/support/spring/stat/SpringStat.java index 748d687142..85ca65c079 100644 --- a/src/main/java/com/alibaba/druid/support/spring/stat/SpringStat.java +++ b/src/main/java/com/alibaba/druid/support/spring/stat/SpringStat.java @@ -14,6 +14,12 @@ public class SpringStat { } + public void reset() { + for (SpringMethodStat stat : methodStats.values()) { + stat.reset(); + } + } + public SpringMethodStat getMethodStat(MethodInfo methodInfo, boolean create) { SpringMethodStat methodStat = methodStats.get(methodInfo); if (methodStat != null) { @@ -27,7 +33,7 @@ public class SpringStat { return methodStat; } - + public List> getMethodStatDataList() { List> methodStatDataList = new ArrayList>(this.methodStats.size()); for (SpringMethodStat methodStat : this.methodStats.values()) { diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/SpringStatManager.java b/src/main/java/com/alibaba/druid/support/spring/stat/SpringStatManager.java index 77363601ef..22e4b0e60c 100644 --- a/src/main/java/com/alibaba/druid/support/spring/stat/SpringStatManager.java +++ b/src/main/java/com/alibaba/druid/support/spring/stat/SpringStatManager.java @@ -62,4 +62,12 @@ public class SpringStatManager { return allMethodStatDataList; } + + public void resetStat() { + Set stats = getSpringStatSet(); + + for (Object stat : stats) { + SpringStatUtils.rset(stat); + } + } } diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/SpringStatUtils.java b/src/main/java/com/alibaba/druid/support/spring/stat/SpringStatUtils.java index 11e7cfa0a3..4b58e2c0ae 100644 --- a/src/main/java/com/alibaba/druid/support/spring/stat/SpringStatUtils.java +++ b/src/main/java/com/alibaba/druid/support/spring/stat/SpringStatUtils.java @@ -26,4 +26,17 @@ public class SpringStatUtils { return null; } } + + public static void rset(Object webStat) { + if (webStat.getClass() == SpringStat.class) { + ((SpringStat) webStat).reset(); + } + + try { + Method method = webStat.getClass().getMethod("rset"); + method.invoke(webStat); + } catch (Exception e) { + LOG.error("reset error", e); + } + } }