diff --git a/src/main/java/com/alibaba/druid/stat/service/DruidStatService.java b/src/main/java/com/alibaba/druid/stat/service/DruidStatService.java deleted file mode 100644 index e57e69f63c..0000000000 --- a/src/main/java/com/alibaba/druid/stat/service/DruidStatService.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.alibaba.druid.stat.service; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; - -import com.alibaba.druid.pool.DruidDataSource; -import com.alibaba.druid.stat.DruidDataSourceStatManager; -import com.alibaba.druid.stat.JdbcSqlStat; -import com.alibaba.druid.stat.service.dto.DataSourceInfo; -import com.alibaba.druid.stat.service.dto.SqlInfo; -import com.alibaba.druid.stat.service.impl.DruidStatMemoryStore; - -public class DruidStatService { - - private ScheduledExecutorService scheduler; - - private ScheduledFuture collectPlan; - - private int collectPeriodSeconds = 60 * 5; - - private DruidStatStore store; - - public int getCollectPeriodSeconds() { - return collectPeriodSeconds; - } - - public void setCollectPeriodSeconds(int collectPeriodSeconds) { - this.collectPeriodSeconds = collectPeriodSeconds; - } - - public synchronized void start() { - if (store != null) { - store = new DruidStatMemoryStore(); - } - - scheduler = Executors.newSingleThreadScheduledExecutor(); - collectPlan = scheduler.scheduleAtFixedRate(new CollectTask(), collectPeriodSeconds, collectPeriodSeconds, - TimeUnit.SECONDS); - } - - public synchronized void stop() { - if (collectPlan == null) { - collectPlan.cancel(true); - } - if (scheduler != null) { - scheduler.shutdown(); - } - } - - public void collect() { - List dataSourceStatList = new ArrayList(); - for (DruidDataSource dataSource : DruidDataSourceStatManager.getDruidDataSourceInstances()) { - DataSourceInfo dataSourceStat = new DataSourceInfo(); - - dataSourceStat.setCollectTimeMillis(System.currentTimeMillis()); - - dataSourceStat.setId(dataSource.getID()); - dataSourceStat.setUrl(dataSource.getUrl()); - dataSourceStat.setDbType(dataSource.getDbType()); - - dataSourceStat.setActiveCount(dataSource.getActiveCount()); - dataSourceStat.setActivePeak(dataSource.getActivePeak()); - dataSourceStat.setCloseCount((int) dataSource.getCloseCount()); - dataSourceStat.setConnectCount((int) dataSource.getConnectCount()); - dataSourceStat.setConnectErrorCount((int) dataSource.getConnectErrorCount()); - dataSourceStat.setCreateCount((int) dataSource.getCreateCount()); - dataSourceStat.setCreateErrorCount((int) dataSource.getCreateErrorCount()); - dataSourceStat.setDestoryCount((int) dataSource.getDestroyCount()); - dataSourceStat.setExecuteCount((int) dataSource.getExecuteCount()); - dataSourceStat.setPoolingCount(dataSource.getPoolingCount()); - dataSourceStat.setConnectionHoldHistogram(dataSource.getDataSourceStat().getConnectionHistogramValues()); - dataSourceStat.setTransactionHistogram(dataSource.getTransactionHistogramValues()); - - Collection sqlStats = dataSource.getDataSourceStat().getSqlStatMap().values(); - - Map sqlStatInfoMap = new HashMap(sqlStats.size()); - for (JdbcSqlStat sqlStat : dataSource.getDataSourceStat().getSqlStatMap().values()) { - - if (sqlStat.getExecuteCount() == 0 && sqlStat.getRunningCount() == 0) { - continue; - } - - SqlInfo sqlStatInfo = DruidStatServiceUtils.createSqlInfo(sqlStat); - - SqlInfo oldsqlStatInfo = sqlStatInfoMap.get(sqlStatInfo.getSql()); - if (oldsqlStatInfo != null) { - oldsqlStatInfo.merge(sqlStatInfo); - } else { - sqlStatInfoMap.put(sqlStatInfo.getSql(), sqlStatInfo); - } - } - - dataSourceStat.setSqlList(new ArrayList(sqlStatInfoMap.values())); - - dataSourceStatList.add(dataSourceStat); - } - - store.saveDataSource(dataSourceStatList); - } - - private final class CollectTask implements Runnable { - - public void run() { - collect(); - } - } - -} diff --git a/src/main/java/com/alibaba/druid/stat/service/DruidStatServiceUtils.java b/src/main/java/com/alibaba/druid/stat/service/DruidStatServiceUtils.java deleted file mode 100644 index 3ce0a6948d..0000000000 --- a/src/main/java/com/alibaba/druid/stat/service/DruidStatServiceUtils.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.alibaba.druid.stat.service; - -import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils; -import com.alibaba.druid.stat.JdbcSqlStat; -import com.alibaba.druid.stat.service.dto.SqlInfo; -import com.alibaba.druid.support.logging.Log; -import com.alibaba.druid.support.logging.LogFactory; - -public class DruidStatServiceUtils { - - private final static Log LOG = LogFactory.getLog(DruidStatServiceUtils.class); - - public static SqlInfo createSqlInfo(JdbcSqlStat sqlStat) { - SqlInfo info = new SqlInfo(); - - String sql = sqlStat.getSql(); - try { - sql = ParameterizedOutputVisitorUtils.parameterize(sql, sqlStat.getDbType()); - } catch (Exception e) { - LOG.error("merge sql error", e); - } - - info.setSql(sql); - info.setExecuteCount((int) sqlStat.getExecuteCount()); - info.setRunningCount((int) sqlStat.getRunningCount()); - info.setConcurrentMax((int) sqlStat.getConcurrentMax()); - info.setErrorCount((int) sqlStat.getErrorCount()); - info.setInTransactionCount((int) sqlStat.getInTransactionCount()); - info.setFetchRowCount(sqlStat.getFetchRowCount()); - info.setUpdateCount(sqlStat.getUpdateCount()); - info.setResultSetHoldTimeMilis(sqlStat.getResultSetHoldTimeMilis()); - - info.setHisogram(sqlStat.getHistogram().toArray()); - info.setExecuteAndResultHoldTimeHistogram(sqlStat.getExecuteAndResultHoldTimeHistogram().toArray()); - info.setFetchRowCountHistogram(sqlStat.getFetchRowCountHistogram().toArray()); - info.setUpdateCountHistogram(sqlStat.getUpdateCountHistogram().toArray()); - - return info; - } -} diff --git a/src/main/java/com/alibaba/druid/stat/service/DruidStatStore.java b/src/main/java/com/alibaba/druid/stat/service/DruidStatStore.java deleted file mode 100644 index 9d0030bc63..0000000000 --- a/src/main/java/com/alibaba/druid/stat/service/DruidStatStore.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.alibaba.druid.stat.service; - -import java.util.List; - -import com.alibaba.druid.stat.service.dto.DataSourceInfo; - -public interface DruidStatStore { - - void saveDataSource(List dataSourceList); -} diff --git a/src/main/java/com/alibaba/druid/stat/service/dto/DataSourceInfo.java b/src/main/java/com/alibaba/druid/stat/service/dto/DataSourceInfo.java deleted file mode 100644 index b706154cb7..0000000000 --- a/src/main/java/com/alibaba/druid/stat/service/dto/DataSourceInfo.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.alibaba.druid.stat.service.dto; - -import java.util.List; - -public class DataSourceInfo { - - private long id; - private String url; - private String dbType; - - private int activeCount; - private int activePeak; - - private int poolingCount; - - private int connectCount; - private int connectErrorCount; - - private int createCount; - private int createErrorCount; - - private int executeCount; - - private int closeCount; - private int destoryCount; - - private long collectTimeMillis; - - private int[] transactionHistogram; - - private int[] connectionHoldHistogram; - - private List sqlList; - - public String getDbType() { - return dbType; - } - - public void setDbType(String dbType) { - this.dbType = dbType; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public List getSqlList() { - return sqlList; - } - - public void setSqlList(List sqlList) { - this.sqlList = sqlList; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public int[] getTransactionHistogram() { - return transactionHistogram; - } - - public void setTransactionHistogram(long[] values) { - this.transactionHistogram = new int[values.length]; - for (int i = 0; i < values.length; ++i) { - transactionHistogram[i] = (int) values[i]; - } - } - - public void setTransactionHistogram(int[] values) { - this.transactionHistogram = values; - } - - public int[] getConnectionHoldHistogram() { - return connectionHoldHistogram; - } - - public void setConnectionHoldHistogram(int[] values) { - this.connectionHoldHistogram = values; - } - - public void setConnectionHoldHistogram(long[] values) { - this.connectionHoldHistogram = new int[values.length]; - for (int i = 0; i < values.length; ++i) { - connectionHoldHistogram[i] = (int) values[i]; - } - } - - public int getActiveCount() { - return activeCount; - } - - public void setActiveCount(int activeCount) { - this.activeCount = activeCount; - } - - public int getActivePeak() { - return activePeak; - } - - public void setActivePeak(int activePeak) { - this.activePeak = activePeak; - } - - public int getPoolingCount() { - return poolingCount; - } - - public void setPoolingCount(int poolingCount) { - this.poolingCount = poolingCount; - } - - public int getConnectCount() { - return connectCount; - } - - public void setConnectCount(int connectCount) { - this.connectCount = connectCount; - } - - public int getConnectErrorCount() { - return connectErrorCount; - } - - public void setConnectErrorCount(int connectErrorCount) { - this.connectErrorCount = connectErrorCount; - } - - public int getCreateCount() { - return createCount; - } - - public void setCreateCount(int createCount) { - this.createCount = createCount; - } - - public int getCreateErrorCount() { - return createErrorCount; - } - - public void setCreateErrorCount(int createErrorCount) { - this.createErrorCount = createErrorCount; - } - - public int getExecuteCount() { - return executeCount; - } - - public void setExecuteCount(int executeCount) { - this.executeCount = executeCount; - } - - public int getCloseCount() { - return closeCount; - } - - public void setCloseCount(int closeCount) { - this.closeCount = closeCount; - } - - public int getDestoryCount() { - return destoryCount; - } - - public void setDestoryCount(int destoryCount) { - this.destoryCount = destoryCount; - } - - public long getCollectTimeMillis() { - return collectTimeMillis; - } - - public void setCollectTimeMillis(long collectTimeMillis) { - this.collectTimeMillis = collectTimeMillis; - } - -} diff --git a/src/main/java/com/alibaba/druid/stat/service/dto/SqlInfo.java b/src/main/java/com/alibaba/druid/stat/service/dto/SqlInfo.java deleted file mode 100644 index 86981d64de..0000000000 --- a/src/main/java/com/alibaba/druid/stat/service/dto/SqlInfo.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.alibaba.druid.stat.service.dto; - -public class SqlInfo { - - private String sql; - private int executeCount; - private int runningCount; - private int concurrentMax; - private int errorCount; - private int inTransactionCount; - - private long fetchRowCount; - private long updateCount; - - private long resultSetHoldTimeMilis; - - private int[] histogram; - - private int[] executeAndResultHoldTimeHistogram; - - private int[] updateCountHistogram; - - private int[] fetchRowCountHistogram; - - public SqlInfo(){ - - } - - public void setExecuteAndResultHoldTimeHistogram(long[] values) { - executeAndResultHoldTimeHistogram = new int[values.length]; - for (int i = 0; i < values.length; ++i) { - executeAndResultHoldTimeHistogram[i] = (int) values[i]; - } - } - - public int[] getExecuteAndResultHoldTimeHistogram() { - return executeAndResultHoldTimeHistogram; - } - - public void setFetchRowCountHistogram(long[] values) { - fetchRowCountHistogram = new int[values.length]; - for (int i = 0; i < values.length; ++i) { - fetchRowCountHistogram[i] = (int) values[i]; - } - } - - public int[] getFetchRowCountHistogram() { - return fetchRowCountHistogram; - } - - public void setUpdateCountHistogram(long[] values) { - updateCountHistogram = new int[values.length]; - for (int i = 0; i < values.length; ++i) { - updateCountHistogram[i] = (int) values[i]; - } - } - - public int[] getUpdateCountHistogram() { - return updateCountHistogram; - } - - public void setHisogram(long[] values) { - histogram = new int[values.length]; - for (int i = 0; i < values.length; ++i) { - histogram[i] = (int) values[i]; - } - } - - public int[] getHistogram() { - return histogram; - } - - public String getSql() { - return sql; - } - - public void setSql(String sql) { - this.sql = sql; - } - - public int getExecuteCount() { - return executeCount; - } - - public void setExecuteCount(int executeCount) { - this.executeCount = executeCount; - } - - public int getRunningCount() { - return runningCount; - } - - public void setRunningCount(int runningCount) { - this.runningCount = runningCount; - } - - public int getConcurrentMax() { - return concurrentMax; - } - - public void setConcurrentMax(int concurrentMax) { - this.concurrentMax = concurrentMax; - } - - public int getErrorCount() { - return errorCount; - } - - public void setErrorCount(int errorCount) { - this.errorCount = errorCount; - } - - public int getInTransactionCount() { - return inTransactionCount; - } - - public void setInTransactionCount(int inTransactionCount) { - this.inTransactionCount = inTransactionCount; - } - - public long getFetchRowCount() { - return fetchRowCount; - } - - public void setFetchRowCount(long fetchRowCount) { - this.fetchRowCount = fetchRowCount; - } - - public long getUpdateCount() { - return updateCount; - } - - public void setUpdateCount(long updateCount) { - this.updateCount = updateCount; - } - - public long getResultSetHoldTimeMilis() { - return resultSetHoldTimeMilis; - } - - public void setResultSetHoldTimeMilis(long resultSetHoldTimeMilis) { - this.resultSetHoldTimeMilis = resultSetHoldTimeMilis; - } - - public void merge(SqlInfo o) { - executeCount += o.executeCount; - runningCount += o.runningCount; - if (o.concurrentMax > concurrentMax) { - concurrentMax = o.concurrentMax; - } - errorCount += o.errorCount; - inTransactionCount += o.inTransactionCount; - - fetchRowCount += o.fetchRowCount; - updateCount += o.updateCount; - - resultSetHoldTimeMilis += o.resultSetHoldTimeMilis; - - for (int i = 0; i < histogram.length; ++i) { - this.histogram[i] += o.histogram[i]; - } - - for (int i = 0; i < executeAndResultHoldTimeHistogram.length; ++i) { - this.executeAndResultHoldTimeHistogram[i] += o.executeAndResultHoldTimeHistogram[i]; - } - - for (int i = 0; i < updateCountHistogram.length; ++i) { - this.updateCountHistogram[i] += o.updateCountHistogram[i]; - } - - for (int i = 0; i < fetchRowCountHistogram.length; ++i) { - this.fetchRowCountHistogram[i] += o.fetchRowCountHistogram[i]; - } - } -} diff --git a/src/main/java/com/alibaba/druid/stat/service/impl/DruidStatMemoryStore.java b/src/main/java/com/alibaba/druid/stat/service/impl/DruidStatMemoryStore.java deleted file mode 100644 index 27b096ae8d..0000000000 --- a/src/main/java/com/alibaba/druid/stat/service/impl/DruidStatMemoryStore.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.alibaba.druid.stat.service.impl; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentSkipListMap; - -import com.alibaba.druid.stat.service.DruidStatStore; -import com.alibaba.druid.stat.service.dto.DataSourceInfo; - -public class DruidStatMemoryStore implements DruidStatStore { - - private ConcurrentHashMap dataSourceDataMap = new ConcurrentHashMap(); - - @Override - public void saveDataSource(List dataSourceList) { - for (DataSourceInfo dataSourceInfo : dataSourceList) { - DataSourceData data = dataSourceDataMap.get(dataSourceInfo.getId()); - - if (data == null) { - dataSourceDataMap.putIfAbsent(dataSourceInfo.getId(), new DataSourceData(dataSourceInfo.getId(), - dataSourceInfo.getUrl(), - dataSourceInfo.getDbType())); - data = dataSourceDataMap.get(dataSourceInfo.getId()); - } - - data.add(dataSourceInfo); - } - } - - public Collection scan(long dataSourceId, Long startTimeMillis, Long endTimeMillis) { - DataSourceData data = dataSourceDataMap.get(dataSourceId); - - if (data == null) { - return Collections.emptyList(); - } - - return data.scan(startTimeMillis, endTimeMillis); - } - - public static class DataSourceData { - - private final Long id; - private final String url; - private final String dbType; - - private ConcurrentSkipListMap data = new ConcurrentSkipListMap(); - - public DataSourceData(Long id, String url, String dbType){ - super(); - this.id = id; - this.url = url; - this.dbType = dbType; - } - - public Long getId() { - return id; - } - - public String getUrl() { - return url; - } - - public String getDbType() { - return dbType; - } - - public void add(DataSourceInfo dataSourceInfo) { - data.put(dataSourceInfo.getCollectTimeMillis(), dataSourceInfo); - } - - public Collection scan(Long startTimeMillis, Long endTimeMillis) { - if (data.size() == 0) { - return Collections.emptyList(); - } - - if (startTimeMillis == null) { - startTimeMillis = data.keySet().iterator().next(); - } - - if (endTimeMillis == null) { - endTimeMillis = data.descendingKeySet().iterator().next(); - } - - return data.subMap(startTimeMillis, endTimeMillis).values(); - } - } - -} diff --git a/src/test/java/com/alibaba/druid/bvt/statService/SqlInfoTest.java b/src/test/java/com/alibaba/druid/bvt/statService/SqlInfoTest.java deleted file mode 100644 index 1aa1c67554..0000000000 --- a/src/test/java/com/alibaba/druid/bvt/statService/SqlInfoTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.alibaba.druid.bvt.statService; - -import junit.framework.Assert; -import junit.framework.TestCase; - -import com.alibaba.druid.stat.JdbcSqlStat; -import com.alibaba.druid.stat.service.DruidStatServiceUtils; -import com.alibaba.druid.stat.service.dto.SqlInfo; - -public class SqlInfoTest extends TestCase { - - public void test_0() throws Exception { - JdbcSqlStat sqlStat = new JdbcSqlStat("select 1"); - sqlStat.incrementRunningCount(); - sqlStat.incrementExecuteSuccessCount(); - - SqlInfo info = DruidStatServiceUtils.createSqlInfo(sqlStat); - - Assert.assertEquals(1, info.getRunningCount()); - Assert.assertEquals(1, info.getExecuteCount()); - - JdbcSqlStat sqlStat1 = new JdbcSqlStat("select 2"); - sqlStat1.incrementRunningCount(); - sqlStat1.incrementExecuteSuccessCount(); - - SqlInfo info1 = DruidStatServiceUtils.createSqlInfo(sqlStat); - - info.merge(info1); - - Assert.assertEquals(2, info.getRunningCount()); - Assert.assertEquals(2, info.getExecuteCount()); - } -}