improve stat

This commit is contained in:
wenshao
2012-08-19 10:13:21 +08:00
parent 43d41022f8
commit 0502ba3870
5 changed files with 177 additions and 69 deletions
@@ -27,7 +27,6 @@ import com.alibaba.druid.support.http.stat.WebSessionStat;
import com.alibaba.druid.support.http.stat.WebURIStat;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
import com.alibaba.druid.support.spring.stat.SpringMethodStat;
import com.alibaba.druid.util.DruidWebUtils;
import com.alibaba.druid.util.PatternMatcher;
import com.alibaba.druid.util.ServletPathMatcher;
@@ -375,11 +374,6 @@ public class WebStatFilter implements Filter {
if (reqStat != null) {
reqStat.addJdbcUpdateCount(updateCount);
}
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.addJdbcUpdateCount(updateCount);
}
}
@Override
@@ -388,11 +382,6 @@ public class WebStatFilter implements Filter {
if (reqStat != null) {
reqStat.addJdbcFetchRowCount(fetchRowCount);
}
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.addJdbcFetchRowCount(fetchRowCount);
}
}
@Override
@@ -401,11 +390,6 @@ public class WebStatFilter implements Filter {
if (reqStat != null) {
reqStat.incrementJdbcExecuteCount();
}
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcExecuteCount();
}
}
@Override
@@ -417,14 +401,6 @@ public class WebStatFilter implements Filter {
reqStat.incrementJdbcExecuteErrorCount();
}
}
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.addJdbcExecuteTimeNano(nanos);
if (error != null) {
springMethodStat.incrementJdbcExecuteErrorCount();
}
}
}
@Override
@@ -433,11 +409,6 @@ public class WebStatFilter implements Filter {
if (reqStat != null) {
reqStat.incrementJdbcCommitCount();
}
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcCommitCount();
}
}
@Override
@@ -446,11 +417,6 @@ public class WebStatFilter implements Filter {
if (reqStat != null) {
reqStat.incrementJdbcRollbackCount();
}
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcRollbackCount();
}
}
@Override
@@ -459,11 +425,6 @@ public class WebStatFilter implements Filter {
if (reqStat != null) {
reqStat.incrementJdbcPoolConnectCount();
}
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcPoolConnectionOpenCount();
}
}
@Override
@@ -472,11 +433,6 @@ public class WebStatFilter implements Filter {
if (reqStat != null) {
reqStat.incrementJdbcPoolCloseCount();
}
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcPoolConnectionOpenCount();
}
}
@Override
@@ -5,24 +5,36 @@ import java.lang.reflect.Method;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.TargetSource;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import com.alibaba.druid.filter.stat.StatFilterContext;
import com.alibaba.druid.filter.stat.StatFilterContextListenerAdapter;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
public class DruidStatInterceptor implements MethodInterceptor, InitializingBean {
public class DruidStatInterceptor implements MethodInterceptor, InitializingBean, DisposableBean {
private final static Log LOG = LogFactory.getLog(DruidStatInterceptor.class);
private final static Log LOG = LogFactory.getLog(DruidStatInterceptor.class);
private static SpringStat springStat = new SpringStat();
private SpringMethodContextListener statContextlistener = new SpringMethodContextListener();
public DruidStatInterceptor(){
private static SpringStat springStat = new SpringStat();
public DruidStatInterceptor() {
}
@Override
public void afterPropertiesSet() throws Exception {
SpringStatManager.getInstance().addSpringStat(springStat);
StatFilterContext.getInstance().addContextListener(statContextlistener);
}
@Override
public void destroy() throws Exception {
StatFilterContext.getInstance().removeContextListener(statContextlistener);
}
@Override
@@ -55,7 +67,7 @@ public class DruidStatInterceptor implements MethodInterceptor, InitializingBean
if (methodStat != null) {
methodStat.afterInvoke(error, nanos);
}
SpringMethodStat.setCurrent(lastMethodStat);
}
}
@@ -125,4 +137,90 @@ public class DruidStatInterceptor implements MethodInterceptor, InitializingBean
return new SpringMethodInfo(clazz, method);
}
class SpringMethodContextListener extends StatFilterContextListenerAdapter {
@Override
public void addUpdateCount(int updateCount) {
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.addJdbcUpdateCount(updateCount);
}
}
@Override
public void addFetchRowCount(int fetchRowCount) {
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.addJdbcFetchRowCount(fetchRowCount);
}
}
@Override
public void executeBefore(String sql, boolean inTransaction) {
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcExecuteCount();
}
}
@Override
public void executeAfter(String sql, long nanos, Throwable error) {
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.addJdbcExecuteTimeNano(nanos);
if (error != null) {
springMethodStat.incrementJdbcExecuteErrorCount();
}
}
}
@Override
public void commit() {
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcCommitCount();
}
}
@Override
public void rollback() {
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcRollbackCount();
}
}
@Override
public void pool_connect() {
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcPoolConnectionOpenCount();
}
}
@Override
public void pool_close(long nanos) {
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcPoolConnectionOpenCount();
}
}
@Override
public void resultSet_open() {
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcResultSetOpenCount();
}
}
@Override
public void resultSet_close(long nanos) {
SpringMethodStat springMethodStat = SpringMethodStat.current();
if (springMethodStat != null) {
springMethodStat.incrementJdbcResultSetCloseCount();
}
}
}
}
@@ -8,27 +8,30 @@ import java.util.concurrent.atomic.AtomicLong;
public class SpringMethodStat {
private final static ThreadLocal<SpringMethodStat> currentLocal = new ThreadLocal<SpringMethodStat>();
private final static ThreadLocal<SpringMethodStat> currentLocal = new ThreadLocal<SpringMethodStat>();
private final SpringMethodInfo methodInfo;
private final AtomicInteger runningCount = new AtomicInteger();
private final AtomicInteger concurrentMax = new AtomicInteger();
private final AtomicLong executeCount = new AtomicLong(0);
private final AtomicLong executeErrorCount = new AtomicLong(0);
private final AtomicLong executeTimeNano = new AtomicLong();
private final AtomicInteger runningCount = new AtomicInteger();
private final AtomicInteger concurrentMax = new AtomicInteger();
private final AtomicLong executeCount = new AtomicLong(0);
private final AtomicLong executeErrorCount = new AtomicLong(0);
private final AtomicLong executeTimeNano = new AtomicLong();
private final AtomicLong jdbcFetchRowCount = new AtomicLong();
private final AtomicLong jdbcUpdateCount = new AtomicLong();
private final AtomicLong jdbcExecuteCount = new AtomicLong();
private final AtomicLong jdbcExecuteErrorCount = new AtomicLong();
private final AtomicLong jdbcExecuteTimeNano = new AtomicLong();
private final AtomicLong jdbcFetchRowCount = new AtomicLong();
private final AtomicLong jdbcUpdateCount = new AtomicLong();
private final AtomicLong jdbcExecuteCount = new AtomicLong();
private final AtomicLong jdbcExecuteErrorCount = new AtomicLong();
private final AtomicLong jdbcExecuteTimeNano = new AtomicLong();
private final AtomicLong jdbcCommitCount = new AtomicLong();
private final AtomicLong jdbcRollbackCount = new AtomicLong();
private final AtomicLong jdbcCommitCount = new AtomicLong();
private final AtomicLong jdbcRollbackCount = new AtomicLong();
private final AtomicLong jdbcPoolConnectionOpenCount = new AtomicLong();
private final AtomicLong jdbcPoolConnectionCloseCount = new AtomicLong();
private final AtomicLong jdbcPoolConnectionOpenCount = new AtomicLong();
private final AtomicLong jdbcPoolConnectionCloseCount = new AtomicLong();
private final AtomicLong jdbcResultSetOpenCount = new AtomicLong();
private final AtomicLong jdbcResultSetCloseCount = new AtomicLong();
private volatile Throwable lastError;
private volatile long lastErrorTimeMillis;
@@ -54,6 +57,9 @@ public class SpringMethodStat {
jdbcPoolConnectionOpenCount.set(0);
jdbcPoolConnectionCloseCount.set(0);
jdbcResultSetOpenCount.set(0);
jdbcResultSetCloseCount.set(0);
lastError = null;
lastErrorTimeMillis = 0;
@@ -226,7 +232,7 @@ public class SpringMethodStat {
public void addJdbcPoolConnectionOpenCount(long delta) {
jdbcPoolConnectionOpenCount.addAndGet(delta);
}
public void incrementJdbcPoolConnectionOpenCount() {
jdbcPoolConnectionOpenCount.incrementAndGet();
}
@@ -238,10 +244,34 @@ public class SpringMethodStat {
public void addJdbcPoolConnectionCloseCount(long delta) {
jdbcPoolConnectionCloseCount.addAndGet(delta);
}
public void incrementJdbcPoolConnectionCloseCount() {
jdbcPoolConnectionCloseCount.incrementAndGet();
}
public long getJdbcResultSetOpenCount() {
return jdbcResultSetOpenCount.get();
}
public void addJdbcResultSetOpenCount(long delta) {
jdbcResultSetOpenCount.addAndGet(delta);
}
public void incrementJdbcResultSetOpenCount() {
jdbcResultSetOpenCount.incrementAndGet();
}
public long getJdbcResultSetCloseCount() {
return jdbcResultSetCloseCount.get();
}
public void addJdbcResultSetCloseCount(long delta) {
jdbcResultSetCloseCount.addAndGet(delta);
}
public void incrementJdbcResultSetCloseCount() {
jdbcResultSetCloseCount.incrementAndGet();
}
public Map<String, Object> getStatData() {
Map<String, Object> data = new LinkedHashMap<String, Object>();
@@ -260,7 +290,10 @@ public class SpringMethodStat {
data.put("JdbcPoolConnectionOpenCount", this.getJdbcPoolConnectionOpenCount());
data.put("JdbcPoolConnectionCloseCount", this.getJdbcPoolConnectionCloseCount());
data.put("JdbcResultSetOpenCount", this.getJdbcResultSetOpenCount());
data.put("JdbcResultSetCloseCount", this.getJdbcResultSetCloseCount());
data.put("JdbcExecuteCount", this.getJdbcExecuteCount());
data.put("JdbcExecuteErrorCount", this.getJdbcExecuteErrorCount());
data.put("JdbcExecuteTimeMillis", this.getJdbcExecuteTimeMillis());
@@ -24,4 +24,9 @@ function ajaxResponseForSqlInfo() {
changeInnerHtml("JdbcRollbackCount", stat.JdbcRollbackCount);
changeInnerHtml("JdbcFetchRowCount", stat.JdbcFetchRowCount);
changeInnerHtml("JdbcUpdateCount", stat.JdbcUpdateCount);
changeInnerHtml("JdbcPoolConnectionOpenCount", stat.JdbcPoolConnectionOpenCount);
changeInnerHtml("JdbcPoolConnectionCloseCount", stat.JdbcPoolConnectionCloseCount);
changeInnerHtml("JdbcResultSetOpenCount", stat.JdbcResultSetOpenCount);
changeInnerHtml("JdbcResultSetCloseCount", stat.JdbcResultSetCloseCount);
}
@@ -77,6 +77,22 @@
<td class='td_lable'> JdbcUpdateCount</td>
<td id="JdbcUpdateCount"></td>
</tr>
<tr>
<td class='td_lable'> JdbcPoolConnectionOpenCount</td>
<td id="JdbcPoolConnectionOpenCount"></td>
</tr>
<tr>
<td class='td_lable'> JdbcPoolConnectionCloseCount</td>
<td id="JdbcPoolConnectionCloseCount"></td>
</tr>
<tr>
<td class='td_lable'> JdbcResultSetOpenCount</td>
<td id="JdbcResultSetOpenCount"></td>
</tr>
<tr>
<td class='td_lable'> JdbcResultSetCloseCount</td>
<td id="JdbcResultSetCloseCount"></td>
</tr>
</table>
<br />
</div>