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