add web stat support

This commit is contained in:
wenshao
2012-08-13 10:49:12 +08:00
parent a5bb190e9b
commit efb066f508
7 changed files with 97 additions and 88 deletions
@@ -20,7 +20,6 @@ import com.alibaba.druid.support.http.stat.WebAppStat;
import com.alibaba.druid.support.http.stat.WebAppStatManager;
import com.alibaba.druid.support.http.stat.WebRequestStat;
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.util.DruidWebUtils;
@@ -78,17 +77,30 @@ public class WebStatFilter implements Filter {
sessionStat.setLastAccessTimeMillis(startMillis);
}
Throwable error = null;
try {
chain.doFilter(request, response);
} catch (IOException e) {
error = e;
throw e;
} catch (ServletException e) {
error = e;
throw e;
} catch (RuntimeException e) {
error = e;
throw e;
} catch (Error e) {
error = e;
throw e;
} finally {
long endNano = System.nanoTime();
requestStat.setEndNano(endNano);
long nanoSpan = endNano - startNano;
webAppStat.afterInvoke(nanoSpan);
webAppStat.afterInvoke(error, nanoSpan);
if (sessionStat != null) {
sessionStat.afterInvoke(nanoSpan);
sessionStat.afterInvoke(error, nanoSpan);
} else {
sessionStat = getSessionStat(httpRequest);
if (sessionStat != null) {
@@ -252,50 +264,25 @@ public class WebStatFilter implements Filter {
@Override
public void addUpdateCount(int updateCount) {
{
WebURIStat stat = WebURIStat.current();
if (stat != null) {
stat.addJdbcUpdateCount(updateCount);
}
}
{
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
localStat.addJdbcUpdateCount(updateCount);
}
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
localStat.addJdbcUpdateCount(updateCount);
}
}
@Override
public void addFetchRowCount(int fetchRowCount) {
{
WebURIStat stat = WebURIStat.current();
if (stat != null) {
stat.addJdbcFetchRowCount(fetchRowCount);
}
}
{
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
localStat.addJdbcFetchRowCount(fetchRowCount);
}
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
localStat.addJdbcFetchRowCount(fetchRowCount);
}
}
@Override
public void executeBefore(String sql, boolean inTransaction) {
{
WebURIStat stat = WebURIStat.current();
if (stat != null) {
stat.incrementJdbcExecuteCount();
}
}
{
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
localStat.incrementJdbcExecuteCount();
}
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
localStat.incrementJdbcExecuteCount();
}
}
@@ -309,30 +296,17 @@ public class WebStatFilter implements Filter {
@Override
public void commit() {
WebURIStat stat = WebURIStat.current();
if (stat != null) {
stat.incrementJdbcCommitCount();
}
{
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
localStat.incrementJdbcCommitCount();
}
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
localStat.incrementJdbcCommitCount();
}
}
@Override
public void rollback() {
WebURIStat stat = WebURIStat.current();
if (stat != null) {
stat.incrementJdbcRollbackCount();
}
{
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
localStat.incrementJdbcRollbackCount();
}
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
localStat.incrementJdbcRollbackCount();
}
}
}
@@ -158,12 +158,12 @@ public class WebAppStat {
}
}
public void afterInvoke(long nanoSpan) {
public void afterInvoke(Throwable error, long nanoSpan) {
runningCount.decrementAndGet();
WebURIStat uriStat = WebURIStat.current();
if (uriStat != null) {
uriStat.afterInvoke(nanoSpan);
uriStat.afterInvoke(error, nanoSpan);
}
currentLocal.set(null);
@@ -15,6 +15,7 @@ public class WebSessionStat {
private final AtomicInteger runningCount = new AtomicInteger();
private final AtomicInteger concurrentMax = new AtomicInteger();
private final AtomicLong requestCount = new AtomicLong(0);
private final AtomicLong requestErrorCount = new AtomicLong(0);
private final AtomicLong jdbcFetchRowCount = new AtomicLong();
private final AtomicLong jdbcUpdateCount = new AtomicLong();
@@ -119,9 +120,8 @@ public class WebSessionStat {
requestCount.incrementAndGet();
}
public void afterInvoke(long nanoSpan) {
public void afterInvoke(Throwable error, long nanoSpan) {
runningCount.decrementAndGet();
reacord(nanoSpan);
}
@@ -154,6 +154,10 @@ public class WebSessionStat {
public long getRequestCount() {
return requestCount.get();
}
public long getRequestErrorCount() {
return requestErrorCount.get();
}
public long getRequestTimeNano() {
return requestTimeNano.get();
@@ -9,24 +9,25 @@ 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 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 jdbcExecuteCount = 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 static ThreadLocal<WebURIStat> currentLocal = new ThreadLocal<WebURIStat>();
public WebURIStat(String uri){
super();
@@ -62,14 +63,16 @@ public class WebURIStat {
requestCount.incrementAndGet();
}
public void afterInvoke(long nanoSpan) {
public void afterInvoke(Throwable error, long nanoSpan) {
runningCount.decrementAndGet();
requestTimeNano.addAndGet(nanoSpan);
{
WebRequestStat localStat = WebRequestStat.current();
if (localStat != null) {
{
long fetchRowCount = localStat.getJdbcFetchRowCount();
this.addJdbcFetchRowCount(fetchRowCount);
for (;;) {
long peak = jdbcFetchRowPeak.get();
@@ -84,6 +87,7 @@ public class WebURIStat {
}
{
long executeCount = localStat.getJdbcExecuteCount();
this.addJdbcExecuteCount(executeCount);
for (;;) {
long peak = jdbcExecutePeak.get();
@@ -98,6 +102,7 @@ public class WebURIStat {
}
{
long updateCount = localStat.getJdbcUpdateCount();
this.addJdbcUpdateCount(updateCount);
for (;;) {
long peak = jdbcUpdatePeak.get();
@@ -128,6 +133,14 @@ public class WebURIStat {
return requestCount.get();
}
public long getRequestTimeNano() {
return requestTimeNano.get();
}
public long getRequestTimeMillis() {
return getRequestTimeNano() / (1000 * 1000);
}
public void addJdbcFetchRowCount(long delta) {
this.jdbcFetchRowCount.addAndGet(delta);
}
@@ -140,7 +153,7 @@ public class WebURIStat {
return jdbcFetchRowPeak.get();
}
public void addJdbcUpdateCount(int updateCount) {
public void addJdbcUpdateCount(long updateCount) {
this.jdbcUpdateCount.addAndGet(updateCount);
}
@@ -155,6 +168,10 @@ public class WebURIStat {
public void incrementJdbcExecuteCount() {
jdbcExecuteCount.incrementAndGet();
}
public void addJdbcExecuteCount(long executeCount) {
jdbcExecuteCount.addAndGet(executeCount);
}
public long getJdbcExecuteCount() {
return jdbcExecuteCount.get();
@@ -164,6 +181,14 @@ public class WebURIStat {
return jdbcExecutePeak.get();
}
public long getJdbcExecuteTimeMillis() {
return getJdbcExecuteTimeNano() / (1000 * 1000);
}
public long getJdbcExecuteTimeNano() {
return jdbcExecuteTimeNano.get();
}
public void incrementJdbcCommitCount() {
jdbcCommitCount.incrementAndGet();
}
@@ -187,12 +212,14 @@ public class WebURIStat {
data.put("RunningCount", this.getRunningCount());
data.put("ConcurrentMax", this.getConcurrentMax());
data.put("RequestCount", this.getRequestCount());
data.put("RequestTimeMillis", this.getRequestTimeMillis());
data.put("JdbcCommitCount", this.getJdbcCommitCount());
data.put("JdbcRollbackCount", this.getJdbcRollbackCount());
data.put("JdbcExecuteCount", this.getJdbcExecuteCount());
data.put("JdbcExecutePeak", this.getJdbcExecutePeak());
data.put("JdbcExecuteTimeMillis", this.getJdbcExecuteTimeMillis());
data.put("JdbcFetchRowCount", this.getJdbcFetchRowCount());
data.put("JdbcFetchRowPeak", this.getJdbcFetchRowPeak());