mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improve sessionStat
This commit is contained in:
@@ -27,7 +27,7 @@ public class JSONDruidStatService {
|
||||
|
||||
private final static JSONDruidStatService instance = new JSONDruidStatService();
|
||||
|
||||
private static DruidStatManagerFacade statManagerFacade = DruidStatManagerFacade.getInstance();
|
||||
private static DruidStatManagerFacade statManagerFacade = DruidStatManagerFacade.getInstance();
|
||||
|
||||
public final static int RESULT_CODE_SUCCESS = 1;
|
||||
public final static int RESULT_CODE_ERROR = -1;
|
||||
@@ -105,6 +105,11 @@ public class JSONDruidStatService {
|
||||
return returnJSONResult(RESULT_CODE_SUCCESS, getWebSessionStatDataList(parameters));
|
||||
}
|
||||
|
||||
if (url.startsWith("/websession-") && url.indexOf(".json") > 0) {
|
||||
String id = StringUtils.subString(url, "websession-", ".json");
|
||||
return returnJSONResult(RESULT_CODE_SUCCESS, getWebSessionDetail(id));
|
||||
}
|
||||
|
||||
if (url.startsWith("/spring.json")) {
|
||||
return returnJSONResult(RESULT_CODE_SUCCESS, getSpringStatDataList(parameters));
|
||||
}
|
||||
@@ -122,6 +127,10 @@ public class JSONDruidStatService {
|
||||
return comparatorOrderBy(array, parameters);
|
||||
}
|
||||
|
||||
private Map<String, Object> getWebSessionDetail(String sessionId) {
|
||||
return WebAppStatManager.getInstance().getSessionStat(sessionId);
|
||||
}
|
||||
|
||||
private List<Map<String, Object>> getWebSessionStatDataList(Map<String, String> parameters) {
|
||||
List<Map<String, Object>> array = WebAppStatManager.getInstance().getSessionStatData();
|
||||
return array;
|
||||
|
||||
@@ -145,6 +145,16 @@ public class WebAppStat {
|
||||
public WebSessionStat getSessionStat(String sessionId) {
|
||||
return getSessionStat(sessionId, false);
|
||||
}
|
||||
|
||||
public Map<String, Object> getSessionStatData(String sessionId) {
|
||||
WebSessionStat uriStat = sessionStatMap.get(sessionId);
|
||||
|
||||
if (uriStat == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return uriStat.getStatData();
|
||||
}
|
||||
|
||||
public WebSessionStat getSessionStat(String sessionId, boolean create) {
|
||||
sessionStatLock.readLock().lock();
|
||||
|
||||
@@ -65,6 +65,19 @@ public class WebAppStatManager {
|
||||
|
||||
return allAppUriStatDataList;
|
||||
}
|
||||
|
||||
public Map<String, Object> getSessionStat(String sessionId) {
|
||||
Set<Object> stats = getWebAppStatSet();
|
||||
|
||||
for (Object stat : stats) {
|
||||
Map<String, Object> statData = WebAppStatUtils.getSessionStatData(stat, sessionId);
|
||||
if (statData != null) {
|
||||
return statData;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void addWebAppStatSet(Object webAppStat) {
|
||||
getWebAppStatSet().add(webAppStat);
|
||||
|
||||
@@ -58,6 +58,22 @@ public class WebAppStatUtils {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Map<String, Object> getSessionStatData(Object webStat, String sessionId) {
|
||||
if (webStat.getClass() == WebAppStat.class) {
|
||||
return ((WebAppStat) webStat).getSessionStatData(sessionId);
|
||||
}
|
||||
|
||||
try {
|
||||
Method method = webStat.getClass().getMethod("getSessionStatData", String.class);
|
||||
Object obj = method.invoke(webStat);
|
||||
return (Map<String, Object>) obj;
|
||||
} catch (Exception e) {
|
||||
LOG.error("getSessionStatData error", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void reset(Object webStat) {
|
||||
if (webStat.getClass() == WebAppStat.class) {
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
function ajaxRequestForSqlInfo() {
|
||||
var sessionId = getUrlVar("sessionId");
|
||||
xmlHttpForConnectionInfo = getRequestObject();
|
||||
sendRequest(xmlHttpForConnectionInfo, 'websession-' + sessionId + '.json', ajaxResponseForSqlInfo)
|
||||
}
|
||||
|
||||
function ajaxResponseForSqlInfo() {
|
||||
var stat = getJSONResponseContent(xmlHttpForConnectionInfo);
|
||||
if (stat == null)
|
||||
return;
|
||||
|
||||
changeInnerHtml("SESSIONID", stat.SESSIONID);
|
||||
if (stat.Principal) {
|
||||
changeInnerHtml("Principal", stat.Principal);
|
||||
}
|
||||
changeInnerHtml("CreateTime", stat.CreateTime);
|
||||
changeInnerHtml("LastAccessTime", stat.LastAccessTime);
|
||||
changeInnerHtml("UserAgent", stat.UserAgent);
|
||||
changeInnerHtml("RemoteAddress", stat.RemoteAddress);
|
||||
changeInnerHtml("RequestCount", stat.RequestCount);
|
||||
changeInnerHtml("RequestTimeMillisTotal", stat.RequestTimeMillisTotal);
|
||||
changeInnerHtml("RunningCount", stat.RunningCount);
|
||||
changeInnerHtml("ConcurrentMax", stat.ConcurrentMax);
|
||||
changeInnerHtml("JdbcExecuteCount", stat.JdbcExecuteCount);
|
||||
changeInnerHtml("JdbcExecuteTimeMillis", stat.JdbcExecuteTimeMillis);
|
||||
changeInnerHtml("JdbcCommitCount", stat.JdbcCommitCount);
|
||||
changeInnerHtml("JdbcRollbackCount", stat.JdbcRollbackCount);
|
||||
changeInnerHtml("JdbcFetchRowCount", stat.JdbcFetchRowCount);
|
||||
changeInnerHtml("JdbcUpdateCount", stat.JdbcUpdateCount);
|
||||
}
|
||||
@@ -98,7 +98,8 @@ function handleAjaxResult() {
|
||||
var stat = statList[i];
|
||||
var newRow = sqlStatTable.insertRow(-1);
|
||||
newRow.insertCell(-1).innerHTML = i+1;
|
||||
newRow.insertCell(-1).innerHTML = stat.SESSIONID;
|
||||
newRow.insertCell(-1).innerHTML = '<a target="_blank" href="websession-detail.html?sessionId=' + stat.SESSIONID + '">' + stat.SESSIONID + '</a>';
|
||||
|
||||
if (stat.Principal) {
|
||||
newRow.insertCell(-1).innerHTML = stat.Principal;
|
||||
} else {
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
|
||||
<link href="css/style.css" type="text/css" rel="stylesheet"/>
|
||||
<script src="js/common.js" type="text/javascript" charset="utf8"></script>
|
||||
<script src="js/websession-detail.js" type="text/javascript" charset="utf8"></script>
|
||||
<script >
|
||||
function init(){
|
||||
ajaxRequestForSqlInfo();
|
||||
var time3=setInterval("ajaxRequestForSqlInfo();",5000);
|
||||
buildMenu();
|
||||
buildFooter();
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init();">
|
||||
<br/>
|
||||
<div id="main">
|
||||
<br/>
|
||||
<h2> Web Session View</h2>
|
||||
<br/>
|
||||
<table cellpadding='5' cellspacing='1' width='99%'>
|
||||
<tr>
|
||||
<td class='td_lable' width='130'> SESSIONID</td>
|
||||
<td id="SESSIONID"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> UserAgent</td>
|
||||
<td id="UserAgent"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> CreateTime</td>
|
||||
<td id="CreateTime"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> LastAccessTime</td>
|
||||
<td id="LastAccessTime"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> RemoteAddress</td>
|
||||
<td id="RemoteAddress"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> RequestCount</td>
|
||||
<td id="RequestCount"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> RequestTimeMillisTotal</td>
|
||||
<td id="RequestTimeMillisTotal"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> RunningCount</td>
|
||||
<td id="RunningCount"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> ConcurrentMax</td>
|
||||
<td id="ConcurrentMax"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> JdbcExecuteCount</td>
|
||||
<td id="JdbcExecuteCount"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> JdbcExecuteTimeMillis</td>
|
||||
<td id="JdbcExecuteTimeMillis"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> JdbcCommitCount</td>
|
||||
<td id="JdbcCommitCount"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> JdbcRollbackCount</td>
|
||||
<td id="JdbcRollbackCount"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> JdbcFetchRowCount</td>
|
||||
<td id="JdbcFetchRowCount"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='td_lable'> JdbcUpdateCount</td>
|
||||
<td id="JdbcUpdateCount"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br />
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user