From 2b2eb9ee82179c23bd49be9847c87e4899ee963b Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 4 Aug 2012 07:44:06 +0800 Subject: [PATCH] add stat service --- .../druid/stat/service/dto/SqlInfo.java | 146 +++++++----------- .../druid/bvt/statService/SqlInfoTest.java | 23 ++- 2 files changed, 75 insertions(+), 94 deletions(-) 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 index 17b70b128f..86981d64de 100644 --- a/src/main/java/com/alibaba/druid/stat/service/dto/SqlInfo.java +++ b/src/main/java/com/alibaba/druid/stat/service/dto/SqlInfo.java @@ -14,125 +14,60 @@ public class SqlInfo { 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[] histogram; - 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[] executeAndResultHoldTimeHistogram; - 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[] updateCountHistogram; - private int fetchRowCountHistogram_0; - private int fetchRowCountHistogram_1; - private int fetchRowCountHistogram_2; - private int fetchRowCountHistogram_3; - private int fetchRowCountHistogram_4; - private int fetchRowCountHistogram_5; + private int[] fetchRowCountHistogram; 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]; + executeAndResultHoldTimeHistogram = new int[values.length]; + for (int i = 0; i < values.length; ++i) { + executeAndResultHoldTimeHistogram[i] = (int) values[i]; + } } public int[] getExecuteAndResultHoldTimeHistogram() { - return new int[] { executeAndResultHoldTimeHistogram_0, // - executeAndResultHoldTimeHistogram_1, // - executeAndResultHoldTimeHistogram_2, // - executeAndResultHoldTimeHistogram_3, // - executeAndResultHoldTimeHistogram_4, // - executeAndResultHoldTimeHistogram_5, // - executeAndResultHoldTimeHistogram_6, // - executeAndResultHoldTimeHistogram_7, // - }; + return executeAndResultHoldTimeHistogram; } 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]; + fetchRowCountHistogram = new int[values.length]; + for (int i = 0; i < values.length; ++i) { + fetchRowCountHistogram[i] = (int) values[i]; + } } public int[] getFetchRowCountHistogram() { - return new int[] { fetchRowCountHistogram_0, // - fetchRowCountHistogram_1, // - fetchRowCountHistogram_2, // - fetchRowCountHistogram_3, // - fetchRowCountHistogram_4, // - fetchRowCountHistogram_5, // - }; + return fetchRowCountHistogram; } 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]; + updateCountHistogram = new int[values.length]; + for (int i = 0; i < values.length; ++i) { + updateCountHistogram[i] = (int) values[i]; + } } public int[] getUpdateCountHistogram() { - return new int[] { updateCountHistogram_0, // - updateCountHistogram_1, // - updateCountHistogram_2, // - updateCountHistogram_3, // - updateCountHistogram_4, // - updateCountHistogram_5, // - }; + return updateCountHistogram; } 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]; + histogram = new int[values.length]; + for (int i = 0; i < values.length; ++i) { + histogram[i] = (int) values[i]; + } } public int[] getHistogram() { - return new int[] { histogram_0, // - histogram_1, // - histogram_2, // - histogram_3, // - histogram_4, // - histogram_5, // - histogram_6, // - histogram_7, // - }; + return histogram; } public String getSql() { @@ -206,8 +141,35 @@ public class SqlInfo { public void setResultSetHoldTimeMilis(long resultSetHoldTimeMilis) { this.resultSetHoldTimeMilis = resultSetHoldTimeMilis; } - - public void merge(SqlInfo sqlInfo) { - + + 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/test/java/com/alibaba/druid/bvt/statService/SqlInfoTest.java b/src/test/java/com/alibaba/druid/bvt/statService/SqlInfoTest.java index 42ab5b24c8..1aa1c67554 100644 --- a/src/test/java/com/alibaba/druid/bvt/statService/SqlInfoTest.java +++ b/src/test/java/com/alibaba/druid/bvt/statService/SqlInfoTest.java @@ -1,14 +1,33 @@ 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 { + + 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(); - DruidStatServiceUtils.createSqlInfo(sqlStat); + SqlInfo info1 = DruidStatServiceUtils.createSqlInfo(sqlStat); + + info.merge(info1); + + Assert.assertEquals(2, info.getRunningCount()); + Assert.assertEquals(2, info.getExecuteCount()); } }