diff --git a/src/main/java/com/alibaba/druid/support/http/StatServlet.java b/src/main/java/com/alibaba/druid/support/http/StatServlet.java index 5536100ce1..4b8f342066 100644 --- a/src/main/java/com/alibaba/druid/support/http/StatServlet.java +++ b/src/main/java/com/alibaba/druid/support/http/StatServlet.java @@ -22,6 +22,7 @@ import com.alibaba.druid.stat.DruidDataSourceStatManager; import com.alibaba.druid.stat.JdbcSqlStat; import com.alibaba.druid.util.IOUtils; import com.alibaba.druid.util.JdbcUtils; +import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; /** @@ -37,47 +38,55 @@ public class StatServlet extends HttpServlet { private final static int RESULT_CODE_SUCCESS = 1; private final static int RESULT_CODE_ERROR = -1; - public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String contextPath = req.getContextPath(); - String servletPath = req.getServletPath(); - String requestURI = req.getRequestURI(); - - if (contextPath == null) { // root context - contextPath = ""; - } - - String path = requestURI.substring(contextPath.length() + servletPath.length()); - - if (path.length() == 0 || path.equals("index.html")) { - // TODO home page - } else if (path.equals("datasource")) { - // TODO datasource list page - } else if (path.equals("datasource.json")) { - // TODO datasource list json - } else if (path.startsWith("datasource-")) { - // TODO datasource single - } else if (path.equals("sql")) { - // TODO sql page - } else if (path.equals("sql.json")) { - // TODO sql json - } else if (path.startsWith("sql-")) { - - } - - if (path.startsWith("/json/basic")) { - returnJSON_BasicStat(req, resp); + public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String contextPath = request.getContextPath(); + String servletPath = request.getServletPath(); + String requestURI = request.getRequestURI(); + + if (contextPath == null) { // root context + contextPath = ""; + } + + String path = requestURI.substring(contextPath.length() + servletPath.length()); + + if (path.length() == 0) { + returnResourceFile("/index.html", response); return; } - if (path.startsWith("/json/datasource")) { - returnJSON_DataSourceStat(req, resp); + + if (path.equals("/basic.json")) { + returnJSONBasicStat(request, response); return; } - if (path.startsWith("/json/sql")) { - returnJSON_DataSourceSqlStat(req, resp); + + if (path.equals("/datasource.html")) { + returnResourceFile(path, response); return; } - // find file in jar resources path - returnResourceFile(path, resp); + if (path.equals("/datasource.json")) { + returnJSONResult(request, response, RESULT_CODE_SUCCESS, getJSONDataSourceStatList()); + return; + } + if (path.startsWith("/datasource-")) { + Integer id = StringUtils.subStringToInteger(path, "datasource-", "."); + Object result = getJSONDataSourceStat(id); + returnJSONResult(request, response, result == null ? RESULT_CODE_ERROR : RESULT_CODE_SUCCESS, result); + return; + } + + if (path.equals("/sql.json")) { + returnJSONResult(request, response, RESULT_CODE_SUCCESS, getJSONSqlStat()); + return; + } + if (path.startsWith("/sql-")) { + Integer id = StringUtils.subStringToInteger(path, "sql-", "."); + Object result = getJSONSqlStat(id); + returnJSONResult(request, response, result == null ? RESULT_CODE_ERROR : RESULT_CODE_SUCCESS, result); + return; + } + + // find file in resources path + returnResourceFile(path, response); } private List getJSONDrivers() { @@ -89,64 +98,45 @@ public class StatServlet extends HttpServlet { return drivers; } - private void returnJSON_BasicStat(HttpServletRequest req, HttpServletResponse resp) throws IOException { + private void returnJSONBasicStat(HttpServletRequest request, HttpServletResponse response) throws IOException { Map json = new HashMap(); json.put("Version", VERSION.getVersionNumber()); json.put("Drivers", getJSONDrivers()); - json.put("DataSources", getJSONDataSources()); - returnJSONResult(req, resp, RESULT_CODE_SUCCESS, json); + returnJSONResult(request, response, RESULT_CODE_SUCCESS, json); } - private void returnJSON_DataSourceStat(HttpServletRequest req, HttpServletResponse resp) throws IOException { - Integer identity = null; - try { - identity = Integer.parseInt(req.getParameter("identity")); - } catch (Exception e) { - } - Map json = getJSONDataSourceStat(identity); - if (identity == null) { - returnJSONResult(req, resp, RESULT_CODE_ERROR, null); - } else { - returnJSONResult(req, resp, RESULT_CODE_SUCCESS, json); - } - - } - - private void returnJSON_DataSourceSqlStat(HttpServletRequest req, HttpServletResponse resp) throws IOException { - Integer identity = null; - try { - identity = Integer.parseInt(req.getParameter("identity")); - } catch (Exception e) { - } - List sqlStatList = getJSONDataSourceSqlStat(identity); - if (identity == null || sqlStatList == null) { - returnJSONResult(req, resp, RESULT_CODE_ERROR, null); - } else { - returnJSONResult(req, resp, RESULT_CODE_SUCCESS, sqlStatList); - } - - } - - private List getJSONDataSources() { - List drivers = new ArrayList(); + private List getJSONDataSourceStatList() { + List datasourceList = new ArrayList(); for (DruidDataSource dataSource : DruidDataSourceStatManager.getDruidDataSourceInstances()) { - drivers.add(getJSONDataSource(dataSource)); + datasourceList.add(toJSONDataSource(dataSource)); } - return drivers; + return datasourceList; } private Map getJSONDataSourceStat(Integer id) { if (id == null) { return null; } - DruidDataSource ds = getDruidDataSourceById(id); - if (ds == null) { + DruidDataSource datasource = getDruidDataSourceById(id); + return datasource == null ? null : toJSONDataSource(datasource); + } + + private Map getJSONSqlStat(Integer id) { + if (id == null) { return null; } + JdbcSqlStat sqlStat = getSqlStatById(id); + return sqlStat == null ? null : toJSONSqlStat(sqlStat); + } - return getJSONDataSource(ds); + private JdbcSqlStat getSqlStatById(Integer id) { + for (DruidDataSource ds : DruidDataSourceStatManager.getDruidDataSourceInstances()) { + JdbcSqlStat sqlStat = ds.getDataSourceStat().getSqlStat(id); + if (sqlStat != null) return sqlStat; + } + return null; } private DruidDataSource getDruidDataSourceById(Integer identity) { @@ -161,40 +151,39 @@ public class StatServlet extends HttpServlet { return null; } - private List getJSONDataSourceSqlStat(Integer id) { - if (id == null) { - return null; - } - DruidDataSource ds = getDruidDataSourceById(id); - if (ds == null) { - return null; - } + private List getJSONSqlStat() { List array = new ArrayList(); - for (JdbcSqlStat sqlStat : ds.getDataSourceStat().getSqlStatMap().values()) { - Map json = new HashMap(); - json.put("SQL", sqlStat.getSql()); - json.put("File", sqlStat.getFile()); - json.put("Name", sqlStat.getName()); - json.put("ExecuteCount", sqlStat.getExecuteCount()); - json.put("ExecuteMillisTotal", sqlStat.getExecuteMillisTotal()); - json.put("ExecuteMillisMax", sqlStat.getExecuteMillisMax()); - json.put("InTxnCount", sqlStat.getInTransactionCount()); - json.put("ErrorCount", sqlStat.getErrorCount()); - json.put("UpdateCount", sqlStat.getUpdateCount()); - json.put("FetchRowCount", sqlStat.getFetchRowCount()); - json.put("RunningCount", sqlStat.getRunningCount()); - json.put("ConcurrentMax", sqlStat.getConcurrentMax()); - json.put("ExecHistogram", sqlStat.getHistogram().toArray()); - json.put("FetchRowHistogram", sqlStat.getFetchRowCountHistogram().toArray()); - json.put("UpdateCountHistogram", sqlStat.getUpdateCountHistogram().toArray()); - json.put("ExecAndRsHoldHistogram", sqlStat.getExecuteAndResultHoldTimeHistogram().toArray()); - - array.add(json); + for (DruidDataSource datasource : DruidDataSourceStatManager.getDruidDataSourceInstances()) { + for (JdbcSqlStat sqlStat : datasource.getDataSourceStat().getSqlStatMap().values()) { + array.add(toJSONSqlStat(sqlStat)); + } } return array; } - private Map getJSONDataSource(DruidDataSource dataSource) { + private Map toJSONSqlStat(JdbcSqlStat sqlStat) { + Map json = new HashMap(); + json.put("SQL", sqlStat.getSql()); + json.put("File", sqlStat.getFile()); + json.put("Name", sqlStat.getName()); + json.put("ExecuteCount", sqlStat.getExecuteCount()); + json.put("ExecuteMillisTotal", sqlStat.getExecuteMillisTotal()); + json.put("ExecuteMillisMax", sqlStat.getExecuteMillisMax()); + json.put("InTxnCount", sqlStat.getInTransactionCount()); + json.put("ErrorCount", sqlStat.getErrorCount()); + json.put("UpdateCount", sqlStat.getUpdateCount()); + json.put("FetchRowCount", sqlStat.getFetchRowCount()); + json.put("RunningCount", sqlStat.getRunningCount()); + json.put("ConcurrentMax", sqlStat.getConcurrentMax()); + json.put("ExecHistogram", sqlStat.getHistogram().toArray()); + json.put("FetchRowHistogram", sqlStat.getFetchRowCountHistogram().toArray()); + json.put("UpdateCountHistogram", sqlStat.getUpdateCountHistogram().toArray()); + json.put("ExecAndRsHoldHistogram", sqlStat.getExecuteAndResultHoldTimeHistogram().toArray()); + + return json; + } + + private Map toJSONDataSource(DruidDataSource dataSource) { Map json = new HashMap(); json.put("Identity", System.identityHashCode(dataSource)); @@ -220,9 +209,9 @@ public class StatServlet extends HttpServlet { return json; } - private void returnJSONResult(HttpServletRequest req, HttpServletResponse resp, int resultCode, Object content) - throws IOException { - PrintWriter out = resp.getWriter(); + private void returnJSONResult(HttpServletRequest request, HttpServletResponse response, int resultCode, + Object content) throws IOException { + PrintWriter out = response.getWriter(); Map json = new HashMap(); json.put("ResultCode", resultCode); diff --git a/src/main/java/com/alibaba/druid/util/StringUtils.java b/src/main/java/com/alibaba/druid/util/StringUtils.java new file mode 100644 index 0000000000..da79134951 --- /dev/null +++ b/src/main/java/com/alibaba/druid/util/StringUtils.java @@ -0,0 +1,70 @@ +package com.alibaba.druid.util; + +/** + * @author sandzhang + */ +public class StringUtils { + + /** + * Example: subString("12345","1","4")=23 + * + * @param src + * @param start + * @param to + * @return + */ + public static Integer subStringToInteger(String src, String start, String to) { + return stringToInteger(subString(src, start, to)); + } + + /** + * Example: subString("abcd","a","c")="b" + * + * @param src + * @param start + * @param to + * @return + */ + public static String subString(String src, String start, String to) { + int indexFrom = src.indexOf(start); + int indexTo = src.indexOf(to); + if (indexFrom < 0 || indexTo < 0 || indexFrom < indexTo) { + return null; + } + indexFrom += start.length(); + indexTo += to.length(); + return src.substring(indexFrom, indexTo); + + } + + /** + * @param in + * @return + */ + public static Integer stringToInteger(String in) { + if (in == null) return null; + in = in.trim(); + if (in.length() == 0) return null; + try { + return Integer.parseInt(in); + } catch (NumberFormatException e) { + return null; + } + } + + /** + * @param in + * @return + */ + public static Long stringToLong(String in) { + if (in == null) return null; + in = in.trim(); + if (in.length() == 0) return null; + try { + return Long.parseLong(in); + } catch (NumberFormatException e) { + return null; + } + } + +} diff --git a/src/main/resources/support/http/resources/datasource.html b/src/main/resources/support/http/resources/datasource.html new file mode 100644 index 0000000000..0594a9caf8 --- /dev/null +++ b/src/main/resources/support/http/resources/datasource.html @@ -0,0 +1,25 @@ + + + + Druid DataSource Stat List + + + + + +
+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/src/main/resources/support/http/resources/index.html b/src/main/resources/support/http/resources/index.html index f491562a6a..81da975af6 100644 --- a/src/main/resources/support/http/resources/index.html +++ b/src/main/resources/support/http/resources/index.html @@ -1,13 +1,23 @@ - Druid Stat + Druid Stat Index + +
+
+

Stat Index

@@ -26,67 +36,6 @@
-
-
- -
-

Basic Info :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
UserName URL 
DbType DriverClassName 
TestOnBorrow TestWhileIdle 
InitialSize MinIdle MaxActive 
LogicConnectCount LogicCloseCount LogicConnectErrorCount 
PhysicalConnectCount PhysicalCloseCount PhysicalConnectErrorCount 
PSCacheAccessCount PSCacheHitCount PSCacheMissCount 
-
-

SqlStat Info

- - - - - - - - - - - - - - - - -
SQLFileNameExecute CountExecute Millis TotalExecute Millis MaxInTxn CountError CountEffected Row CountFetch Row CountRunning CountConcurrent MaxHistogram
-
\ No newline at end of file diff --git a/src/main/resources/support/http/resources/js.js b/src/main/resources/support/http/resources/js.js index 0793d7c6a4..8b8167e343 100644 --- a/src/main/resources/support/http/resources/js.js +++ b/src/main/resources/support/http/resources/js.js @@ -1,152 +1,179 @@ - -var datasourceId; var xmlHttpForBasicInfo; var xmlHttpForDataSourceInfo; var xmlHttpForDataSourceSqlStatInfo; -function ajaxRequestForBasicInfo(){ - if(window.XMLHttpRequest) xmlHttpForBasicInfo=new XMLHttpRequest(); - else if(window.ActiveXObject) xmlHttpForBasicInfo=new ActiveXObject("Microsoft.XMLHTTP"); - xmlHttpForBasicInfo.onreadystatechange=ajaxResponseForBasicInfo; - xmlHttpForBasicInfo.open("GET",'json/basic',true); - xmlHttpForBasicInfo.send(null); +function ajaxRequestForBasicInfo() { + if (window.XMLHttpRequest) + xmlHttpForBasicInfo = new XMLHttpRequest(); + else if (window.ActiveXObject) + xmlHttpForBasicInfo = new ActiveXObject("Microsoft.XMLHTTP"); + xmlHttpForBasicInfo.onreadystatechange = ajaxResponseForBasicInfo; + xmlHttpForBasicInfo.open("GET", 'basic.json', true); + xmlHttpForBasicInfo.send(null); } -function ajaxRequestForDataSourceSqlStatInfo(){ - if(!datasourceId){ - return; - } - if(window.XMLHttpRequest) xmlHttpForDataSourceSqlStatInfo=new XMLHttpRequest(); - else if(window.ActiveXObject) xmlHttpForDataSourceSqlStatInfo=new ActiveXObject("Microsoft.XMLHTTP"); - xmlHttpForDataSourceSqlStatInfo.onreadystatechange=ajaxResponseForDataSourceSqlStatInfo; - xmlHttpForDataSourceSqlStatInfo.open("GET",'json/sql?identity='+datasourceId,true); - xmlHttpForDataSourceSqlStatInfo.send(null); +function ajaxRequestForDataSourceSqlStatInfo() { + if (window.XMLHttpRequest) + xmlHttpForDataSourceSqlStatInfo = new XMLHttpRequest(); + else if (window.ActiveXObject) + xmlHttpForDataSourceSqlStatInfo = new ActiveXObject("Microsoft.XMLHTTP"); + xmlHttpForDataSourceSqlStatInfo.onreadystatechange = ajaxResponseForDataSourceSqlStatInfo; + xmlHttpForDataSourceSqlStatInfo.open("GET", 'sql.json', true); + xmlHttpForDataSourceSqlStatInfo.send(null); } -function ajaxRequestForDataSourceInfo(){ - if(!datasourceId){ - return; - } - if(window.XMLHttpRequest) xmlHttpForDataSourceInfo=new XMLHttpRequest(); - else if(window.ActiveXObject) xmlHttpForDataSourceInfo=new ActiveXObject("Microsoft.XMLHTTP"); - xmlHttpForDataSourceInfo.onreadystatechange=ajaxResponseForDataSourceInfo; - xmlHttpForDataSourceInfo.open("GET",'json/datasource?identity='+datasourceId,true); - xmlHttpForDataSourceInfo.send(null); +function ajaxRequestForDataSourceInfo() { + if (window.XMLHttpRequest) + xmlHttpForDataSourceInfo = new XMLHttpRequest(); + else if (window.ActiveXObject) + xmlHttpForDataSourceInfo = new ActiveXObject("Microsoft.XMLHTTP"); + xmlHttpForDataSourceInfo.onreadystatechange = ajaxResponseForDataSourceInfo; + xmlHttpForDataSourceInfo.open("GET", 'datasource.json', true); + xmlHttpForDataSourceInfo.send(null); } -function ajaxResponseForBasicInfo(){ - var html=''; - var tabHtml=''; - if(xmlHttpForBasicInfo.readyState==4){ - if(xmlHttpForBasicInfo.status==200){ - var jsonResp=eval("("+xmlHttpForBasicInfo.responseText+")"); - if(jsonResp.ResultCode==1){ - document.getElementById("DruidVersion").innerHTML=jsonResp.Content.Version; - - var driversList=jsonResp.Content.Drivers; - if(driversList){ - var driverHtml=''; - for(var i=0;i'; + listHtml += '

Basic Info For

'; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += ''; + listHtml += '
UserName URL 
DbType DriverClassName 
TestOnBorrow TestWhileIdle 
InitialSize MinIdle MaxActive 
LogicConnectCount LogicCloseCount LogicConnectErrorCount 
PhysicalConnectCount PhysicalCloseCount PhysicalConnectErrorCount 
PSCacheAccessCount PSCacheHitCount PSCacheMissCount 
'; + listHtml += ''; + + document.getElementById("dataSourceStatList").innerHTML += listHtml; } - - for(var i=0;i['+ds.Name+'] '; - } + fillDataSourceInfo(datasource); } - } - document.getElementById("menu").innerHTML=tabHtml; - } - } + } + } + } } -function ajaxResponseForDataSourceInfo(){ - var html=''; - if(xmlHttpForDataSourceInfo.readyState==4){ - if(xmlHttpForDataSourceInfo.status==200){ - var jsonResp=eval("("+xmlHttpForDataSourceInfo.responseText+")"); - if(jsonResp.ResultCode==1){ - var ds=jsonResp.Content; - document.getElementById("DS-Info-Title").innerHTML=ds.Name; - document.getElementById("DS-Info-UserName").innerHTML=ds.UserName; - document.getElementById("DS-Info-URL").innerHTML=ds.URL; - document.getElementById("DS-Info-DbType").innerHTML=ds.DbType; - document.getElementById("DS-Info-DriverClassName").innerHTML=ds.DriverClassName; - document.getElementById("DS-Info-TestOnBorrow").innerHTML=ds.TestOnBorrow; - document.getElementById("DS-Info-TestWhileIdle").innerHTML=ds.TestWhileIdle; - document.getElementById("DS-Info-InitialSize").innerHTML=ds.InitialSize; - document.getElementById("DS-Info-MinIdle").innerHTML=ds.MinIdle; - document.getElementById("DS-Info-MaxActive").innerHTML=ds.MaxActive; - document.getElementById("DS-Info-LogicConnectCount").innerHTML=ds.LogicConnectCount; - document.getElementById("DS-Info-LogicCloseCount").innerHTML=ds.LogicCloseCount; - document.getElementById("DS-Info-LogicConnectErrorCount").innerHTML=ds.LogicConnectErrorCount; - document.getElementById("DS-Info-PhysicalConnectCount").innerHTML=ds.PhysicalConnectCount; - document.getElementById("DS-Info-PhysicalCloseCount").innerHTML=ds.PhysicalCloseCount; - document.getElementById("DS-Info-PhysicalConnectErrorCount").innerHTML=ds.PhysicalConnectErrorCount; - document.getElementById("DS-Info-PSCacheAccessCount").innerHTML=ds.PSCacheAccessCount; - document.getElementById("DS-Info-PSCacheHitCount").innerHTML=ds.PSCacheHitCount; - document.getElementById("DS-Info-PSCacheMissCount").innerHTML=ds.PSCacheMissCount; - - } - } - } -} -function ajaxResponseForDataSourceSqlStatInfo(){ - if(xmlHttpForDataSourceSqlStatInfo.readyState==4){ - if(xmlHttpForDataSourceSqlStatInfo.status==200){ - var jsonResp=eval("("+xmlHttpForDataSourceSqlStatInfo.responseText+")"); - if(jsonResp.ResultCode==1){ - var sqlStatList=jsonResp.Content; - var sqlStatTable=document.getElementById("SqlStatTable"); - while(sqlStatTable.rows.length>1){ +function ajaxResponseForDataSourceSqlStatInfo() { + if (xmlHttpForDataSourceSqlStatInfo.readyState == 4) { + if (xmlHttpForDataSourceSqlStatInfo.status == 200) { + var jsonResp = eval("(" + xmlHttpForDataSourceSqlStatInfo.responseText + ")"); + if (jsonResp.ResultCode == 1) { + var sqlStatList = jsonResp.Content; + var sqlStatTable = document.getElementById("SqlStatTable"); + while (sqlStatTable.rows.length > 1) { sqlStatTable.deleteRow(1); } - for(var i=0;iExecHistogram |'; - hiHtml+='FetchRow | '; - hiHtml+='UpdateCount | '; - hiHtml+='ExecAndRsHold'; - hi.innerHTML=hiHtml; + newRow.insertCell(-1).innerHTML = sqlStat.SQL; + if (sqlStat.File) + newRow.insertCell(-1).innerHTML = sqlStat.File; + else + newRow.insertCell(-1).innerHTML = ''; + if (sqlStat.Name) + newRow.insertCell(-1).innerHTML = sqlStat.Name; + else + newRow.insertCell(-1).innerHTML = ''; + newRow.insertCell(-1).innerHTML = sqlStat.ExecuteCount; + newRow.insertCell(-1).innerHTML = sqlStat.ExecuteMillisTotal; + newRow.insertCell(-1).innerHTML = sqlStat.ExecuteMillisMax; + newRow.insertCell(-1).innerHTML = sqlStat.InTxnCount; + newRow.insertCell(-1).innerHTML = sqlStat.ErrorCount; + newRow.insertCell(-1).innerHTML = sqlStat.UpdateCount; + newRow.insertCell(-1).innerHTML = sqlStat.FetchRowCount; + newRow.insertCell(-1).innerHTML = sqlStat.RunningCount; + newRow.insertCell(-1).innerHTML = sqlStat.ConcurrentMax; + var hi = newRow.insertCell(-1); + var hiHtml = ''; + hiHtml += 'ExecHistogram |'; + hiHtml += 'FetchRow | '; + hiHtml += 'UpdateCount | '; + hiHtml += 'ExecAndRsHold'; + hi.innerHTML = hiHtml; } - } - } - } -} -function showDataSource(id){ - datasourceId=id; - ajaxRequestForDataSourceInfo(); - ajaxRequestForDataSourceSqlStatInfo(); -} -function init(){ - ajaxRequestForBasicInfo(); - var time1=setInterval("ajaxRequestForBasicInfo();",1000); - var time2=setInterval("ajaxRequestForDataSourceInfo();",1000); - var time3=setInterval("ajaxRequestForDataSourceSqlStatInfo();",1000); + } + } + } } \ 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 new file mode 100644 index 0000000000..ee0163f401 --- /dev/null +++ b/src/main/resources/support/http/resources/sql.html @@ -0,0 +1,41 @@ + + + + Druid SqlStat List + + + + + +
+ +
+
+

SqlStat List

+ + + + + + + + + + + + + + + + +
SQLFileNameExecute CountExecute Millis TotalExecute Millis MaxInTxn CountError CountEffected Row CountFetch Row CountRunning CountConcurrent MaxHistogram
+
+ + \ No newline at end of file