From e536b9497d8546dcaf6ab922dc5877668bf8497b Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 12 Aug 2012 17:12:34 +0800 Subject: [PATCH] add WebSessionStat support --- .../druid/support/JSONDruidStatService.java | 9 ++ .../druid/support/http/WebStatFilter.java | 109 +++++++++++-- .../druid/support/http/stat/WebAppStat.java | 76 +++++++-- .../support/http/stat/WebAppStatManager.java | 13 ++ .../support/http/stat/WebAppStatUtils.java | 12 ++ .../support/http/stat/WebRequestStat.java | 87 ++++++++++ .../support/http/stat/WebSessionStat.java | 153 ++++++++++++++++++ .../druid/support/http/stat/WebURIStat.java | 34 +--- .../resources/activeConnectionStackTrace.html | 2 +- .../resources/support/http/resources/api.html | 2 +- .../http/resources/connectionInfo.html | 2 +- .../support/http/resources/datasource.html | 2 +- .../support/http/resources/index.html | 2 +- .../support/http/resources/js/websession.js | 108 +++++++++++++ .../resources/support/http/resources/sql.html | 2 +- .../support/http/resources/websession.html | 42 +++++ .../support/http/resources/weburi.html | 4 +- 17 files changed, 597 insertions(+), 62 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/support/http/stat/WebRequestStat.java create mode 100644 src/main/java/com/alibaba/druid/support/http/stat/WebSessionStat.java create mode 100644 src/main/resources/support/http/resources/js/websession.js create mode 100644 src/main/resources/support/http/resources/websession.html diff --git a/src/main/java/com/alibaba/druid/support/JSONDruidStatService.java b/src/main/java/com/alibaba/druid/support/JSONDruidStatService.java index 75f488e751..d88e0158e9 100644 --- a/src/main/java/com/alibaba/druid/support/JSONDruidStatService.java +++ b/src/main/java/com/alibaba/druid/support/JSONDruidStatService.java @@ -86,6 +86,10 @@ public class JSONDruidStatService { if (url.startsWith("/weburi.json")) { return returnJSONResult(RESULT_CODE_SUCCESS, getWebURIStatDataList(parameters)); } + + if (url.startsWith("/websession.json")) { + return returnJSONResult(RESULT_CODE_SUCCESS, getWebSessionStatDataList(parameters)); + } return returnJSONResult(RESULT_CODE_ERROR, "Do not support this request, please contact with administrator."); } @@ -94,6 +98,11 @@ public class JSONDruidStatService { List> array = WebAppStatManager.getInstance().getURIStatData(); return array; } + + private List> getWebSessionStatDataList(Map parameters) { + List> array = WebAppStatManager.getInstance().getSessionStatData(); + return array; + } private List> getSqlStatDataList(Map parameters) { List> array = druidStatManager.getSqlStatDataList(); diff --git a/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java b/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java index 54f0d4608d..ba228da431 100644 --- a/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java +++ b/src/main/java/com/alibaba/druid/support/http/WebStatFilter.java @@ -9,11 +9,14 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; import com.alibaba.druid.filter.stat.StatFilterContext; import com.alibaba.druid.filter.stat.StatFilterContextListenerAdapter; 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; public class WebStatFilter implements Filter { @@ -21,6 +24,8 @@ public class WebStatFilter implements Filter { private WebAppStat webAppStat = null; private WebStatFilterContextListener statFilterContextListener = new WebStatFilterContextListener(); + private boolean createSession = false; + @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { @@ -34,17 +39,60 @@ public class WebStatFilter implements Filter { } long startNano = System.nanoTime(); + + WebRequestStat requestStat = new WebRequestStat(startNano); + WebRequestStat.set(requestStat); + WebSessionStat sessionStat = getSessionStat(httpRequest); webAppStat.beforeInvoke(requestURI); + // 第一次访问时,sessionId为null,如果缺省sessionCreate=false,sessionStat就为null。 + if (sessionStat != null) { + sessionStat.beforeInvoke(); + } + try { chain.doFilter(request, response); } finally { - long nanoSpan = System.nanoTime() - startNano; + long endNano = System.nanoTime(); + requestStat.setEndNano(endNano); + long nanoSpan = endNano - startNano; webAppStat.afterInvoke(nanoSpan); + + if (sessionStat != null) { + sessionStat.afterInvoke(nanoSpan); + } else { + sessionStat = getSessionStat(httpRequest); + if (sessionStat != null) { + sessionStat.reacord(nanoSpan); + } + } + + WebRequestStat.set(null); } } + public WebSessionStat getSessionStat(HttpServletRequest httpRequest) { + WebSessionStat sessionStat = null; + String sessionId = getSessionId(httpRequest); + if (sessionId != null) { + sessionStat = webAppStat.getSessionStat(sessionId); + } + + return sessionStat; + } + + public String getSessionId(HttpServletRequest httpRequest) { + String sessionId = null; + + HttpSession session = httpRequest.getSession(createSession); + if (session != null) { + sessionId = session.getId(); + } + + return sessionId; + } + public boolean isExclusion(String uri) { return false; } @@ -77,39 +125,69 @@ public class WebStatFilter implements Filter { @Override public void addUpdateCount(int updateCount) { - WebURIStat stat = WebURIStat.current(); - if (stat != null) { - stat.addJdbcUpdateCount(updateCount); + { + WebURIStat stat = WebURIStat.current(); + if (stat != null) { + stat.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); + { + WebURIStat stat = WebURIStat.current(); + if (stat != null) { + stat.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(); + { + WebURIStat stat = WebURIStat.current(); + if (stat != null) { + stat.incrementJdbcExecuteCount(); + } + } + { + WebRequestStat localStat = WebRequestStat.current(); + if (localStat != null) { + localStat.incrementJdbcExecuteCount(); + } } } @Override public void executeAfter(String sql, long nanoSpan, Throwable error) { - } - + @Override public void commit() { WebURIStat stat = WebURIStat.current(); if (stat != null) { stat.incrementJdbcCommitCount(); } + { + WebRequestStat localStat = WebRequestStat.current(); + if (localStat != null) { + localStat.incrementJdbcCommitCount(); + } + } } @Override @@ -118,6 +196,13 @@ public class WebStatFilter implements Filter { if (stat != null) { stat.incrementJdbcRollbackCount(); } + + { + WebRequestStat localStat = WebRequestStat.current(); + if (localStat != null) { + localStat.incrementJdbcRollbackCount(); + } + } } } } diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java index 4c50040a05..f8101927cd 100644 --- a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStat.java @@ -14,23 +14,27 @@ import com.alibaba.druid.support.logging.LogFactory; public class WebAppStat { - private final static Log LOG = LogFactory.getLog(WebAppStat.class); + private final static Log LOG = LogFactory.getLog(WebAppStat.class); - public final static int DEFAULT_MAX_STAT_URI_COUNT = 1000; + public final static int DEFAULT_MAX_STAT_URI_COUNT = 1000; + public final static int DEFAULT_MAX_STAT_SESSION_COUNT = 1000 * 100; - private volatile int maxStatUriCount = DEFAULT_MAX_STAT_URI_COUNT; + private volatile int maxStatUriCount = DEFAULT_MAX_STAT_URI_COUNT; + private volatile int maxStatSessionCount = DEFAULT_MAX_STAT_SESSION_COUNT; - 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 static ThreadLocal currentLocal = new ThreadLocal(); + private final static ThreadLocal currentLocal = new ThreadLocal(); - private final ConcurrentMap uriStatMap = new ConcurrentHashMap(); + private final ConcurrentMap uriStatMap = new ConcurrentHashMap(); + private final ConcurrentMap sessionStatMap = new ConcurrentHashMap(); - private final AtomicLong uriStatMapFullCount = new AtomicLong(); + private final AtomicLong uriStatMapFullCount = new AtomicLong(); + private final AtomicLong uriSessionMapFullCount = new AtomicLong(); - private String contextPath; + private String contextPath; public static WebAppStat current() { return currentLocal.get(); @@ -80,7 +84,7 @@ public class WebAppStat { long fullCount = uriStatMapFullCount.getAndIncrement(); if (fullCount == 0) { - LOG.error("urlStatMap is full"); + LOG.error("uriSessionMapFullCount is full"); } return null; @@ -96,9 +100,30 @@ public class WebAppStat { return uriStat; } + public WebSessionStat getSessionStat(String sessionId) { + if (sessionStatMap.size() >= this.getMaxStatSessionCount()) { + long fullCount = uriSessionMapFullCount.getAndIncrement(); + + if (fullCount == 0) { + LOG.error("sessionStatMap is full"); + } + + return null; + } + + WebSessionStat uriStat = sessionStatMap.get(sessionId); + + if (uriStat == null) { + sessionStatMap.putIfAbsent(sessionId, new WebSessionStat(sessionId)); + uriStat = sessionStatMap.get(sessionId); + } + + return uriStat; + } + public void afterInvoke(long nanoSpan) { runningCount.decrementAndGet(); - + WebURIStat uriStat = WebURIStat.current(); if (uriStat != null) { uriStat.afterInvoke(nanoSpan); @@ -115,6 +140,14 @@ public class WebAppStat { this.maxStatUriCount = maxStatUriCount; } + public int getMaxStatSessionCount() { + return maxStatSessionCount; + } + + public void setMaxStatSessionCount(int maxStatSessionCount) { + this.maxStatSessionCount = maxStatSessionCount; + } + public int getRunningCount() { return this.runningCount.get(); } @@ -136,7 +169,7 @@ public class WebAppStat { data.put("RequestCount", this.getRequestCount()); List> uriStatDataList = getURIStatDataList(); - + data.put("URIList", uriStatDataList); return data; @@ -158,5 +191,22 @@ public class WebAppStat { } return uriStatDataList; } + + public List> getSessionStatDataList() { + List> uriStatDataList = new ArrayList>(this.sessionStatMap.size()); + for (WebSessionStat sessionStat : this.sessionStatMap.values()) { + Map sessionStatData = sessionStat.getStatData(); + + int runningCount = ((Number) sessionStatData.get("RunningCount")).intValue(); + long requestCount = (Long) sessionStatData.get("RequestCount"); + + if (runningCount == 0 && requestCount == 0) { + continue; + } + + uriStatDataList.add(sessionStatData); + } + return uriStatDataList; + } } diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatManager.java b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatManager.java index 5d773fe550..1920155671 100644 --- a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatManager.java +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatManager.java @@ -52,6 +52,19 @@ public class WebAppStatManager { return allAppUriStatDataList; } + + public List> getSessionStatData() { + Set stats = getWebAppStatSet(); + + List> allAppUriStatDataList = new ArrayList>(); + + for (Object stat : stats) { + List> uriStatDataList = WebAppStatUtils.getSessionStatDataList(stat); + allAppUriStatDataList.addAll(uriStatDataList); + } + + return allAppUriStatDataList; + } public void addWebAppStatSet(Object webAppStat) { getWebAppStatSet().add(webAppStat); diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatUtils.java b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatUtils.java index 5eb46e19c7..50e9fdb9b9 100644 --- a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatUtils.java +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatUtils.java @@ -34,4 +34,16 @@ public class WebAppStatUtils { return null; } } + + @SuppressWarnings("unchecked") + public static List> getSessionStatDataList(Object webStat) { + try { + Method method = webStat.getClass().getMethod("getSessionStatDataList"); + Object obj = method.invoke(webStat); + return (List>) obj; + } catch (Exception e) { + LOG.error("getSessionStatDataList error", e); + return null; + } + } } diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebRequestStat.java b/src/main/java/com/alibaba/druid/support/http/stat/WebRequestStat.java new file mode 100644 index 0000000000..a9f67c9f67 --- /dev/null +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebRequestStat.java @@ -0,0 +1,87 @@ +package com.alibaba.druid.support.http.stat; + +public class WebRequestStat { + + private long startNano; + private long endNano; + private long jdbcCommitCount; + private long jdbcRollbackCount; + private long jdbcExecuteCount; + private long jdbcUpdateCount; + private long jdbcFetchRowCount; + + public WebRequestStat(){ + + } + + public WebRequestStat(long startNano){ + this.startNano = startNano; + } + + private static ThreadLocal localRequestStat = new ThreadLocal(); + + public static WebRequestStat current() { + return localRequestStat.get(); + } + + public static void set(WebRequestStat requestStat) { + localRequestStat.set(requestStat); + } + + public long getStartNano() { + return startNano; + } + + public void setStartNano(long startNano) { + this.startNano = startNano; + } + + public long getEndNano() { + return endNano; + } + + public void setEndNano(long endNano) { + this.endNano = endNano; + } + + public void addJdbcUpdateCount(long count) { + this.jdbcUpdateCount += count; + } + + public void addJdbcFetchRowCount(long count) { + this.jdbcFetchRowCount += count; + } + + public void incrementJdbcExecuteCount() { + this.jdbcExecuteCount++; + } + + public long getJdbcExecuteCount() { + return jdbcExecuteCount; + } + + public long getJdbcUpdateCount() { + return jdbcUpdateCount; + } + + public long getJdbcFetchRowCount() { + return jdbcFetchRowCount; + } + + public long getJdbcCommitCount() { + return jdbcCommitCount; + } + + public void incrementJdbcCommitCount() { + this.jdbcCommitCount++; + } + + public long getJdbcRollbackCount() { + return jdbcRollbackCount; + } + + public void incrementJdbcRollbackCount() { + this.jdbcRollbackCount++; + } + +} diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebSessionStat.java b/src/main/java/com/alibaba/druid/support/http/stat/WebSessionStat.java new file mode 100644 index 0000000000..665efc9462 --- /dev/null +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebSessionStat.java @@ -0,0 +1,153 @@ +package com.alibaba.druid.support.http.stat; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; + +public class WebSessionStat { + + private final String sessionId; + + private final AtomicInteger runningCount = new AtomicInteger(); + private final AtomicInteger concurrentMax = new AtomicInteger(); + private final AtomicLong requestCount = new AtomicLong(0); + + private final AtomicLong jdbcFetchRowCount = new AtomicLong(); + private final AtomicLong jdbcUpdateCount = new AtomicLong(); + private final AtomicLong jdbcExecuteCount = new AtomicLong(); + + private final AtomicLong jdbcCommitCount = new AtomicLong(); + private final AtomicLong jdbcRollbackCount = new AtomicLong(); + + private final AtomicLong requestTimeNano = new AtomicLong(); + + public WebSessionStat(String sessionId){ + super(); + this.sessionId = sessionId; + } + + public String getSessionId() { + return sessionId; + } + + public void beforeInvoke() { + int running = runningCount.incrementAndGet(); + + for (;;) { + int max = concurrentMax.get(); + if (running > max) { + if (concurrentMax.compareAndSet(max, running)) { + break; + } else { + continue; + } + } else { + break; + } + } + + requestCount.incrementAndGet(); + } + + public void afterInvoke(long nanoSpan) { + runningCount.decrementAndGet(); + + reacord(nanoSpan); + } + + public void reacord(long nanos) { + requestTimeNano.addAndGet(nanos); + + WebRequestStat requestStat = WebRequestStat.current(); + if (requestStat != null) { + this.addJdbcExecuteCount(requestStat.getJdbcExecuteCount()); + this.addJdbcFetchRowCount(requestStat.getJdbcFetchRowCount()); + this.addJdbcUpdateCount(requestStat.getJdbcUpdateCount()); + this.addJdbcCommitCount(requestStat.getJdbcCommitCount()); + this.addJdbcRollbackCount(requestStat.getJdbcRollbackCount()); + } + } + + public int getRunningCount() { + return this.runningCount.get(); + } + + public long getConcurrentMax() { + return concurrentMax.get(); + } + + public long getRequestCount() { + return requestCount.get(); + } + + public void addJdbcFetchRowCount(long delta) { + this.jdbcFetchRowCount.addAndGet(delta); + } + + public long getJdbcFetchRowCount() { + return jdbcFetchRowCount.get(); + } + + public void addJdbcUpdateCount(long updateCount) { + this.jdbcUpdateCount.addAndGet(updateCount); + } + + public long getJdbcUpdateCount() { + return jdbcUpdateCount.get(); + } + + public void incrementJdbcExecuteCount() { + jdbcExecuteCount.incrementAndGet(); + } + + public void addJdbcExecuteCount(long executeCount) { + jdbcExecuteCount.addAndGet(executeCount); + } + + public long getJdbcExecuteCount() { + return jdbcExecuteCount.get(); + } + + public void incrementJdbcCommitCount() { + jdbcCommitCount.incrementAndGet(); + } + + public long getJdbcCommitCount() { + return jdbcCommitCount.get(); + } + + public void addJdbcCommitCount(long commitCount) { + this.jdbcCommitCount.addAndGet(commitCount); + } + + public void incrementJdbcRollbackCount() { + jdbcRollbackCount.incrementAndGet(); + } + + public long getJdbcRollbackCount() { + return jdbcRollbackCount.get(); + } + + public void addJdbcRollbackCount(long rollbackCount) { + this.jdbcRollbackCount.addAndGet(rollbackCount); + } + + public Map getStatData() { + Map data = new LinkedHashMap(); + + data.put("SESSIONID", this.getSessionId()); + data.put("RunningCount", this.getRunningCount()); + data.put("ConcurrentMax", this.getConcurrentMax()); + data.put("RequestCount", this.getRequestCount()); + + data.put("JdbcCommitCount", this.getJdbcCommitCount()); + data.put("JdbcRollbackCount", this.getJdbcRollbackCount()); + + data.put("JdbcExecuteCount", this.getJdbcExecuteCount()); + data.put("JdbcFetchRowCount", this.getJdbcFetchRowCount()); + data.put("JdbcUpdateCount", this.getJdbcUpdateCount()); + + return data; + } +} diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebURIStat.java b/src/main/java/com/alibaba/druid/support/http/stat/WebURIStat.java index e93337f83d..ed3fe9b17f 100644 --- a/src/main/java/com/alibaba/druid/support/http/stat/WebURIStat.java +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebURIStat.java @@ -7,13 +7,6 @@ import java.util.concurrent.atomic.AtomicLong; public class WebURIStat { - static class RequestStat { - - long jdbcExecuteCount; - long jdbcUpdateCount; - long jdbcFetchRowCount; - } - private final String uri; private final AtomicInteger runningCount = new AtomicInteger(); @@ -33,7 +26,7 @@ public class WebURIStat { private final AtomicLong jdbcRollbackCount = new AtomicLong(); private final static ThreadLocal currentLocal = new ThreadLocal(); - private static ThreadLocal localRequestStat = new ThreadLocal(); + public WebURIStat(String uri){ super(); @@ -50,7 +43,6 @@ public class WebURIStat { public void beforeInvoke(String uri) { currentLocal.set(this); - localRequestStat.set(new RequestStat()); int running = runningCount.incrementAndGet(); @@ -74,10 +66,10 @@ public class WebURIStat { runningCount.decrementAndGet(); { - RequestStat localStat = localRequestStat.get(); + WebRequestStat localStat = WebRequestStat.current(); if (localStat != null) { { - long fetchRowCount = localStat.jdbcFetchRowCount; + long fetchRowCount = localStat.getJdbcFetchRowCount(); for (;;) { long peak = jdbcFetchRowPeak.get(); @@ -91,7 +83,7 @@ public class WebURIStat { } } { - long executeCount = localStat.jdbcExecuteCount; + long executeCount = localStat.getJdbcExecuteCount(); for (;;) { long peak = jdbcExecutePeak.get(); @@ -105,7 +97,7 @@ public class WebURIStat { } } { - long updateCount = localStat.jdbcUpdateCount; + long updateCount = localStat.getJdbcUpdateCount(); for (;;) { long peak = jdbcUpdatePeak.get(); @@ -122,7 +114,6 @@ public class WebURIStat { } currentLocal.set(null); - localRequestStat.set(null); } public int getRunningCount() { @@ -139,11 +130,6 @@ public class WebURIStat { public void addJdbcFetchRowCount(long delta) { this.jdbcFetchRowCount.addAndGet(delta); - - RequestStat localStat = localRequestStat.get(); - if (localStat != null) { - localStat.jdbcFetchRowCount += delta; - } } public long getJdbcFetchRowCount() { @@ -156,11 +142,6 @@ public class WebURIStat { public void addJdbcUpdateCount(int updateCount) { this.jdbcUpdateCount.addAndGet(updateCount); - - RequestStat localStat = localRequestStat.get(); - if (localStat != null) { - localStat.jdbcExecuteCount += updateCount; - } } public long getJdbcUpdateCount() { @@ -173,11 +154,6 @@ public class WebURIStat { public void incrementJdbcExecuteCount() { jdbcExecuteCount.incrementAndGet(); - - RequestStat localStat = localRequestStat.get(); - if (localStat != null) { - localStat.jdbcExecuteCount++; - } } public long getJdbcExecuteCount() { diff --git a/src/main/resources/support/http/resources/activeConnectionStackTrace.html b/src/main/resources/support/http/resources/activeConnectionStackTrace.html index 42f66c31c2..9e4d0a90b8 100644 --- a/src/main/resources/support/http/resources/activeConnectionStackTrace.html +++ b/src/main/resources/support/http/resources/activeConnectionStackTrace.html @@ -16,7 +16,7 @@

diff --git a/src/main/resources/support/http/resources/api.html b/src/main/resources/support/http/resources/api.html index d5440121cb..687a2bf3dc 100644 --- a/src/main/resources/support/http/resources/api.html +++ b/src/main/resources/support/http/resources/api.html @@ -9,7 +9,7 @@

diff --git a/src/main/resources/support/http/resources/connectionInfo.html b/src/main/resources/support/http/resources/connectionInfo.html index c06a86f4e6..c8e3143a82 100644 --- a/src/main/resources/support/http/resources/connectionInfo.html +++ b/src/main/resources/support/http/resources/connectionInfo.html @@ -16,7 +16,7 @@

diff --git a/src/main/resources/support/http/resources/datasource.html b/src/main/resources/support/http/resources/datasource.html index 88835c366a..405c2b0627 100644 --- a/src/main/resources/support/http/resources/datasource.html +++ b/src/main/resources/support/http/resources/datasource.html @@ -16,7 +16,7 @@

diff --git a/src/main/resources/support/http/resources/index.html b/src/main/resources/support/http/resources/index.html index 7d79f78eb7..1a8c90464d 100644 --- a/src/main/resources/support/http/resources/index.html +++ b/src/main/resources/support/http/resources/index.html @@ -15,7 +15,7 @@

diff --git a/src/main/resources/support/http/resources/js/websession.js b/src/main/resources/support/http/resources/js/websession.js new file mode 100644 index 0000000000..6e201222ea --- /dev/null +++ b/src/main/resources/support/http/resources/js/websession.js @@ -0,0 +1,108 @@ + +var xmlHttpForDataSourceSqlStatInfo; + +var sqlViewOrderBy = ''; +var sqlViewOrderBy_old = ''; +var sqlViewOrderType = 'asc'; + +// only one page for now +var sqlViewPage = 1; +var sqlViewPerPageCount = 1000000; + +function resetSortMark() { + var divObj = document.getElementById('th-' + sqlViewOrderBy); + var old_divObj = document.getElementById('th-' + sqlViewOrderBy_old); + var replaceToStr = ''; + if (old_divObj) { + var html = old_divObj.innerHTML; + if (sqlViewOrderBy_old.indexOf('[') > 0) + replaceToStr = '-'; + html = html.replace('↑', replaceToStr); + html = html.replace('↓', replaceToStr); + old_divObj.innerHTML = html + } + if (divObj) { + var html = divObj.innerHTML; + if (sqlViewOrderBy.indexOf('[') > 0) + html = ''; + + if (sqlViewOrderType == 'asc') { + html += '↑'; + } else if (sqlViewOrderType == 'desc') { + html += '↓'; + } + divObj.innerHTML = html; + } +} + +function setOrderBy(orderBy) { + if (sqlViewOrderBy != orderBy) { + sqlViewOrderBy_old = sqlViewOrderBy; + sqlViewOrderBy = orderBy; + sqlViewOrderType = 'desc'; + resetSortMark(); + return; + } + + sqlViewOrderBy_old = sqlViewOrderBy; + + if (sqlViewOrderType == 'asc') + sqlViewOrderType = 'desc' + else + sqlViewOrderType = 'asc'; + + resetSortMark(); + +} + +function getSqlViewJsonUrl() { + var result = 'websession.json?'; + + if (sqlViewOrderBy != undefined) + result += 'orderBy=' + sqlViewOrderBy + '&'; + + if (sqlViewOrderType != undefined) + result += 'orderType=' + sqlViewOrderType + '&'; + + if (sqlViewPage != undefined) + result += 'page=' + sqlViewPage + '&'; + + if (sqlViewPerPageCount != undefined) + result += 'perPageCount=' + sqlViewPerPageCount + '&'; + + return result; +} + +function ajaxRequestForDataSourceSqlStatInfo() { + xmlHttpForDataSourceSqlStatInfo = getRequestObject(); + sendRequest(xmlHttpForDataSourceSqlStatInfo,getSqlViewJsonUrl(),ajaxResponseForDataSourceSqlStatInfo) +} + +function subSqlString(sql, len) { + if (sql.length <= len) + return sql; + return sql.substr(0, len) + '...'; +} +function ajaxResponseForDataSourceSqlStatInfo() { + var sqlStatList = getJSONResponseContent(xmlHttpForDataSourceSqlStatInfo); + if(sqlStatList==null) return; + + var sqlStatTable = document.getElementById("WebSessionStatTable"); + while (sqlStatTable.rows.length > 1) { + sqlStatTable.deleteRow(1); + } + for ( var i = 0; i < sqlStatList.length; i++) { + var sqlStat = sqlStatList[i]; + var newRow = sqlStatTable.insertRow(-1); + newRow.insertCell(-1).innerHTML = i+1; + newRow.insertCell(-1).innerHTML = sqlStat.SESSIONID; + newRow.insertCell(-1).innerHTML = sqlStat.RequestCount; + newRow.insertCell(-1).innerHTML = sqlStat.RunningCount; + newRow.insertCell(-1).innerHTML = sqlStat.ConcurrentMax; + newRow.insertCell(-1).innerHTML = sqlStat.JdbcExecuteCount; + newRow.insertCell(-1).innerHTML = sqlStat.JdbcCommitCount; + newRow.insertCell(-1).innerHTML = sqlStat.JdbcRollbackCount; + newRow.insertCell(-1).innerHTML = sqlStat.JdbcFetchRowCount; + newRow.insertCell(-1).innerHTML = sqlStat.JdbcUpdateCount; + } +} \ No newline at end of file diff --git a/src/main/resources/support/http/resources/sql.html b/src/main/resources/support/http/resources/sql.html index e51d7e51d0..8d91615be0 100644 --- a/src/main/resources/support/http/resources/sql.html +++ b/src/main/resources/support/http/resources/sql.html @@ -16,7 +16,7 @@

diff --git a/src/main/resources/support/http/resources/websession.html b/src/main/resources/support/http/resources/websession.html new file mode 100644 index 0000000000..148f0dfde8 --- /dev/null +++ b/src/main/resources/support/http/resources/websession.html @@ -0,0 +1,42 @@ + + + + Druid Web Session Stat + + + + + + + +
+ +
+ + + + \ No newline at end of file diff --git a/src/main/resources/support/http/resources/weburi.html b/src/main/resources/support/http/resources/weburi.html index c6448a765c..2139430a4a 100644 --- a/src/main/resources/support/http/resources/weburi.html +++ b/src/main/resources/support/http/resources/weburi.html @@ -1,7 +1,7 @@ - {title} + Druid Web URI Stat @@ -16,7 +16,7 @@