You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sf...@apache.org on 2014/08/18 23:06:24 UTC
[4/8] git commit: add metrics factory, cod hale.metrics to pom,
add property
add metrics factory, cod hale.metrics to pom, add property
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/99c80faf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/99c80faf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/99c80faf
Branch: refs/heads/two-dot-o-push-notifications
Commit: 99c80faf21e179ab83cf9d1c8090a52ab3b9c481
Parents: 05d90c6
Author: Shawn Feldman <sf...@apache.org>
Authored: Fri Jul 18 14:41:58 2014 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Mon Aug 18 14:10:44 2014 -0600
----------------------------------------------------------------------
.../main/resources/usergrid-default.properties | 3 +
stack/core/pom.xml | 11 +-
.../apache/usergrid/metrics/MetricsFactory.java | 121 +++++++++++++++++++
.../main/resources/usergrid-core-context.xml | 3 +
stack/pom.xml | 2 +-
5 files changed, 138 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/99c80faf/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
diff --git a/stack/config/src/main/resources/usergrid-default.properties b/stack/config/src/main/resources/usergrid-default.properties
index 09d4f94..1f7caf5 100644
--- a/stack/config/src/main/resources/usergrid-default.properties
+++ b/stack/config/src/main/resources/usergrid-default.properties
@@ -365,6 +365,9 @@ usergrid.management.email.user-pin=\
<p>${pin}</p>
+# graphite server
+usergrid.metrics.graphite.host=badhost
+
###############################################################################
#
# Redirect urls to use instead of internal JSPs. Not all of these should be
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/99c80faf/stack/core/pom.xml
----------------------------------------------------------------------
diff --git a/stack/core/pom.xml b/stack/core/pom.xml
index b3a3949..ac94015 100644
--- a/stack/core/pom.xml
+++ b/stack/core/pom.xml
@@ -489,7 +489,6 @@
<scope>test</scope>
</dependency>
-
<!-- Core Persistence deps -->
<dependency>
<groupId>org.apache.usergrid</groupId>
@@ -548,6 +547,16 @@
<version>2.0.0-SNAPSHOT</version>
</dependency>-->
+ <dependency>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-core</artifactId>
+ <version>${metrics.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-graphite</artifactId>
+ <version>${metrics.version}</version>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/99c80faf/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java b/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java
new file mode 100644
index 0000000..c5dbf1e
--- /dev/null
+++ b/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.metrics;
+import com.codahale.metrics.*;
+import com.codahale.metrics.graphite.Graphite;
+import com.codahale.metrics.graphite.GraphiteReporter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.net.InetSocketAddress;
+import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Singleton class to manage metrics.
+ */
+@Component("metricsFactory")
+public class MetricsFactory {
+ @Autowired
+ private Properties properties;
+ public MetricRegistry registry;
+ private GraphiteReporter graphiteReporter;
+ private JmxReporter jmxReporter;
+ private ConcurrentHashMap<String,Metric> hashMap;
+ private static final Logger LOG = LoggerFactory.getLogger(MetricsFactory.class);
+
+ public MetricsFactory() {
+
+ }
+
+ @PostConstruct
+ void init() {
+ properties = new Properties();
+ try {
+ properties.load(Thread.currentThread()
+ .getContextClassLoader()
+ .getResourceAsStream("usergrid.properties"));
+ } catch (Exception e) {
+ LOG.error("Could not load props","");
+ }
+ registry = new MetricRegistry();
+ String badHost = "badhost";
+ String metricsHost = properties.getProperty("usergrid.metrics.graphite.host", badHost);
+ Graphite graphite = new Graphite(new InetSocketAddress(metricsHost, 2003));
+ graphiteReporter = GraphiteReporter.forRegistry(registry)
+ .prefixedWith("notifications")
+ .convertRatesTo(TimeUnit.SECONDS)
+ .convertDurationsTo(TimeUnit.MILLISECONDS)
+ .filter(MetricFilter.ALL)
+ .build(graphite);
+ if(metricsHost!=badHost) {
+ graphiteReporter.start(30, TimeUnit.SECONDS);
+ }else {
+ LOG.warn("MetricsService:Logger not started.");
+ graphiteReporter.stop();
+ }
+ hashMap = new ConcurrentHashMap<String, Metric>();
+
+ jmxReporter = JmxReporter.forRegistry(registry).build();
+ jmxReporter.start();
+ }
+
+ public MetricRegistry getRegistry() {
+ return registry;
+ }
+
+ public Timer getTimer(Class<?> klass, String name) {
+ return getMetric(Timer.class, klass, name);
+ }
+
+ public Histogram getHistogram(Class<?> klass, String name) {
+ return getMetric(Histogram.class, klass, name);
+ }
+
+ public Counter getCounter(Class<?> klass, String name) {
+ return getMetric(Counter.class, klass, name);
+ }
+
+ public Meter getMeter(Class<?> klass, String name) {
+ return getMetric(Meter.class, klass, name);
+ }
+
+ private <T> T getMetric(Class<T> metricClass, Class<?> klass, String name) {
+ String key = metricClass.getName() + klass.getName() + name;
+ Metric metric = hashMap.get(key);
+ if (metric == null) {
+ if (metricClass == Histogram.class) {
+ metric = this.getRegistry().histogram(MetricRegistry.name(klass, name));
+ }
+ if (metricClass == Timer.class) {
+ metric = this.getRegistry().timer(MetricRegistry.name(klass, name));
+ }
+ if (metricClass == Meter.class) {
+ metric = this.getRegistry().meter(MetricRegistry.name(klass, name));
+ }
+ if (metricClass == Counter.class) {
+ metric = this.getRegistry().counter(MetricRegistry.name(klass, name));
+ }
+ hashMap.put(key, metric);
+ }
+ return (T) metric;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/99c80faf/stack/core/src/main/resources/usergrid-core-context.xml
----------------------------------------------------------------------
diff --git a/stack/core/src/main/resources/usergrid-core-context.xml b/stack/core/src/main/resources/usergrid-core-context.xml
index 9321fb6..cd8802c 100644
--- a/stack/core/src/main/resources/usergrid-core-context.xml
+++ b/stack/core/src/main/resources/usergrid-core-context.xml
@@ -186,6 +186,9 @@
<bean id="jobFactory" class="org.apache.usergrid.batch.UsergridJobFactory" />
+ <bean id="metricsFactory" class="org.apache.usergrid.metrics.MetricsFactory" scope="singleton"/>
+
+ <!-- scan all job classes -->
<context:component-scan base-package="org.apache.usergrid.batch.job" />
<context:annotation-config />
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/99c80faf/stack/pom.xml
----------------------------------------------------------------------
diff --git a/stack/pom.xml b/stack/pom.xml
index adc02fd..600217c 100644
--- a/stack/pom.xml
+++ b/stack/pom.xml
@@ -115,7 +115,7 @@
<antlr.version>3.4</antlr.version>
<tika.version>1.4</tika.version>
<elasticsearch.version>1.2.3</elasticsearch.version>
-
+ <metrics.version>3.0.0</metrics.version>
</properties>
<licenses>