mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
support monitor
This commit is contained in:
@@ -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<String, Object> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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")
|
||||
|
||||
+1
-1
@@ -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;
|
||||
@@ -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<Object> dataSources = DruidDataSourceStatManager.getInstances().keySet();
|
||||
|
||||
List<DruidDataSourceStatValue> statValueList = new ArrayList<DruidDataSourceStatValue>(dataSources.size());
|
||||
List<WallProviderStatValue> wallStatValueList = new ArrayList<WallProviderStatValue>();
|
||||
|
||||
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<JdbcSqlStatValue> loadSqlList(Map<String, Object> filters) {
|
||||
return dao.loadSqlList(filters);
|
||||
}
|
||||
|
||||
@@ -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<DruidDataSourceStatValue> statList);
|
||||
|
||||
void saveSqlWall(MonitorContext ctx, List<WallProviderStatValue> statList);
|
||||
|
||||
void saveSpringMethod(MonitorContext ctx, List<SpringMethodStatValue> methodList);
|
||||
|
||||
void saveWebURI(MonitorContext ctx, List<WebURIStatValue> uriList);
|
||||
|
||||
void saveWebApp(MonitorContext ctx, List<WebAppStatValue> uriList);
|
||||
|
||||
|
||||
List<JdbcSqlStatValue> loadSqlList(Map<String, Object> filters);
|
||||
}
|
||||
|
||||
@@ -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<WallProviderStatValue> statList) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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(){
|
||||
|
||||
@@ -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<WallTableStatValue> tables = new ArrayList<WallTableStatValue>();
|
||||
|
||||
@@ -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(){
|
||||
|
||||
@@ -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(){
|
||||
|
||||
Reference in New Issue
Block a user