From 4c625d06ad85090cf0d5c2439a8f703f0ef32cf8 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 14 Aug 2013 17:46:55 +0800 Subject: [PATCH] support monitor --- .../druid/support/monitor/MonitorContext.java | 47 +++++++- .../monitor/dao/MonitorDaoJdbcImpl.java | 112 ++++++++++-------- 2 files changed, 107 insertions(+), 52 deletions(-) diff --git a/src/main/java/com/alibaba/druid/support/monitor/MonitorContext.java b/src/main/java/com/alibaba/druid/support/monitor/MonitorContext.java index 1f8654d8ca..d7e6f5d03c 100644 --- a/src/main/java/com/alibaba/druid/support/monitor/MonitorContext.java +++ b/src/main/java/com/alibaba/druid/support/monitor/MonitorContext.java @@ -23,8 +23,13 @@ public class MonitorContext { private final Map atrributes = new HashMap(); - private Date collectTime; + private String domainName; + private String appName; + private String clusterName; + private String host; private int pid; + + private Date collectTime; private Date startTime; public Date getCollectTime() { @@ -55,4 +60,44 @@ public class MonitorContext { this.pid = pid; } + 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; + } + + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + public String getAppName() { + return appName; + } + + public void setAppName(String appName) { + this.appName = appName; + } + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + } 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 f9f91b61f7..c6fd1acabe 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 @@ -43,11 +43,16 @@ import com.alibaba.druid.util.Utils; public class MonitorDaoJdbcImpl implements MonitorDao { - private final static Log LOG = LogFactory.getLog(MonitorDaoJdbcImpl.class); + private final static Log LOG = LogFactory.getLog(MonitorDaoJdbcImpl.class); private DataSource dataSource; - private BeanInfo sqlStatBeanInfo = new BeanInfo(JdbcSqlStatValue.class); + private BeanInfo sqlStatBeanInfo = new BeanInfo(JdbcSqlStatValue.class); + private BeanInfo springMethodStatBeanInfo = new BeanInfo(SpringMethodStatValue.class); + private BeanInfo webURIStatBeanInfo = new BeanInfo(WebURIStatValue.class); + private BeanInfo webAppStatBeanInfo = new BeanInfo(WebAppStatValue.class); + + // public MonitorDaoJdbcImpl(){ } @@ -64,34 +69,60 @@ public class MonitorDaoJdbcImpl implements MonitorDao { public void saveSql(MonitorContext ctx, List dataSourceList) { for (DruidDataSourceStatValue dataSourceStatValue : dataSourceList) { List sqlList = dataSourceStatValue.getSqlList(); - - String sql = buildInsertSql(sqlStatBeanInfo); - Connection conn = null; - PreparedStatement stmt = null; - try { - conn = dataSource.getConnection(); - stmt = conn.prepareStatement(sql); - - for (JdbcSqlStatValue statValue : sqlList) { - setParameterForSqlStat(sqlStatBeanInfo, stmt, statValue); - stmt.addBatch(); - } - - stmt.executeBatch(); - - stmt.close(); - } catch (SQLException ex) { - LOG.error("save sql error", ex); - } finally { - JdbcUtils.close(stmt); - JdbcUtils.close(conn); - } + save(sqlStatBeanInfo, ctx, sqlList); } } - protected void setParameterForSqlStat(BeanInfo beanInfo, PreparedStatement stmt, JdbcSqlStatValue sqlStat) - throws SQLException { + @Override + public void saveSpringMethod(MonitorContext ctx, List list) { + save(springMethodStatBeanInfo, ctx, list); + } + + @Override + public void saveWebURI(MonitorContext ctx, List list) { + save(webURIStatBeanInfo, ctx, list); + } + + @Override + public void saveWebApp(MonitorContext ctx, List list) { + save(webAppStatBeanInfo, ctx, list); + } + + private void save(BeanInfo beanInfo, MonitorContext ctx, List list) { + String sql = buildInsertSql(beanInfo); + Connection conn = null; + PreparedStatement stmt = null; + try { + conn = dataSource.getConnection(); + stmt = conn.prepareStatement(sql); + + for (Object statValue : list) { + setParameterForSqlStat(beanInfo, ctx, stmt, statValue); + stmt.addBatch(); + } + + stmt.executeBatch(); + + stmt.close(); + } catch (SQLException ex) { + LOG.error("save sql error", ex); + } finally { + JdbcUtils.close(stmt); + JdbcUtils.close(conn); + } + } + + protected void setParameterForSqlStat(BeanInfo beanInfo, MonitorContext ctx, PreparedStatement stmt, 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.getHost()); + setParam(stmt, paramIndex++, ctx.getPID()); + setParam(stmt, paramIndex++, ctx.getCollectTime()); + try { List fields = beanInfo.getFields(); for (int i = 0; i < fields.size(); ++i) { @@ -132,22 +163,16 @@ public class MonitorDaoJdbcImpl implements MonitorDao { buf.append("INSERT INTO ") // .append(getTableName(beanInfo)); - buf.append(" ("); + buf.append(" (domain, app, cluster, host, pid, collectTime"); List fields = beanInfo.getFields(); for (int i = 0; i < fields.size(); ++i) { FieldInfo field = fields.get(i); - if (i != 0) { - buf.append(", "); - } + buf.append(", "); buf.append(field.getColumnName()); } - buf.append(")\nVALUES ("); + buf.append(")\nVALUES (?, ?, ?, ?, ?, ?"); for (int i = 0; i < fields.size(); ++i) { - if (i != 0) { - buf.append(", ?"); - } else { - buf.append("?"); - } + buf.append(", ?"); } buf.append(")"); sql = buf.toString(); @@ -163,21 +188,6 @@ public class MonitorDaoJdbcImpl implements MonitorDao { return Utils.murmurhash2_64(sql); } - @Override - public void saveSpringMethod(MonitorContext ctx, List methodList) { - - } - - @Override - public void saveWebURI(MonitorContext ctx, List uriList) { - - } - - @Override - public void saveWebApp(MonitorContext ctx, List uriList) { - - } - static void setParam(PreparedStatement stmt, int paramIndex, String value) throws SQLException { if (value == null) { stmt.setNull(paramIndex, Types.VARCHAR);