From 1ebba4f26af351147ae52d16611fcea400a64271 Mon Sep 17 00:00:00 2001 From: "calvin.xiao" Date: Thu, 29 Dec 2016 14:31:55 +0800 Subject: [PATCH] =?UTF-8?q?#524=20=E5=A2=9E=E5=8A=A0=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/metrics/README.txt | 1 + .../modules/metrics/metric/Histogram.java | 7 +- .../modules/metrics/FullExampleTest.java | 89 +++++++++++++++++++ .../metrics/src/test/resources/logback.xml | 1 + 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 modules/metrics/README.txt create mode 100644 modules/metrics/src/test/java/org/springside/modules/metrics/FullExampleTest.java diff --git a/modules/metrics/README.txt b/modules/metrics/README.txt new file mode 100644 index 00000000..af99a26a --- /dev/null +++ b/modules/metrics/README.txt @@ -0,0 +1 @@ +see src/test/java/org/springside/modules/metrics/FullExampleTest.java for Usage \ No newline at end of file diff --git a/modules/metrics/src/main/java/org/springside/modules/metrics/metric/Histogram.java b/modules/metrics/src/main/java/org/springside/modules/metrics/metric/Histogram.java index 1226cc46..56c82b18 100755 --- a/modules/metrics/src/main/java/org/springside/modules/metrics/metric/Histogram.java +++ b/modules/metrics/src/main/java/org/springside/modules/metrics/metric/Histogram.java @@ -24,8 +24,9 @@ public class Histogram { private LinkedList measurements; //统计周期内的原始数据 public Histogram(Double... pcts) { - this.pcts = pcts; measurements = new LinkedList(); + + this.pcts = pcts; latestMetric = createEmptyMetric(); } @@ -110,6 +111,10 @@ public class Histogram { return snapshotList.get((int) pos - 1); } + public void setPcts(Double[] pcts) { + this.pcts = pcts; + } + @Override public String toString() { return "Histogram [latestMetric=" + latestMetric + ", measurements=" + measurements + ", pcts=" diff --git a/modules/metrics/src/test/java/org/springside/modules/metrics/FullExampleTest.java b/modules/metrics/src/test/java/org/springside/modules/metrics/FullExampleTest.java new file mode 100644 index 00000000..bd89a9d3 --- /dev/null +++ b/modules/metrics/src/test/java/org/springside/modules/metrics/FullExampleTest.java @@ -0,0 +1,89 @@ +package org.springside.modules.metrics; + +import java.util.concurrent.TimeUnit; + +import org.junit.Test; +import org.springside.modules.metrics.metric.Counter; +import org.springside.modules.metrics.metric.Histogram; +import org.springside.modules.metrics.metric.Timer; +import org.springside.modules.metrics.metric.Timer.TimerContext; +import org.springside.modules.metrics.reporter.ConsoleReporter; +import org.springside.modules.metrics.reporter.Slf4jReporter; + +/** + * 示例分别使用ConsoleReporter与Slf4jReporter, 演示Counter, Histogram 和 Timer的用法. + */ +public class FullExampleTest { + + @Test + public void counterExample() throws InterruptedException { + MetricRegistry metricRegistry = new MetricRegistry(); + + ConsoleReporter consoleReporter = new ConsoleReporter(); + + ReportScheduler scheduler = new ReportScheduler(metricRegistry, consoleReporter); + scheduler.start(1, TimeUnit.SECONDS); + + Counter counter = metricRegistry.counter(MetricRegistry.name("UserService", "getUser.counter")); + counter.inc(); + + Thread.sleep(1000); + counter.inc(2); + Thread.sleep(1000); + } + + @Test + public void histogramExample() throws InterruptedException { + MetricRegistry metricRegistry = new MetricRegistry(); + ConsoleReporter consoleReporter = new ConsoleReporter(); + + ReportScheduler scheduler = new ReportScheduler(metricRegistry, consoleReporter); + scheduler.start(1, TimeUnit.SECONDS); + + Histogram histogram = metricRegistry.histogram(MetricRegistry.name("UserService", "getUser.latency")); + histogram.update(1); + histogram.update(100); + + Thread.sleep(1000); + // 增加百分位 + histogram.setPcts(new Double[] { 0.99d, 0.999d }); + histogram.update(2); + histogram.update(200); + Thread.sleep(1000); + } + + @Test + public void timerExample() throws InterruptedException { + MetricRegistry metricRegistry = new MetricRegistry(); + Slf4jReporter slf4jReporter = new Slf4jReporter(); + + ReportScheduler scheduler = new ReportScheduler(metricRegistry, slf4jReporter); + scheduler.start(1, TimeUnit.SECONDS); + + Timer timer = metricRegistry.timer(MetricRegistry.name("UserService", "getUser.timer"), + new Double[] { 0.99d, 0.999d }); + + // 写法1 + TimerContext timerContext = timer.start(); + Thread.sleep(100); + timerContext.stop(); + + timerContext = timer.start(); + Thread.sleep(200); + timerContext.stop(); + + Thread.sleep(700); + + // 用法2 + long start = System.currentTimeMillis(); + Thread.sleep(150); + timer.update(start); + + start = System.currentTimeMillis(); + Thread.sleep(250); + timer.update(start); + + Thread.sleep(700); + } + +} diff --git a/modules/metrics/src/test/resources/logback.xml b/modules/metrics/src/test/resources/logback.xml index b2ff4323..8a8a3eba 100755 --- a/modules/metrics/src/test/resources/logback.xml +++ b/modules/metrics/src/test/resources/logback.xml @@ -7,6 +7,7 @@ +