diff --git a/src/main/java/com/alibaba/druid/sql/PagerUtils.java b/src/main/java/com/alibaba/druid/sql/PagerUtils.java index 764543b3d4..a1dfa98f6d 100644 --- a/src/main/java/com/alibaba/druid/sql/PagerUtils.java +++ b/src/main/java/com/alibaba/druid/sql/PagerUtils.java @@ -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))); diff --git a/src/main/java/com/alibaba/druid/stat/DruidStatService.java b/src/main/java/com/alibaba/druid/stat/DruidStatService.java index 2ba4e17196..28d40a91e1 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidStatService.java +++ b/src/main/java/com/alibaba/druid/stat/DruidStatService.java @@ -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"); diff --git a/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java b/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java index 2870421b72..cd503d48da 100644 --- a/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java +++ b/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java @@ -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; } diff --git a/src/main/resources/support/http/resources/api.html b/src/main/resources/support/http/resources/api.html index bd3c8b524d..727d9dbfa1 100644 --- a/src/main/resources/support/http/resources/api.html +++ b/src/main/resources/support/http/resources/api.html @@ -1,73 +1,82 @@ - - - - Druid Stat JSON API - - - - - - - - -
-

- JSON API -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
basic.jsonbasic info.
datasource.jsonDatsSourceStat List
datasource-{id}.jsonDatasourceStat for id={id},id is DatsSourceStat.ID
- Example: druid/datasource-1.json
activeConnectionStackTrace-{datasourceId}.jsonStrackTrace for activeConnection in datasource which datasource.id={datasourceId},id is DatsSourceStat.ID
- Required: set removeAbandoned=true
- Example: druid/activeConnectionStackTrace-1.json
sql.jsonSqlStat for id={id} ,id is SqlStat.ID
- Example: druid/sql-1.json
basic.json
weburi.json -
websession.json -
reset-all.json Reset all stat
-
- - + + + + Druid Stat JSON API + + + + + + + + +
+

+ JSON API +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
basic.jsonbasic info.
datasource.jsonDatsSourceStat List
datasource-{id}.jsonDatasourceStat for id={id},id is DatsSourceStat.ID
+ Example: druid/datasource-1.json
activeConnectionStackTrace-{datasourceId}.jsonStrackTrace for activeConnection in datasource which datasource.id={datasourceId},id is DatsSourceStat.ID
+ Required: set removeAbandoned=true
+ Example: druid/activeConnectionStackTrace-1.json
sql.jsonSqlStat for id={id} ,id is SqlStat.ID
+ Example: druid/sql-1.json
WallStat.jsonWallStat List
wall-{id}.jsonWallStat for id={id},id is DatsSourceStat.ID
+ Example: druid/wall-1.json
basic.json
weburi.json +
websession.json +
reset-all.json Reset all stat
+
+ + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/PagerUtilsTest_Limit_oracle_0.java b/src/test/java/com/alibaba/druid/bvt/sql/PagerUtilsTest_Limit_oracle_0.java index 6481dca199..5f6798739a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/PagerUtilsTest_Limit_oracle_0.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/PagerUtilsTest_Limit_oracle_0.java @@ -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); } }