mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improve stat
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user