add stat service

This commit is contained in:
wenshao
2012-08-03 23:32:52 +08:00
parent ffdd81f194
commit 60f7f2fc4b
4 changed files with 197 additions and 14 deletions
@@ -2,7 +2,9 @@ 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;
@@ -68,27 +70,24 @@ public class DruidStatService {
Collection<JdbcSqlStat> sqlStats = dataSource.getDataSourceStat().getSqlStatMap().values();
List<SqlInfo> sqlStatInfoList = new ArrayList<SqlInfo>(sqlStats.size());
Map<String, SqlInfo> sqlStatInfoMap = new HashMap<String, SqlInfo>(sqlStats.size());
for (JdbcSqlStat sqlStat : dataSource.getDataSourceStat().getSqlStatMap().values()) {
SqlInfo sqlStatInfo = new SqlInfo();
if (sqlStat.getExecuteCount() == 0 && sqlStat.getRunningCount() == 0) {
continue;
}
sqlStatInfo.setSql(sqlStat.getSql());
sqlStatInfo.setExecuteCount((int) sqlStat.getExecuteCount());
sqlStatInfo.setRunningCount((int) sqlStat.getRunningCount());
sqlStatInfo.setConcurrentMax((int) sqlStat.getConcurrentMax());
sqlStatInfo.setErrorCount((int) sqlStat.getErrorCount());
sqlStatInfo.setInTransactionCount((int) sqlStat.getInTransactionCount());
sqlStatInfo.setFetchRowCount(sqlStat.getFetchRowCount());
sqlStatInfo.setUpdateCount(sqlStat.getUpdateCount());
sqlStatInfoList.add(sqlStatInfo);
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(sqlStatInfoList);
dataSourceStat.setSqlList(new ArrayList<SqlInfo>(sqlStatInfoMap.values()));
dataSourceStatList.add(dataSourceStat);
}
@@ -0,0 +1,40 @@
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;
}
}
@@ -12,10 +12,129 @@ public class SqlInfo {
private long fetchRowCount;
private long updateCount;
private long resultSetHoldTimeMilis;
// 使用字段而不是数组为了节省内存空间
private int histogram_0;
private int histogram_1;
private int histogram_2;
private int histogram_3;
private int histogram_4;
private int histogram_5;
private int histogram_6;
private int histogram_7;
private int executeAndResultHoldTimeHistogram_0;
private int executeAndResultHoldTimeHistogram_1;
private int executeAndResultHoldTimeHistogram_2;
private int executeAndResultHoldTimeHistogram_3;
private int executeAndResultHoldTimeHistogram_4;
private int executeAndResultHoldTimeHistogram_5;
private int executeAndResultHoldTimeHistogram_6;
private int executeAndResultHoldTimeHistogram_7;
private int updateCountHistogram_0;
private int updateCountHistogram_1;
private int updateCountHistogram_2;
private int updateCountHistogram_3;
private int updateCountHistogram_4;
private int updateCountHistogram_5;
private int fetchRowCountHistogram_0;
private int fetchRowCountHistogram_1;
private int fetchRowCountHistogram_2;
private int fetchRowCountHistogram_3;
private int fetchRowCountHistogram_4;
private int fetchRowCountHistogram_5;
public SqlInfo(){
}
public void setExecuteAndResultHoldTimeHistogram(long[] values) {
executeAndResultHoldTimeHistogram_0 = (int) values[0];
executeAndResultHoldTimeHistogram_1 = (int) values[1];
executeAndResultHoldTimeHistogram_2 = (int) values[2];
executeAndResultHoldTimeHistogram_3 = (int) values[3];
executeAndResultHoldTimeHistogram_4 = (int) values[4];
executeAndResultHoldTimeHistogram_5 = (int) values[5];
executeAndResultHoldTimeHistogram_6 = (int) values[6];
executeAndResultHoldTimeHistogram_7 = (int) values[7];
}
public int[] getExecuteAndResultHoldTimeHistogram() {
return new int[] { executeAndResultHoldTimeHistogram_0, //
executeAndResultHoldTimeHistogram_1, //
executeAndResultHoldTimeHistogram_2, //
executeAndResultHoldTimeHistogram_3, //
executeAndResultHoldTimeHistogram_4, //
executeAndResultHoldTimeHistogram_5, //
executeAndResultHoldTimeHistogram_6, //
executeAndResultHoldTimeHistogram_7, //
};
}
public void setFetchRowCountHistogram(long[] values) {
fetchRowCountHistogram_0 = (int) values[0];
fetchRowCountHistogram_1 = (int) values[1];
fetchRowCountHistogram_2 = (int) values[2];
fetchRowCountHistogram_3 = (int) values[3];
fetchRowCountHistogram_4 = (int) values[4];
fetchRowCountHistogram_5 = (int) values[5];
}
public int[] getFetchRowCountHistogram() {
return new int[] { fetchRowCountHistogram_0, //
fetchRowCountHistogram_1, //
fetchRowCountHistogram_2, //
fetchRowCountHistogram_3, //
fetchRowCountHistogram_4, //
fetchRowCountHistogram_5, //
};
}
public void setUpdateCountHistogram(long[] values) {
updateCountHistogram_0 = (int) values[0];
updateCountHistogram_1 = (int) values[1];
updateCountHistogram_2 = (int) values[2];
updateCountHistogram_3 = (int) values[3];
updateCountHistogram_4 = (int) values[4];
updateCountHistogram_5 = (int) values[5];
}
public int[] getUpdateCountHistogram() {
return new int[] { updateCountHistogram_0, //
updateCountHistogram_1, //
updateCountHistogram_2, //
updateCountHistogram_3, //
updateCountHistogram_4, //
updateCountHistogram_5, //
};
}
public void setHisogram(long[] values) {
histogram_0 = (int) values[0];
histogram_1 = (int) values[1];
histogram_2 = (int) values[2];
histogram_3 = (int) values[3];
histogram_4 = (int) values[4];
histogram_5 = (int) values[5];
histogram_6 = (int) values[6];
histogram_7 = (int) values[7];
}
public int[] getHistogram() {
return new int[] { histogram_0, //
histogram_1, //
histogram_2, //
histogram_3, //
histogram_4, //
histogram_5, //
histogram_6, //
histogram_7, //
};
}
public String getSql() {
return sql;
}
@@ -80,4 +199,15 @@ public class SqlInfo {
this.updateCount = updateCount;
}
public long getResultSetHoldTimeMilis() {
return resultSetHoldTimeMilis;
}
public void setResultSetHoldTimeMilis(long resultSetHoldTimeMilis) {
this.resultSetHoldTimeMilis = resultSetHoldTimeMilis;
}
public void merge(SqlInfo sqlInfo) {
}
}
@@ -0,0 +1,14 @@
package com.alibaba.druid.bvt.statService;
import junit.framework.TestCase;
import com.alibaba.druid.stat.JdbcSqlStat;
import com.alibaba.druid.stat.service.DruidStatServiceUtils;
public class SqlInfoTest extends TestCase {
public void test_0 () throws Exception {
JdbcSqlStat sqlStat = new JdbcSqlStat("select 1");
DruidStatServiceUtils.createSqlInfo(sqlStat);
}
}