diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index c34ee53cf2..c73c5e2fbd 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -82,12 +82,13 @@ import com.alibaba.druid.stat.JdbcSqlStat; import com.alibaba.druid.stat.JdbcSqlStatValue; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; -import com.alibaba.druid.util.Utils; import com.alibaba.druid.util.JMXUtils; import com.alibaba.druid.util.JdbcConstants; import com.alibaba.druid.util.JdbcUtils; import com.alibaba.druid.util.StringUtils; +import com.alibaba.druid.util.Utils; import com.alibaba.druid.wall.WallFilter; +import com.alibaba.druid.wall.WallProviderStatValue; ; /** @@ -923,7 +924,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (timeBetweenEvictionRunsMillis <= 0) { timeBetweenEvictionRunsMillis = DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS; } - + if (idleMillis >= timeBetweenEvictionRunsMillis) { boolean validate = testConnectionInternal(poolalbeConnection.getConnection()); if (!validate) { @@ -2338,10 +2339,20 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } public Map getWallStatMap() { + WallProviderStatValue wallStatValue = getWallStatValue(false); + + if (wallStatValue != null) { + return wallStatValue.toMap(); + } + + return null; + } + + public WallProviderStatValue getWallStatValue(boolean reset) { for (Filter filter : this.filters) { if (filter instanceof WallFilter) { WallFilter wallFilter = (WallFilter) filter; - return wallFilter.getProvider().getStatsMap(); + return wallFilter.getProvider().getStatValue(reset); } } diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatValue.java b/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatValue.java index e444363a9e..3f7ee04bee 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatValue.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSourceStatValue.java @@ -20,7 +20,7 @@ import java.util.List; import com.alibaba.druid.stat.JdbcSqlStatValue; import com.alibaba.druid.support.monitor.MField; -import com.alibaba.druid.support.monitor.dao.MTable; +import com.alibaba.druid.support.monitor.MTable; @MTable(name="druid_datasource") public class DruidDataSourceStatValue { diff --git a/src/main/java/com/alibaba/druid/stat/JdbcSqlStatValue.java b/src/main/java/com/alibaba/druid/stat/JdbcSqlStatValue.java index a37a33cd78..36f462dd2d 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcSqlStatValue.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcSqlStatValue.java @@ -22,7 +22,7 @@ import java.util.Map; import javax.management.JMException; import com.alibaba.druid.support.monitor.MField; -import com.alibaba.druid.support.monitor.dao.MTable; +import com.alibaba.druid.support.monitor.MTable; import com.alibaba.druid.util.JMXUtils; import com.alibaba.druid.util.Utils; diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatValue.java b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatValue.java index b52e93a399..5087e790b3 100644 --- a/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatValue.java +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebAppStatValue.java @@ -19,7 +19,7 @@ import java.util.LinkedHashMap; import java.util.Map; import com.alibaba.druid.support.monitor.MField; -import com.alibaba.druid.support.monitor.dao.MTable; +import com.alibaba.druid.support.monitor.MTable; @MTable(name = "druid_webapp") public class WebAppStatValue { diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebURIStatValue.java b/src/main/java/com/alibaba/druid/support/http/stat/WebURIStatValue.java index 1b683f2755..2ab6e0d963 100644 --- a/src/main/java/com/alibaba/druid/support/http/stat/WebURIStatValue.java +++ b/src/main/java/com/alibaba/druid/support/http/stat/WebURIStatValue.java @@ -22,7 +22,7 @@ import java.util.List; import java.util.Map; import com.alibaba.druid.support.monitor.MField; -import com.alibaba.druid.support.monitor.dao.MTable; +import com.alibaba.druid.support.monitor.MTable; import com.alibaba.druid.support.profile.ProfileEntryStatValue; @MTable(name = "druid_weburi") diff --git a/src/main/java/com/alibaba/druid/support/monitor/dao/MTable.java b/src/main/java/com/alibaba/druid/support/monitor/MTable.java similarity index 95% rename from src/main/java/com/alibaba/druid/support/monitor/dao/MTable.java rename to src/main/java/com/alibaba/druid/support/monitor/MTable.java index 0829a05f34..398389c8aa 100644 --- a/src/main/java/com/alibaba/druid/support/monitor/dao/MTable.java +++ b/src/main/java/com/alibaba/druid/support/monitor/MTable.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.support.monitor.dao; +package com.alibaba.druid.support.monitor; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/alibaba/druid/support/monitor/MonitorClient.java b/src/main/java/com/alibaba/druid/support/monitor/MonitorClient.java index 4fab9c55a0..47d1b4d5d8 100644 --- a/src/main/java/com/alibaba/druid/support/monitor/MonitorClient.java +++ b/src/main/java/com/alibaba/druid/support/monitor/MonitorClient.java @@ -37,6 +37,7 @@ import com.alibaba.druid.support.spring.stat.SpringMethodStatValue; import com.alibaba.druid.support.spring.stat.SpringStat; import com.alibaba.druid.support.spring.stat.SpringStatManager; import com.alibaba.druid.util.Utils; +import com.alibaba.druid.wall.WallProviderStatValue; public class MonitorClient { @@ -95,6 +96,7 @@ public class MonitorClient { Set dataSources = DruidDataSourceStatManager.getInstances().keySet(); List statValueList = new ArrayList(dataSources.size()); + List wallStatValueList = new ArrayList(); for (Object item : dataSources) { if (!(item instanceof DruidDataSource)) { @@ -104,6 +106,13 @@ public class MonitorClient { DruidDataSource dataSource = (DruidDataSource) item; DruidDataSourceStatValue statValue = dataSource.getStatValueAndReset(); statValueList.add(statValue); + + dataSource.getWallStatMap(); + + WallProviderStatValue wallStatValue = dataSource.getWallStatValue(true); + if (wallStatValue != null && wallStatValue.getCheckCount() > 0) { + wallStatValueList.add(wallStatValue); + } } MonitorContext ctx = createContext(); @@ -155,7 +164,7 @@ public class MonitorClient { dao.saveWebURI(ctx, webURIValueList); dao.saveWebApp(ctx, webAppStatValueList); } - + public List loadSqlList(Map filters) { return dao.loadSqlList(filters); } diff --git a/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDao.java b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDao.java index 0cc7558857..83ca7a3ae5 100644 --- a/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDao.java +++ b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDao.java @@ -24,16 +24,19 @@ import com.alibaba.druid.support.http.stat.WebAppStatValue; import com.alibaba.druid.support.http.stat.WebURIStatValue; import com.alibaba.druid.support.monitor.MonitorContext; import com.alibaba.druid.support.spring.stat.SpringMethodStatValue; +import com.alibaba.druid.wall.WallProviderStatValue; public interface MonitorDao { void saveSql(MonitorContext ctx, List statList); + void saveSqlWall(MonitorContext ctx, List statList); + void saveSpringMethod(MonitorContext ctx, List methodList); void saveWebURI(MonitorContext ctx, List uriList); void saveWebApp(MonitorContext ctx, List uriList); - + List loadSqlList(Map filters); } diff --git a/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java index f7350745fd..0dd0663689 100644 --- a/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java +++ b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java @@ -39,11 +39,13 @@ import com.alibaba.druid.support.http.stat.WebURIStatValue; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; import com.alibaba.druid.support.monitor.MField; +import com.alibaba.druid.support.monitor.MTable; import com.alibaba.druid.support.monitor.MonitorContext; import com.alibaba.druid.support.spring.stat.SpringMethodStatValue; import com.alibaba.druid.util.JdbcUtils; import com.alibaba.druid.util.StringUtils; import com.alibaba.druid.util.Utils; +import com.alibaba.druid.wall.WallProviderStatValue; public class MonitorDaoJdbcImpl implements MonitorDao { @@ -524,4 +526,9 @@ public class MonitorDaoJdbcImpl implements MonitorDao { return field.getType(); } } + + @Override + public void saveSqlWall(MonitorContext ctx, List statList) { + + } } diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStatValue.java b/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStatValue.java index 0abbfb681f..dc79bde1e1 100644 --- a/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStatValue.java +++ b/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStatValue.java @@ -20,7 +20,7 @@ import java.util.LinkedHashMap; import java.util.Map; import com.alibaba.druid.support.monitor.MField; -import com.alibaba.druid.support.monitor.dao.MTable; +import com.alibaba.druid.support.monitor.MTable; import com.alibaba.druid.util.Utils; @MTable(name = "druid_springmethod") diff --git a/src/main/java/com/alibaba/druid/wall/WallFilter.java b/src/main/java/com/alibaba/druid/wall/WallFilter.java index 51e67ba71e..68568984ba 100644 --- a/src/main/java/com/alibaba/druid/wall/WallFilter.java +++ b/src/main/java/com/alibaba/druid/wall/WallFilter.java @@ -129,6 +129,8 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean { } else { throw new IllegalStateException("dbType not support : " + dbType + ", url " + dataSource.getUrl()); } + + provider.setName(dataSource.getName()); this.inited = true; } diff --git a/src/main/java/com/alibaba/druid/wall/WallFunctionStatValue.java b/src/main/java/com/alibaba/druid/wall/WallFunctionStatValue.java index db412373e2..deab0ffde8 100644 --- a/src/main/java/com/alibaba/druid/wall/WallFunctionStatValue.java +++ b/src/main/java/com/alibaba/druid/wall/WallFunctionStatValue.java @@ -18,9 +18,16 @@ package com.alibaba.druid.wall; import java.util.LinkedHashMap; import java.util.Map; +import com.alibaba.druid.support.monitor.MField; +import com.alibaba.druid.support.monitor.MTable; + +@MTable(name = "druid_wall_function") public class WallFunctionStatValue { + @MField private String name; + + @MField private long invokeCount; public WallFunctionStatValue(){ diff --git a/src/main/java/com/alibaba/druid/wall/WallProviderStatValue.java b/src/main/java/com/alibaba/druid/wall/WallProviderStatValue.java index 5e35c7ee27..7e163aa4ad 100644 --- a/src/main/java/com/alibaba/druid/wall/WallProviderStatValue.java +++ b/src/main/java/com/alibaba/druid/wall/WallProviderStatValue.java @@ -20,16 +20,28 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import com.alibaba.druid.support.monitor.MField; +import com.alibaba.druid.support.monitor.MTable; + +@MTable(name = "druid_wall") public class WallProviderStatValue { + @MField private String name; + @MField private long checkCount; + @MField private long hardCheckCount; + @MField private long violationCount; + @MField private long whiteListHitCount; + @MField private long blackListHitCount; + @MField private long syntaxErrorCount; + @MField private long violationEffectRowCount; private final List tables = new ArrayList(); diff --git a/src/main/java/com/alibaba/druid/wall/WallSqlStatValue.java b/src/main/java/com/alibaba/druid/wall/WallSqlStatValue.java index 5734589ff1..0522400ba2 100644 --- a/src/main/java/com/alibaba/druid/wall/WallSqlStatValue.java +++ b/src/main/java/com/alibaba/druid/wall/WallSqlStatValue.java @@ -18,14 +18,31 @@ package com.alibaba.druid.wall; import java.util.LinkedHashMap; import java.util.Map; +import com.alibaba.druid.support.monitor.MField; +import com.alibaba.druid.support.monitor.MTable; + +@MTable(name = "druid_wall_sql") public class WallSqlStatValue { + @MField private String sql; + + @MField private String sqlSample; + + @MField private long executeCount; + + @MField private long fetchRowCount; + + @MField private long updateCount; + + @MField private boolean syntaxError; + + @MField private String violationMessage; public WallSqlStatValue(){ diff --git a/src/main/java/com/alibaba/druid/wall/WallTableStatValue.java b/src/main/java/com/alibaba/druid/wall/WallTableStatValue.java index 9237910cab..fa734b538a 100644 --- a/src/main/java/com/alibaba/druid/wall/WallTableStatValue.java +++ b/src/main/java/com/alibaba/druid/wall/WallTableStatValue.java @@ -18,23 +18,55 @@ package com.alibaba.druid.wall; import java.util.LinkedHashMap; import java.util.Map; +import com.alibaba.druid.support.monitor.MField; +import com.alibaba.druid.support.monitor.MTable; + +@MTable(name = "druid_wall_table") public class WallTableStatValue { + @MField private String name; + @MField private long selectCount; + + @MField private long selectIntoCount; + + @MField private long insertCount; + + @MField private long updateCount; + + @MField private long deleteCount; + + @MField private long truncateCount; + + @MField private long createCount; + + @MField private long alterCount; + + @MField private long dropCount; + + @MField private long replaceCount; + + @MField private long deleteDataCount; + + @MField private long updateDataCount; + + @MField private long insertDataCount; + + @MField private long fetchRowCount; public WallTableStatValue(){