diff --git a/examples/showcase/pom.xml b/examples/showcase/pom.xml index 211c2f63..705f5391 100644 --- a/examples/showcase/pom.xml +++ b/examples/showcase/pom.xml @@ -31,6 +31,10 @@ org.springside springside-extension + + org.springside + springside-metrics + @@ -209,16 +213,6 @@ - - - com.codahale.metrics - metrics-core - - - com.codahale.metrics - metrics-graphite - - org.javasimon diff --git a/examples/showcase/src/main/java/org/springside/examples/showcase/demos/metrics/MetricsManager.java b/examples/showcase/src/main/java/org/springside/examples/showcase/demos/metrics/MetricsManager.java new file mode 100644 index 00000000..dc73249a --- /dev/null +++ b/examples/showcase/src/main/java/org/springside/examples/showcase/demos/metrics/MetricsManager.java @@ -0,0 +1,29 @@ +package org.springside.examples.showcase.demos.metrics; + +import java.net.InetSocketAddress; +import java.util.concurrent.TimeUnit; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +import org.springside.modules.metrics.MetricRegistry; +import org.springside.modules.metrics.report.ConsoleReporter; +import org.springside.modules.metrics.report.GraphiteReporter; +import org.springside.modules.metrics.report.ReportScheduler; + +public class MetricsManager { + + private ReportScheduler scheduler; + + @PostConstruct + public void start() { + GraphiteReporter graphiteReporter = new GraphiteReporter(new InetSocketAddress("localhost", 2003)); + scheduler = new ReportScheduler(MetricRegistry.INSTANCE, new ConsoleReporter(), graphiteReporter); + scheduler.start(10, TimeUnit.SECONDS); + } + + @PreDestroy + public void stop() { + scheduler.stop(); + } +} diff --git a/examples/showcase/src/main/java/org/springside/examples/showcase/demos/metrics/MetricsReporterManager.java b/examples/showcase/src/main/java/org/springside/examples/showcase/demos/metrics/MetricsReporterManager.java deleted file mode 100644 index daa0efcf..00000000 --- a/examples/showcase/src/main/java/org/springside/examples/showcase/demos/metrics/MetricsReporterManager.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.springside.examples.showcase.demos.metrics; - -import java.net.InetSocketAddress; -import java.util.concurrent.TimeUnit; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import com.codahale.metrics.JmxReporter; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.graphite.Graphite; -import com.codahale.metrics.graphite.GraphiteReporter; - -public class MetricsReporterManager { - - private static Logger logger = LoggerFactory.getLogger(MetricsReporterManager.class); - - @Autowired - private MetricRegistry metricRegistry; - - private GraphiteReporter graphiteReporter; - private JmxReporter jmxReporter; - - @PostConstruct - public void start() { - Graphite graphite = new Graphite(new InetSocketAddress("localhost", 2003)); - graphiteReporter = GraphiteReporter.forRegistry(metricRegistry).prefixedWith("metrics").build(graphite); - graphiteReporter.start(30, TimeUnit.SECONDS); - - jmxReporter = JmxReporter.forRegistry(metricRegistry).build(); - jmxReporter.start(); - - logger.info("Started Metrics Reporter"); - } - - @PreDestroy - public void stop() { - graphiteReporter.stop(); - jmxReporter.stop(); - - logger.info("Stopped Metrics Reporter"); - } -} diff --git a/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserRestController.java b/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserRestController.java index 5e13ae91..844e81f6 100644 --- a/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserRestController.java +++ b/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserRestController.java @@ -14,9 +14,9 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springside.examples.showcase.entity.User; import org.springside.examples.showcase.service.AccountEffectiveService; import org.springside.modules.mapper.BeanMapper; - -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.Timer; +import org.springside.modules.metrics.Execution; +import org.springside.modules.metrics.Execution.ExecutionTimer; +import org.springside.modules.metrics.MetricRegistry; /** * Shiro的配置文件中对/api/secure/**进行拦截,要求authBasic认证. @@ -31,14 +31,11 @@ public class UserRestController { @Autowired private AccountEffectiveService accountService; - @Autowired - private MetricRegistry metricRegistry; - - private Timer metrics; + private Execution executionMetrics; @PostConstruct public void register() { - metrics = metricRegistry.timer("Rest_GetUser"); + executionMetrics = MetricRegistry.INSTANCE.execution("Rest_GetUser"); } /** @@ -50,7 +47,7 @@ public class UserRestController { @RequestMapping(value = "/{id}", method = RequestMethod.GET) @ResponseBody public UserDTO getUser(@PathVariable("id") Long id) { - final Timer.Context metricsContext = metrics.time(); + final ExecutionTimer exectuionTimer = executionMetrics.start(); try { User user = accountService.getUser(id); @@ -65,7 +62,7 @@ public class UserRestController { dto.setTeamId(user.getTeam().getId()); return dto; } finally { - metricsContext.stop(); + exectuionTimer.stop(); } } } diff --git a/examples/showcase/src/main/resources/monitor/applicationContext-metrics.xml b/examples/showcase/src/main/resources/monitor/applicationContext-metrics.xml index c01e5c9c..527db073 100644 --- a/examples/showcase/src/main/resources/monitor/applicationContext-metrics.xml +++ b/examples/showcase/src/main/resources/monitor/applicationContext-metrics.xml @@ -3,10 +3,6 @@ xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> - Yammer Coda Hale's Metrics监控配置 - - - - - + Metrics监控配置 + \ No newline at end of file diff --git a/modules/metrics/install.bat b/modules/metrics/install.bat new file mode 100644 index 00000000..d726fa0a --- /dev/null +++ b/modules/metrics/install.bat @@ -0,0 +1,6 @@ +@echo off +echo [INFO] Install jar to local repository. + +cd %~dp0 +call mvn clean install -Dmaven.test.skip=true +pause \ No newline at end of file diff --git a/modules/metrics/src/main/java/org/springside/modules/metrics/report/GraphiteReporter.java b/modules/metrics/src/main/java/org/springside/modules/metrics/report/GraphiteReporter.java index 05a53977..42582771 100644 --- a/modules/metrics/src/main/java/org/springside/modules/metrics/report/GraphiteReporter.java +++ b/modules/metrics/src/main/java/org/springside/modules/metrics/report/GraphiteReporter.java @@ -79,6 +79,8 @@ public class GraphiteReporter implements Reporter { private void reportCounter(String name, CounterMetric counter, long timestamp) throws IOException { send(MetricRegistry.name(prefix, name, "count"), format(counter.count), timestamp); + send(MetricRegistry.name(prefix, name, "lastRate"), format(counter.lastRate), timestamp); + send(MetricRegistry.name(prefix, name, "meanRate"), format(counter.meanRate), timestamp); } private void reportHistogram(String name, HistogramMetric histogram, long timestamp) throws IOException { @@ -93,6 +95,8 @@ public class GraphiteReporter implements Reporter { private void reportExecution(String name, ExecutionMetric execution, long timestamp) throws IOException { send(MetricRegistry.name(prefix, name, "count"), format(execution.counter.count), timestamp); + send(MetricRegistry.name(prefix, name, "lastRate"), format(execution.counter.lastRate), timestamp); + send(MetricRegistry.name(prefix, name, "meanRate"), format(execution.counter.meanRate), timestamp); send(MetricRegistry.name(prefix, name, "min"), format(execution.histogram.min), timestamp); send(MetricRegistry.name(prefix, name, "max"), format(execution.histogram.max), timestamp); diff --git a/modules/metrics/src/main/java/org/springside/modules/metrics/report/ReportScheduler.java b/modules/metrics/src/main/java/org/springside/modules/metrics/report/ReportScheduler.java index aee64361..cd5c42a8 100644 --- a/modules/metrics/src/main/java/org/springside/modules/metrics/report/ReportScheduler.java +++ b/modules/metrics/src/main/java/org/springside/modules/metrics/report/ReportScheduler.java @@ -75,16 +75,16 @@ public class ReportScheduler { } } }, period, period, unit); - logger.info("metric reporter started."); + logger.info("metric reporters started."); } public void stop() { executor.shutdownNow(); try { if (executor.awaitTermination(1, TimeUnit.SECONDS)) { - logger.info("metric reporter stopped."); + logger.info("metric reporters stopped."); } else { - logger.info("metric reporter can stopped in 1 seconds, force stopped"); + logger.info("metric reporters can't stopped in 1 seconds, force stopped"); } } catch (InterruptedException ignored) { // do nothing diff --git a/modules/parent/pom.xml b/modules/parent/pom.xml index 0c8a119f..c6d5217c 100644 --- a/modules/parent/pom.xml +++ b/modules/parent/pom.xml @@ -27,7 +27,6 @@ 4.3.1.Final 1.1.5 1.3.8 - 3.0.1 3.4.0 2.3.0 1.7.5 @@ -93,6 +92,11 @@ springside-extension ${springside.version} + + org.springside + springside-metrics + ${springside.version} + @@ -415,18 +419,6 @@ - - - com.codahale.metrics - metrics-core - ${metrics.version} - - - com.codahale.metrics - metrics-graphite - ${metrics.version} - - org.javasimon