improve WebStat

This commit is contained in:
wenshao
2012-08-18 19:57:48 +08:00
parent adf6607ebc
commit 994609d05d
7 changed files with 90 additions and 20 deletions
@@ -87,7 +87,7 @@ public class WebStatFilter implements Filter {
WebRequestStat requestStat = new WebRequestStat(startNano, startMillis);
WebRequestStat.set(requestStat);
WebSessionStat sessionStat = getSessionStat(httpRequest);
webAppStat.beforeInvoke();
@@ -413,6 +413,9 @@ public class WebStatFilter implements Filter {
WebRequestStat reqStat = WebRequestStat.current();
if (reqStat != null) {
reqStat.addJdbcExecuteTimeNano(nanos);
if (error != null) {
reqStat.incrementJdbcExecuteErrorCount();
}
}
SpringMethodStat springMethodStat = SpringMethodStat.current();
@@ -11,6 +11,7 @@ public class WebRequestStat {
private long jdbcUpdateCount;
private long jdbcFetchRowCount;
private long jdbcExecuteNano;
private long jdbcExecuteErrorCount;
public WebRequestStat(){
@@ -19,7 +20,7 @@ public class WebRequestStat {
public WebRequestStat(long startNano){
this.startNano = startNano;
}
public WebRequestStat(long startNano, long startMillis){
this.startNano = startNano;
this.startMillis = startMillis;
@@ -107,4 +108,11 @@ public class WebRequestStat {
this.jdbcRollbackCount++;
}
public long getJdbcExecuteErrorCount() {
return jdbcExecuteErrorCount;
}
public void incrementJdbcExecuteErrorCount() {
jdbcExecuteErrorCount++;
}
}
@@ -104,7 +104,7 @@ public class WebSessionStat {
}
public Date getLastAccessTime() {
if (lastAccessTimeMillis == -1L) {
if (lastAccessTimeMillis < 0L) {
return null;
}
@@ -1,5 +1,6 @@
package com.alibaba.druid.support.http.stat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
@@ -9,25 +10,30 @@ public class WebURIStat {
private final String uri;
private final AtomicInteger runningCount = new AtomicInteger();
private final AtomicInteger concurrentMax = new AtomicInteger();
private final AtomicLong requestCount = new AtomicLong(0);
private final AtomicLong requestTimeNano = new AtomicLong();
private final AtomicInteger runningCount = new AtomicInteger();
private final AtomicInteger concurrentMax = new AtomicInteger();
private final AtomicLong requestCount = new AtomicLong(0);
private final AtomicLong requestTimeNano = new AtomicLong();
private final AtomicLong jdbcFetchRowCount = new AtomicLong();
private final AtomicLong jdbcFetchRowPeak = new AtomicLong(); // 单次请求读取行数的峰值
private final AtomicLong jdbcFetchRowCount = new AtomicLong();
private final AtomicLong jdbcFetchRowPeak = new AtomicLong(); // 单次请求读取行数的峰值
private final AtomicLong jdbcUpdateCount = new AtomicLong();
private final AtomicLong jdbcUpdatePeak = new AtomicLong(); // 单次请求更新行数的峰值
private final AtomicLong jdbcUpdateCount = new AtomicLong();
private final AtomicLong jdbcUpdatePeak = new AtomicLong(); // 单次请求更新行数的峰值
private final AtomicLong jdbcExecuteCount = new AtomicLong();
private final AtomicLong jdbcExecutePeak = new AtomicLong(); // 单次请求执行SQL次数的峰值
private final AtomicLong jdbcExecuteTimeNano = new AtomicLong();
private final AtomicLong jdbcExecuteCount = new AtomicLong();
private final AtomicLong jdbcExecuteErrorCount = new AtomicLong();
private final AtomicLong jdbcExecutePeak = new AtomicLong(); // 单次请求执行SQL次数的峰值
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 static ThreadLocal<WebURIStat> currentLocal = new ThreadLocal<WebURIStat>();
private final AtomicLong errorCount = new AtomicLong();
private volatile long lastAccessTimeMillis = -1L;
private final static ThreadLocal<WebURIStat> currentLocal = new ThreadLocal<WebURIStat>();
public WebURIStat(String uri){
super();
@@ -61,12 +67,21 @@ public class WebURIStat {
}
requestCount.incrementAndGet();
WebRequestStat requestStat = WebRequestStat.current();
if (requestStat != null) {
this.setLastAccessTimeMillis(requestStat.getStartMillis());
}
}
public void afterInvoke(Throwable error, long nanos) {
runningCount.decrementAndGet();
requestTimeNano.addAndGet(nanos);
if (error != null) {
errorCount.incrementAndGet();
}
{
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
@@ -115,6 +130,13 @@ public class WebURIStat {
}
}
}
{
long jdbcExecuteErrorCount = localStat.getJdbcExecuteErrorCount();
if (jdbcExecuteErrorCount > 0) {
this.jdbcExecuteErrorCount.addAndGet(jdbcExecuteErrorCount);
}
}
}
}
@@ -168,7 +190,7 @@ public class WebURIStat {
public void incrementJdbcExecuteCount() {
jdbcExecuteCount.incrementAndGet();
}
public void addJdbcExecuteCount(long executeCount) {
jdbcExecuteCount.addAndGet(executeCount);
}
@@ -177,6 +199,10 @@ public class WebURIStat {
return jdbcExecuteCount.get();
}
public AtomicLong getJdbcExecuteErrorCount() {
return jdbcExecuteErrorCount;
}
public long getJdbcExecutePeak() {
return jdbcExecutePeak.get();
}
@@ -205,6 +231,26 @@ public class WebURIStat {
return jdbcRollbackCount.get();
}
public void setLastAccessTimeMillis(long lastAccessTimeMillis) {
this.lastAccessTimeMillis = lastAccessTimeMillis;
}
public Date getLastAccessTime() {
if (lastAccessTimeMillis < 0L) {
return null;
}
return new Date(lastAccessTimeMillis);
}
public long getLastAccessTimeMillis() {
return lastAccessTimeMillis;
}
public long getErrorCount() {
return errorCount.get();
}
public Map<String, Object> getStatData() {
Map<String, Object> data = new LinkedHashMap<String, Object>();
@@ -213,11 +259,14 @@ public class WebURIStat {
data.put("ConcurrentMax", this.getConcurrentMax());
data.put("RequestCount", this.getRequestCount());
data.put("RequestTimeMillis", this.getRequestTimeMillis());
data.put("ErrorCount", this.getErrorCount());
data.put("LastAccessTime", this.getLastAccessTime());
data.put("JdbcCommitCount", this.getJdbcCommitCount());
data.put("JdbcRollbackCount", this.getJdbcRollbackCount());
data.put("JdbcExecuteCount", this.getJdbcExecuteCount());
data.put("JdbcExecuteErrorCount", this.getJdbcExecuteErrorCount());
data.put("JdbcExecutePeak", this.getJdbcExecutePeak());
data.put("JdbcExecuteTimeMillis", this.getJdbcExecuteTimeMillis());