Skip to content

Commit

Permalink
improve monitor support
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Aug 17, 2013
1 parent 8ab0219 commit f9a06e7
Show file tree
Hide file tree
Showing 7 changed files with 309 additions and 89 deletions.
87 changes: 84 additions & 3 deletions src/main/java/com/alibaba/druid/support/monitor/MonitorClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import static com.alibaba.druid.util.Utils.getBoolean;
import static com.alibaba.druid.util.Utils.getInteger;

import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
Expand All @@ -40,6 +41,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.StringUtils;
import com.alibaba.druid.util.Utils;
import com.alibaba.druid.wall.WallProviderStatValue;

Expand All @@ -63,7 +65,20 @@ public class MonitorClient {

private MonitorDao dao;

private String domain;
private String app;
private String cluster;
private String host;
private int pid;

public MonitorClient(){
String name = ManagementFactory.getRuntimeMXBean().getName();

String[] items = name.split("@");

pid = Integer.parseInt(items[0]);
host = items[1];

configFromPropety(System.getProperties());
}

Expand Down Expand Up @@ -128,10 +143,30 @@ public void configFromPropety(Properties properties) {
this.setCollectWebURIEnable(value);
}
}
{
domain = properties.getProperty("druid.monitor.domain");
if (StringUtils.isEmpty(domain)) {
domain = "default";
}
}

{
app = properties.getProperty("druid.monitor.app");
if (StringUtils.isEmpty(app)) {
app = "default";
}
}

{
cluster = properties.getProperty("druid.monitor.cluster");
if (StringUtils.isEmpty(cluster)) {
cluster = "default";
}
}
}

public void stop() {

}

public void start() {
Expand Down Expand Up @@ -216,8 +251,14 @@ public void collectSql() {

private MonitorContext createContext() {
MonitorContext ctx = new MonitorContext();

ctx.setDomain(domain);
ctx.setApp(app);
ctx.setCluster(cluster);

ctx.setCollectTime(new Date());
ctx.setPID(Utils.getPID());
ctx.setPID(pid);
ctx.setHost(host);
ctx.setCollectTime(Utils.getStartTime());
return ctx;
}
Expand Down Expand Up @@ -376,4 +417,44 @@ public void setSchedulerThreadSize(int schedulerThreadSize) {
this.schedulerThreadSize = schedulerThreadSize;
}

public String getDomain() {
return domain;
}

public void setDomain(String domain) {
this.domain = domain;
}

public String getApp() {
return app;
}

public void setApp(String app) {
this.app = app;
}

public String getCluster() {
return cluster;
}

public void setCluster(String cluster) {
this.cluster = cluster;
}

public String getHost() {
return host;
}

public void setHost(String host) {
this.host = host;
}

public int getPid() {
return pid;
}

public void setPid(int pid) {
this.pid = pid;
}

}
36 changes: 21 additions & 15 deletions src/main/java/com/alibaba/druid/support/monitor/MonitorContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,23 @@

public class MonitorContext {

public static String DEFAULT_DOMAIN;

private final Map<String, Object> atrributes = new HashMap<String, Object>();

private String domainName = "default";
private String appName = "default";
private String clusterName = "default";
private String domain = "default";
private String app = "default";
private String cluster = "default";
private String host;
private int pid;

private Date collectTime;
private Date startTime;

public MonitorContext(){

}

public Date getCollectTime() {
return collectTime;
}
Expand Down Expand Up @@ -76,28 +82,28 @@ public void setPid(int pid) {
this.pid = pid;
}

public String getDomainName() {
return domainName;
public String getDomain() {
return domain;
}

public void setDomainName(String domainName) {
this.domainName = domainName;
public void setDomain(String domain) {
this.domain = domain;
}

public String getAppName() {
return appName;
public String getApp() {
return app;
}

public void setAppName(String appName) {
this.appName = appName;
public void setApp(String app) {
this.app = app;
}

public String getClusterName() {
return clusterName;
public String getCluster() {
return cluster;
}

public void setClusterName(String clusterName) {
this.clusterName = clusterName;
public void setCluster(String cluster) {
this.cluster = cluster;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,15 @@
import com.alibaba.druid.support.monitor.annotation.AggregateType;
import com.alibaba.druid.support.monitor.annotation.MField;
import com.alibaba.druid.support.monitor.annotation.MTable;
import com.alibaba.druid.support.monitor.entity.MonitorApp;
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.WallFunctionStatValue;
import com.alibaba.druid.wall.WallProviderStatValue;
import com.alibaba.druid.wall.WallSqlStatValue;
import com.alibaba.druid.wall.WallTableStatValue;

public class MonitorDaoJdbcImpl implements MonitorDao {

Expand All @@ -62,6 +66,11 @@ public class MonitorDaoJdbcImpl implements MonitorDao {
private BeanInfo webURIStatBeanInfo = new BeanInfo(WebURIStatValue.class);
private BeanInfo webAppStatBeanInfo = new BeanInfo(WebAppStatValue.class);

private BeanInfo wallProviderStatBeanInfo = new BeanInfo(WallProviderStatValue.class);
private BeanInfo wallSqlStatBeanInfo = new BeanInfo(WallSqlStatValue.class);
private BeanInfo wallTableStatBeanInfo = new BeanInfo(WallTableStatValue.class);
private BeanInfo wallFunctionStatBeanInfo = new BeanInfo(WallFunctionStatValue.class);

public MonitorDaoJdbcImpl(){
}

Expand All @@ -72,7 +81,9 @@ public void createTables(String dbType) {
"springmethod.sql", //
"sql.sql", //
"webapp.sql", //
"weburi.sql" };
"weburi.sql",
"wall.sql"
};

for (String item : resources) {
String path = "/support/monitor/" + dbType + "/" + item;
Expand All @@ -99,7 +110,7 @@ public void setDataSource(DataSource dataSource) {
@Override
public void saveSql(MonitorContext ctx, List<DruidDataSourceStatValue> dataSourceList) {
save(dataSourceStatBeanInfo, ctx, dataSourceList);

for (DruidDataSourceStatValue dataSourceStatValue : dataSourceList) {
List<JdbcSqlStatValue> sqlList = dataSourceStatValue.getSqlList();
save(sqlStatBeanInfo, ctx, sqlList);
Expand All @@ -115,6 +126,19 @@ public void saveSpringMethod(MonitorContext ctx, List<SpringMethodStatValue> lis
public void saveWebURI(MonitorContext ctx, List<WebURIStatValue> list) {
save(webURIStatBeanInfo, ctx, list);
}

@Override
public void saveSqlWall(MonitorContext ctx, List<WallProviderStatValue> statList) {
save(wallProviderStatBeanInfo, ctx, statList);

for (WallProviderStatValue providerStat : statList) {
save(wallSqlStatBeanInfo, ctx, providerStat.getWhiteList());
save(wallSqlStatBeanInfo, ctx, providerStat.getBlackList());

save(wallTableStatBeanInfo, ctx, providerStat.getTables());
save(wallFunctionStatBeanInfo, ctx, providerStat.getFunctions());
}
}

@Override
public void saveWebApp(MonitorContext ctx, List<WebAppStatValue> list) {
Expand Down Expand Up @@ -437,8 +461,8 @@ private void saveHash(FieldInfo hashField, MonitorContext ctx, List<?> list) {
conn = dataSource.getConnection();
stmt = conn.prepareStatement(sql);

stmt.setString(1, ctx.getDomainName());
stmt.setString(2, ctx.getAppName());
stmt.setString(1, ctx.getDomain());
stmt.setString(2, ctx.getApp());
stmt.setString(3, hashType);
stmt.setLong(4, hash);
stmt.setString(5, value);
Expand All @@ -463,6 +487,10 @@ private void saveHash(FieldInfo hashField, MonitorContext ctx, List<?> list) {
}

private void save(BeanInfo beanInfo, MonitorContext ctx, List<?> list) {
if (list.size() == 0) {
return;
}

for (FieldInfo hashField : beanInfo.getHashFields()) {
saveHash(hashField, ctx, list);
}
Expand Down Expand Up @@ -496,9 +524,9 @@ protected void setParameterForSqlStat(BeanInfo beanInfo, //
Object sqlStat) throws SQLException {
int paramIndex = 1;

setParam(stmt, paramIndex++, ctx.getDomainName());
setParam(stmt, paramIndex++, ctx.getAppName());
setParam(stmt, paramIndex++, ctx.getClusterName());
setParam(stmt, paramIndex++, ctx.getDomain());
setParam(stmt, paramIndex++, ctx.getApp());
setParam(stmt, paramIndex++, ctx.getCluster());
setParam(stmt, paramIndex++, ctx.getHost());
setParam(stmt, paramIndex++, ctx.getPID());
setParam(stmt, paramIndex++, ctx.getCollectTime());
Expand All @@ -518,8 +546,10 @@ protected void setParameterForSqlStat(BeanInfo beanInfo, //
setParam(stmt, paramIndex, (String) value);
} else if (fieldType.equals(Date.class)) {
setParam(stmt, paramIndex, (Date) value);
} else if (fieldType.equals(boolean.class) || fieldType.equals(Boolean.class)) {
setParam(stmt, paramIndex, (Boolean) value);
} else {
throw new UnsupportedOperationException();
throw new UnsupportedOperationException("not support type : " + fieldType);
}

paramIndex++;
Expand Down Expand Up @@ -585,6 +615,14 @@ static void setParam(PreparedStatement stmt, int paramIndex, String value) throw
stmt.setString(paramIndex, value);
}
}

static void setParam(PreparedStatement stmt, int paramIndex, Boolean value) throws SQLException {
if (value == null) {
stmt.setNull(paramIndex, Types.BOOLEAN);
} else {
stmt.setBoolean(paramIndex, value);
}
}

static void setParam(PreparedStatement stmt, int paramIndex, Long value) throws SQLException {
if (value == null || value == 0) {
Expand Down Expand Up @@ -755,8 +793,67 @@ public String getCacheValue(long hash) {
}
}

@Override
public void saveSqlWall(MonitorContext ctx, List<WallProviderStatValue> statList) {
public void insertAppIfNotExits(String domain, String app) throws SQLException {
MonitorApp monitorApp = findApp(domain, app);
if (monitorApp != null) {
return;
}

String sql = "insert druid_app (domain, app) values (?, ?)";
JdbcUtils.execute(dataSource, sql, domain, app);
}

public List<MonitorApp> listApp(String domain) throws SQLException {
List<MonitorApp> list = new ArrayList<MonitorApp>();

String sql = "select id, domain, app from druid_app where domain = ? and app = ?";
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = dataSource.getConnection();
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
if (rs.next()) {
list.add(readApp(rs));
}

return list;
} finally {
JdbcUtils.close(rs);
JdbcUtils.close(stmt);
JdbcUtils.close(conn);
}
}

public MonitorApp findApp(String domain, String app) throws SQLException {
String sql = "select id, domain, app from druid_app where domain = ? and app = ?";
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = dataSource.getConnection();
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
if (rs.next()) {
return readApp(rs);
}

return null;
} finally {
JdbcUtils.close(rs);
JdbcUtils.close(stmt);
JdbcUtils.close(conn);
}
}

private MonitorApp readApp(ResultSet rs) throws SQLException {
MonitorApp app = new MonitorApp();

app.setId(rs.getLong(1));
app.setDomain(rs.getString(2));
app.setApp(rs.getString(3));

return app;
}
}
Loading

0 comments on commit f9a06e7

Please sign in to comment.