support monitor

This commit is contained in:
wenshao
2013-08-15 00:43:32 +08:00
parent bf60f9a234
commit f8b1914c4a
15 changed files with 111 additions and 11 deletions
@@ -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")
@@ -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(){