Merge pull request #14 from zhouhaibin/master

update the slowSqlShow function
This commit is contained in:
温高铁
2012-08-09 23:56:21 -07:00
6 changed files with 62 additions and 53 deletions
+16 -16
View File
@@ -4,7 +4,7 @@
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>0.2.6-SNAPSHOT</version>
<version>0.2.7-SNAPSHOT</version>
<packaging>jar</packaging>
<name>druid</name>
@@ -213,7 +213,7 @@
</dependencies>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
@@ -252,18 +252,18 @@
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.1.1</version>
<scope>provided</scope>
<optional>true</optional>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.1.1</version>
<scope>provided</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
<optional>true</optional>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
<optional>true</optional>
</dependency>
<dependency>
@@ -316,11 +316,11 @@
<version>11.2.0.3</version> <scope>provided</scope> </dependency> -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.2</version>
<scope>provided</scope>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.2.0</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
@@ -3,21 +3,12 @@ package com.alibaba.druid.stat;
import java.util.List;
import java.util.Map;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
import com.alibaba.druid.util.ReflectionUtils;
public class DruidDataSourceStatJNDIStatStrategy implements DruidDataSourceStatStrategy{
private final static Log LOG = LogFactory.getLog(DruidDataSourceStatJNDIStatStrategy.class);
private Object getStrategyB() {
try {
Class<?> clazz = ReflectionUtils.getClassFromWebContainerOrCurrentClassLoader("com.alibaba.druid.stat.DruidDataSourceStatDefaultStrategy");
return clazz.newInstance();
} catch (Exception e) {
LOG.error(e.getMessage(), e);
return null;
}
return ReflectionUtils.getClassFromWebContainerOrCurrentClassLoader("com.alibaba.druid.stat.DruidDataSourceStatDefaultStrategy");
}
@SuppressWarnings("unchecked")
@@ -1,6 +1,8 @@
package com.alibaba.druid.support.http;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;
@@ -36,6 +38,7 @@ public class StatViewServlet extends HttpServlet {
private static JSONDruidStatService jsonDruidStatService = JSONDruidStatService.getInstance();
public String templatePage;
private static DateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss:SSS");
public void init() throws ServletException {
try {
@@ -121,9 +124,26 @@ public class StatViewServlet extends HttpServlet {
content.append("</textarea><br />");
content.append("<p>API:com.alibaba.druid.sql.SQLUtils.format(sql,DBType);</p>");
content.append("<br />");
List<SQLStatement> statementList = SQLUtils.parseStatements((String) sqlStat.get("SQL"),
(String) sqlStat.get("DbType"));
if (sqlStat.get("LastSlowParameters") != null
&& sqlStat.get("LastSlowParameters").toString().trim().length() > 0) {
content.append("<h2>LastSlow SQL View:</h2>");
content.append("<table cellpadding='5' cellspacing='1' width='99%'>");
content.append("<tr>");
content.append("<td class='td_lable' width='130'>MaxTimespanOccurTime</td>");
content.append("<td>" + format.format(sqlStat.get("MaxTimespanOccurTime")) + "</td>");
content.append("</tr>");
content.append("<tr>");
content.append("<td class='td_lable' width='130'>LastSlowParameters</td>");
content.append("<td>" + sqlStat.get("LastSlowParameters") + "</td>");
content.append("</tr>");
content.append("</table>");
content.append("<br />");
}
List<SQLStatement> statementList = SQLUtils.parseStatements((String) sqlStat.get("SQL"),
(String) sqlStat.get("DbType"));
if (!statementList.isEmpty()) {
content.append("<h2>Parse View:</h2>");
@@ -42,20 +42,10 @@ public class ReflectionUtils {
}
}
public static Object callObjectMethod(Object obj, String methodName) {
public static Object callObjectMethod(Object obj, String methodName, Object... methodParams) {
try {
Method m = obj.getClass().getMethod(methodName);
return m.invoke(obj);
} catch (Exception e) {
LOG.warn("callObjectMethod fail:class=" + obj.getClass().getName() + " method=" + methodName, e);
return null;
}
}
public static Object callObjectMethod(Object obj, String methodName, Integer id) {
try {
Method m = obj.getClass().getMethod(methodName, Integer.class);
return m.invoke(obj, id);
return m.invoke(obj, methodParams);
} catch (Exception e) {
LOG.warn("callObjectMethod fail:class=" + obj.getClass().getName() + " method=" + methodName, e);
return null;
@@ -94,6 +94,7 @@ function ajaxResponseForDataSourceSqlStatInfo() {
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 = '<a target="_blank" href="sql-' + sqlStat.ID + '.html">' + subSqlString(sqlStat.SQL, 25) + '</a>';
// if (sqlStat.File)
// newRow.insertCell(-1).innerHTML = sqlStat.File;
@@ -105,7 +106,12 @@ function ajaxResponseForDataSourceSqlStatInfo() {
// newRow.insertCell(-1).innerHTML = '';
newRow.insertCell(-1).innerHTML = sqlStat.ExecuteCount;
newRow.insertCell(-1).innerHTML = sqlStat.TotalTime;
newRow.insertCell(-1).innerHTML = sqlStat.MaxTimespan;
//显示执行的时间比配置的均值时间慢的SQL链接
var lastSlowHtml = sqlStat.MaxTimespan;
if(sqlStat.LastSlowParameters!=null&&sqlStat.LastSlowParameters.length>0){
lastSlowHtml ='<a target="_blank" style="color:red" href="sql-' + sqlStat.ID + '.html">'+sqlStat.MaxTimespan+'</a>';
}
newRow.insertCell(-1).innerHTML = lastSlowHtml;
newRow.insertCell(-1).innerHTML = sqlStat.InTransactionCount;
newRow.insertCell(-1).innerHTML = sqlStat.ErrorCount;
newRow.insertCell(-1).innerHTML = sqlStat.EffectedRowCount;
@@ -120,8 +126,8 @@ function ajaxResponseForDataSourceSqlStatInfo() {
// hiHtml += '<a href="#' + sqlStat.ExecuteAndResultHoldTimeHistogram +
// '">ExecAndRsHold</a>';
newRow.insertCell(-1).innerHTML = '[' + sqlStat.Histogram + ']';
newRow.insertCell(-1).innerHTML = '[' + sqlStat.ExecuteAndResultHoldTimeHistogram + ']';
newRow.insertCell(-1).innerHTML = '[' + sqlStat.FetchRowCountHistogram + ']';
newRow.insertCell(-1).innerHTML = '[' + sqlStat.EffectedRowCountHistogram + ']';
newRow.insertCell(-1).innerHTML = '[' + sqlStat.ExecuteAndResultHoldTimeHistogram + ']';
}
}
@@ -24,6 +24,7 @@
<table cellspacing="1" cellpadding="5" id="SqlStatTable" width="99%">
<thead>
<tr>
<th class="td_lable">N--</th>
<th class="td_lable"><a id="th-SQL" href="javascript:void(0)" onclick="setOrderBy('SQL');">SQL</a></th>
<th class="td_lable" width="50"><a id="th-ExecuteCount" href="javascript:void(0)" onclick="setOrderBy('ExecuteCount');">Execute Count</a></th>
<th class="td_lable" width="50"><a id="th-TotalTime" href="javascript:void(0)" onclick="setOrderBy('TotalTime');">Execute Millis Total</a></th>
@@ -44,6 +45,16 @@
<a id="th-Histogram[6]" title="count of '100-1000 s'" href="javascript:void(0)" onclick="setOrderBy('Histogram[6]');">-</a>
<a id="th-Histogram[7]" title="count of '> 1000 s'" href="javascript:void(0)" onclick="setOrderBy('Histogram[7]');">-</a> ]
</th>
<th id="th-ExecuteAndResultHoldTimeHistogram" class="td_lable" align="left" width="100">ExecAndRsHold <br />[
<a id="th-ExecuteAndResultHoldTimeHistogram[0]" title="count of '0-1 ms'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[0]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[1]" title="count of '1-10 ms'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[1]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[2]" title="count of '10-100 ms'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[2]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[3]" title="count of '100ms-1s'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[3]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[4]" title="count of '1-10 s'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[4]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[5]" title="count of '10-100 s'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[5]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[6]" title="count of '100-1000 s'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[6]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[7]" title="count of '> 1000 s'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[7]');">-</a> ]
</th>
<th id="th-FetchRowCountHistogram" class="td_lable" align="left" width="100">FetchRow <br />[
<a id="th-FetchRowCountHistogram[0]" title="count of '0 FetchRow'" href="javascript:void(0)" onclick="setOrderBy('FetchRowCountHistogram[0]');">-</a>
<a id="th-FetchRowCountHistogram[1]" title="count of '1-9 FetchRow'" href="javascript:void(0)" onclick="setOrderBy('FetchRowCountHistogram[1]');">-</a>
@@ -60,16 +71,7 @@
<a id="th-EffectedRowCountHistogram[4]" title="count of '1000-9999 UpdateCount'" href="javascript:void(0)" onclick="setOrderBy('EffectedRowCountHistogram[4]');">-</a>
<a id="th-EffectedRowCountHistogram[5]" title="count of '> 9999 UpdateCount'" href="javascript:void(0)" onclick="setOrderBy('EffectedRowCountHistogram[5]');">-</a> ]
</th>
<th id="th-ExecuteAndResultHoldTimeHistogram" class="td_lable" align="left" width="100">ExecAndRsHold <br />[
<a id="th-ExecuteAndResultHoldTimeHistogram[0]" title="count of '0-1 ms'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[0]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[1]" title="count of '1-10 ms'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[1]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[2]" title="count of '10-100 ms'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[2]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[3]" title="count of '100ms-1s'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[3]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[4]" title="count of '1-10 s'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[4]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[5]" title="count of '10-100 s'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[5]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[6]" title="count of '100-1000 s'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[6]');">-</a>
<a id="th-ExecuteAndResultHoldTimeHistogram[7]" title="count of '> 1000 s'" href="javascript:void(0)" onclick="setOrderBy('ExecuteAndResultHoldTimeHistogram[7]');">-</a> ]
</th>
</tr>
</thead>
</table>