Merge remote-tracking branch 'upstream/master'

This commit is contained in:
wenshao
2013-04-05 01:34:29 +08:00
5 changed files with 115 additions and 95 deletions
@@ -123,10 +123,10 @@ public class PagerUtils {
}
OracleSelectQueryBlock countQueryBlock = new OracleSelectQueryBlock();
countQueryBlock.getSelectList().add(new SQLSelectItem(new SQLPropertyExpr(new SQLIdentifierExpr("_X"), "*")));
countQueryBlock.getSelectList().add(new SQLSelectItem(new SQLIdentifierExpr("ROWNUM"), "_RN"));
countQueryBlock.getSelectList().add(new SQLSelectItem(new SQLPropertyExpr(new SQLIdentifierExpr("XX"), "*")));
countQueryBlock.getSelectList().add(new SQLSelectItem(new SQLIdentifierExpr("ROWNUM"), "RN"));
countQueryBlock.setFrom(new SQLSubqueryTableSource(select, "_X"));
countQueryBlock.setFrom(new SQLSubqueryTableSource(select, "XX"));
countQueryBlock.setWhere(new SQLBinaryOpExpr(new SQLIdentifierExpr("ROWNUM"), //
SQLBinaryOperator.LessThanOrEqual, //
new SQLNumberExpr(count + offset)));
@@ -136,8 +136,8 @@ public class PagerUtils {
OracleSelectQueryBlock offsetQueryBlock = new OracleSelectQueryBlock();
offsetQueryBlock.getSelectList().add(new SQLSelectItem(new SQLAllColumnExpr()));
offsetQueryBlock.setFrom(new SQLSubqueryTableSource(new SQLSelect(countQueryBlock), "_XX"));
offsetQueryBlock.setWhere(new SQLBinaryOpExpr(new SQLIdentifierExpr("_RN"), //
offsetQueryBlock.setFrom(new SQLSubqueryTableSource(new SQLSelect(countQueryBlock), "XXX"));
offsetQueryBlock.setWhere(new SQLBinaryOpExpr(new SQLIdentifierExpr("RN"), //
SQLBinaryOperator.GreaterThan, //
new SQLNumberExpr(offset)));
@@ -120,6 +120,17 @@ public final class DruidStatService implements DruidStatServiceMBean {
if (url.startsWith("/sql.json")) {
return returnJSONResult(RESULT_CODE_SUCCESS, getSqlStatDataList(parameters));
}
if (url.startsWith("/wall.json")) {
Object result = statManagerFacade.getWallStatMap(null);
return returnJSONResult(RESULT_CODE_SUCCESS, result);
}
if (url.startsWith("/wall-") && url.indexOf(".json") > 0) {
Integer dataSourceId = StringUtils.subStringToInteger(url, "wall-", ".json");
Object result = statManagerFacade.getWallStatMap(dataSourceId);
return returnJSONResult(result == null ? RESULT_CODE_ERROR : RESULT_CODE_SUCCESS, result);
}
if (url.startsWith("/sql-") && url.indexOf(".json") > 0) {
Integer id = StringUtils.subStringToInteger(url, "sql-", ".json");
@@ -348,10 +348,10 @@ public class StatViewServlet extends HttpServlet {
if (isRequireAuth()
&& session.getAttribute(SESSION_USER_KEY) == null
&& !("/login.html".equals(path) || path.startsWith("/css") || path.startsWith("/js") || path.startsWith("/img"))) {
if (contextPath == null || contextPath.equals("") || contextPath.equals("/")) {
response.sendRedirect("/login.html");
if (contextPath == null || contextPath.equals("") || contextPath.equals("/")) {
response.sendRedirect("/druid/login.html");
} else {
response.sendRedirect("login.html");
response.sendRedirect("druid/login.html");
}
return;
}
@@ -1,73 +1,82 @@
<!doctype html>
<html>
<head>
<title>Druid Stat JSON API</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
<link href='css/bootstrap.min.css' rel="stylesheet" />
<link href="css/style.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script src="js/common.js" type="text/javascript" charset="utf8"></script>
<script>
function init() {
druid.common.buildHead(7);
}
</script>
</head>
<body onload="init();">
<div class="container">
<h3>
JSON API
</h3>
<table class="table table-bordered responsive-utilities" style="background-color: #fff">
<thead>
<tr>
<th width="250px" class="td_lable">Name</th>
<th>Description</th>
</tr>
</thead>
<tr>
<td class="td_lable"><a href="basic.json" target="_blank">basic.json</a></td>
<td>basic info.</td>
</tr>
<tr>
<td class="td_lable"><a href="datasource.json" target="_blank">datasource.json</a></td>
<td>DatsSourceStat List</td>
</tr>
<tr>
<td class="td_lable">datasource-{id}.json</td>
<td>DatasourceStat for id={id},id is DatsSourceStat.ID<br />
Example: druid/datasource-1.json</td>
</tr>
<tr>
<td class="td_lable">activeConnectionStackTrace-{datasourceId}.json</td>
<td>StrackTrace for activeConnection in datasource which datasource.id={datasourceId},id is DatsSourceStat.ID<br />
Required: set removeAbandoned=true<br />
Example: druid/activeConnectionStackTrace-1.json</td>
</tr>
<tr>
<td class="td_lable"><a href="sql.json" target="_blank">sql.json</a></td>
<td>SqlStat for id={id} ,id is SqlStat.ID<br />
Example: druid/sql-1.json</td>
</tr>
<tr>
<td class="td_lable"><a href="basic.json" target="_blank">basic.json</a></td>
<td></td>
</tr>
<tr>
<td class="td_lable"><a href="weburi.json" target="_blank">weburi.json</a></td>
<td>
</td>
</tr>
<tr>
<td class="td_lable"><a href="websession.json" target="_blank">websession.json</a></td>
<td>
</td>
</tr>
<tr>
<td class="td_lable"> <a href="reset-all.json" target="_blank">reset-all.json</a> </td>
<td> Reset all stat </td>
</tr>
</table>
</div>
</body>
</html>
<!doctype html>
<html>
<head>
<title>Druid Stat JSON API</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
<link href='css/bootstrap.min.css' rel="stylesheet" />
<link href="css/style.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script src="js/common.js" type="text/javascript" charset="utf8"></script>
<script>
function init() {
druid.common.buildHead(7);
}
</script>
</head>
<body onload="init();">
<div class="container">
<h3>
JSON API
</h3>
<table class="table table-bordered responsive-utilities" style="background-color: #fff">
<thead>
<tr>
<th width="250px" class="td_lable">Name</th>
<th>Description</th>
</tr>
</thead>
<tr>
<td class="td_lable"><a href="basic.json" target="_blank">basic.json</a></td>
<td>basic info.</td>
</tr>
<tr>
<td class="td_lable"><a href="datasource.json" target="_blank">datasource.json</a></td>
<td>DatsSourceStat List</td>
</tr>
<tr>
<td class="td_lable">datasource-{id}.json</td>
<td>DatasourceStat for id={id},id is DatsSourceStat.ID<br />
Example: druid/datasource-1.json</td>
</tr>
<tr>
<td class="td_lable">activeConnectionStackTrace-{datasourceId}.json</td>
<td>StrackTrace for activeConnection in datasource which datasource.id={datasourceId},id is DatsSourceStat.ID<br />
Required: set removeAbandoned=true<br />
Example: druid/activeConnectionStackTrace-1.json</td>
</tr>
<tr>
<td class="td_lable"><a href="sql.json" target="_blank">sql.json</a></td>
<td>SqlStat for id={id} ,id is SqlStat.ID<br />
Example: druid/sql-1.json</td>
</tr>
<tr>
<td class="td_lable"><a href="wall.json" target="_blank">WallStat.json</a></td>
<td>WallStat List</td>
</tr>
<tr>
<td class="td_lable">wall-{id}.json</td>
<td>WallStat for id={id},id is DatsSourceStat.ID<br />
Example: druid/wall-1.json</td>
</tr>
<tr>
<td class="td_lable"><a href="basic.json" target="_blank">basic.json</a></td>
<td></td>
</tr>
<tr>
<td class="td_lable"><a href="weburi.json" target="_blank">weburi.json</a></td>
<td>
</td>
</tr>
<tr>
<td class="td_lable"><a href="websession.json" target="_blank">websession.json</a></td>
<td>
</td>
</tr>
<tr>
<td class="td_lable"> <a href="reset-all.json" target="_blank">reset-all.json</a> </td>
<td> Reset all stat </td>
</tr>
</table>
</div>
</body>
</html>
@@ -12,11 +12,11 @@ public class PagerUtilsTest_Limit_oracle_0 extends TestCase {
public void test_oracle_oderby_0() throws Exception {
String sql = "select * from t order by id";
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 0, 10);
Assert.assertEquals("SELECT _X.*, ROWNUM AS _RN" + //
Assert.assertEquals("SELECT XX.*, ROWNUM AS RN" + //
"\nFROM (SELECT *" + //
"\n\tFROM t" + //
"\n\tORDER BY id" + //
"\n\t) _X" + //
"\n\t) XX" + //
"\nWHERE ROWNUM <= 10", result);
}
@@ -32,39 +32,39 @@ public class PagerUtilsTest_Limit_oracle_0 extends TestCase {
String sql = "select * from t";
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 10, 10);
Assert.assertEquals("SELECT *" + //
"\nFROM (SELECT _X.*, ROWNUM AS _RN" + //
"\nFROM (SELECT XX.*, ROWNUM AS RN" + //
"\n\tFROM (SELECT *" + //
"\n\t\tFROM t" + //
"\n\t\t) _X" + //
"\n\t\t) XX" + //
"\n\tWHERE ROWNUM <= 20" + //
"\n\t) _XX" + //
"\nWHERE _RN > 10", result);
"\n\t) XXX" + //
"\nWHERE RN > 10", result);
}
public void test_oracle_2() throws Exception {
String sql = "select * from t";
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 20, 10);
Assert.assertEquals("SELECT *" + //
"\nFROM (SELECT _X.*, ROWNUM AS _RN" + //
"\nFROM (SELECT XX.*, ROWNUM AS RN" + //
"\n\tFROM (SELECT *" + //
"\n\t\tFROM t" + //
"\n\t\t) _X" + //
"\n\t\t) XX" + //
"\n\tWHERE ROWNUM <= 30" + //
"\n\t) _XX" + //
"\nWHERE _RN > 20", result);
"\n\t) XXX" + //
"\nWHERE RN > 20", result);
}
public void test_oracle_3() throws Exception {
String sql = "select id, name, salary from t order by id, name";
String result = PagerUtils.limit(sql, JdbcConstants.ORACLE, 20, 10);
Assert.assertEquals("SELECT *" + //
"\nFROM (SELECT _X.*, ROWNUM AS _RN" + //
"\nFROM (SELECT XX.*, ROWNUM AS RN" + //
"\n\tFROM (SELECT id, name, salary" + //
"\n\t\tFROM t" + //
"\n\t\tORDER BY id, name" + //
"\n\t\t) _X" + //
"\n\t\t) XX" + //
"\n\tWHERE ROWNUM <= 30" + //
"\n\t) _XX" + //
"\nWHERE _RN > 20", result);
"\n\t) XXX" + //
"\nWHERE RN > 20", result);
}
}