You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/07/30 15:01:13 UTC
[30/34] git commit: CAMEL-7554: Renamed package to include component
which is the way we do in Camel.
CAMEL-7554: Renamed package to include component which is the way we do in Camel.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/acf0fa39
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/acf0fa39
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/acf0fa39
Branch: refs/heads/master
Commit: acf0fa39634346a86c7d1f5d0a99f9ef79e94a36
Parents: f52b7a5
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Jul 30 14:17:47 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Jul 30 14:17:47 2014 +0200
----------------------------------------------------------------------
components/camel-metrics/README.md | 2 +-
components/camel-metrics/pom.xml | 147 ++++++------
.../metrics/AbstractMetricsEndpoint.java | 53 +++++
.../metrics/AbstractMetricsProducer.java | 72 ++++++
.../component/metrics/MetricsComponent.java | 134 +++++++++++
.../camel/component/metrics/MetricsType.java | 53 +++++
.../metrics/counter/CounterEndpoint.java | 66 ++++++
.../metrics/counter/CounterProducer.java | 51 +++++
.../metrics/histogram/HistogramEndpoint.java | 55 +++++
.../metrics/histogram/HistogramProducer.java | 49 ++++
.../component/metrics/meter/MeterEndpoint.java | 55 +++++
.../component/metrics/meter/MeterProducer.java | 44 ++++
.../component/metrics/timer/TimerEndpoint.java | 59 +++++
.../component/metrics/timer/TimerProducer.java | 85 +++++++
.../camel/metrics/AbstractMetricsEndpoint.java | 53 -----
.../camel/metrics/AbstractMetricsProducer.java | 74 ------
.../apache/camel/metrics/MetricsComponent.java | 134 -----------
.../org/apache/camel/metrics/MetricsType.java | 53 -----
.../camel/metrics/counter/CounterEndpoint.java | 66 ------
.../camel/metrics/counter/CounterProducer.java | 51 -----
.../metrics/histogram/HistogramEndpoint.java | 55 -----
.../metrics/histogram/HistogramProducer.java | 49 ----
.../camel/metrics/meter/MeterEndpoint.java | 55 -----
.../camel/metrics/meter/MeterProducer.java | 44 ----
.../camel/metrics/timer/TimerEndpoint.java | 59 -----
.../camel/metrics/timer/TimerProducer.java | 85 -------
.../services/org/apache/camel/component/metrics | 19 +-
.../metrics/AbstractMetricsEndpointTest.java | 105 +++++++++
.../metrics/AbstractMetricsProducerTest.java | 186 +++++++++++++++
.../metrics/MetricComponentSpringTest.java | 91 ++++++++
.../metrics/MetricsComponentRouteTest.java | 113 +++++++++
.../component/metrics/MetricsComponentTest.java | 217 ++++++++++++++++++
.../component/metrics/MetricsTypeTest.java | 34 +++
.../metrics/counter/CounterEndpointTest.java | 102 +++++++++
.../metrics/counter/CounterProducerTest.java | 195 ++++++++++++++++
.../metrics/counter/CounterRouteTest.java | 209 +++++++++++++++++
.../histogram/HistogramEndpointTest.java | 88 +++++++
.../histogram/HistogramProducerTest.java | 125 ++++++++++
.../metrics/histogram/HistogramRouteTest.java | 123 ++++++++++
.../metrics/meter/MeterEndpointTest.java | 89 +++++++
.../metrics/meter/MeterProducerTest.java | 126 ++++++++++
.../component/metrics/meter/MeterRouteTest.java | 165 +++++++++++++
.../metrics/timer/TimerEndpointTest.java | 89 +++++++
.../metrics/timer/TimerProducerTest.java | 229 +++++++++++++++++++
.../component/metrics/timer/TimerRouteTest.java | 144 ++++++++++++
.../metrics/AbstractMetricsEndpointTest.java | 105 ---------
.../metrics/AbstractMetricsProducerTest.java | 186 ---------------
.../metrics/MetricComponentSpringTest.java | 91 --------
.../metrics/MetricsComponentRouteTest.java | 113 ---------
.../camel/metrics/MetricsComponentTest.java | 217 ------------------
.../apache/camel/metrics/MetricsTypeTest.java | 33 ---
.../metrics/counter/CounterEndpointTest.java | 102 ---------
.../metrics/counter/CounterProducerTest.java | 195 ----------------
.../camel/metrics/counter/CounterRouteTest.java | 209 -----------------
.../histogram/HistogramEndpointTest.java | 88 -------
.../histogram/HistogramProducerTest.java | 125 ----------
.../metrics/histogram/HistogramRouteTest.java | 123 ----------
.../camel/metrics/meter/MeterEndpointTest.java | 89 -------
.../camel/metrics/meter/MeterProducerTest.java | 126 ----------
.../camel/metrics/meter/MeterRouteTest.java | 165 -------------
.../camel/metrics/timer/TimerEndpointTest.java | 89 -------
.../camel/metrics/timer/TimerProducerTest.java | 229 -------------------
.../camel/metrics/timer/TimerRouteTest.java | 144 ------------
.../src/test/resources/log4j.properties | 38 ++-
.../features/src/main/resources/features.xml | 5 +
.../camel/itest/karaf/CamelMetricsTest.java | 40 ++++
66 files changed, 3378 insertions(+), 3286 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/README.md
----------------------------------------------------------------------
diff --git a/components/camel-metrics/README.md b/components/camel-metrics/README.md
index b0b7bab..1e2b7c6 100644
--- a/components/camel-metrics/README.md
+++ b/components/camel-metrics/README.md
@@ -260,7 +260,7 @@ Message header can be used to override `action` value specified in Metrics compo
| Name | Description | Expected type |
|-------------------------|------------------------------|----------------------------------------------------------|
-| CamelMetricsTimerAction | Override timer action in URI | org.apache.camel.metrics.timer.TimerEndpoint.TimerAction |
+| CamelMetricsTimerAction | Override timer action in URI | org.apache.camel.component.timer.TimerEndpoint.TimerAction |
```java
// sets timer action using header
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-metrics/pom.xml b/components/camel-metrics/pom.xml
index 940a9b6..58aaf69 100644
--- a/components/camel-metrics/pom.xml
+++ b/components/camel-metrics/pom.xml
@@ -14,81 +14,86 @@
the specific language governing permissions and limitations under the
License.
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.camel</groupId>
- <artifactId>components</artifactId>
- <version>2.14-SNAPSHOT</version>
- </parent>
+ <parent>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>components</artifactId>
+ <version>2.14-SNAPSHOT</version>
+ </parent>
- <artifactId>camel-metrics</artifactId>
- <packaging>bundle</packaging>
- <name>Camel :: Metrics</name>
- <description>Camel Metrics based monitoring component</description>
+ <artifactId>camel-metrics</artifactId>
+ <packaging>bundle</packaging>
+ <name>Camel :: Metrics</name>
+ <description>Camel Metrics based monitoring component</description>
- <properties>
- <camel.osgi.export.pkg>
- org.apache.camel.component.metrics.*
- </camel.osgi.export.pkg>
- <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=metrics</camel.osgi.export.service>
- </properties>
+ <properties>
+ <camel.osgi.export.pkg>
+ org.apache.camel.component.metrics.*
+ </camel.osgi.export.pkg>
+ <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=metrics</camel.osgi.export.service>
+ </properties>
- <dependencies>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-core</artifactId>
- </dependency>
- <dependency>
- <groupId>com.codahale.metrics</groupId>
- <artifactId>metrics-core</artifactId>
- <version>${metrics-version}</version>
- </dependency>
+ <dependencies>
- <!-- testing -->
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-spring</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-spring-javaconfig</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-test-spring3</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-all</artifactId>
- <version>${hamcrest-version}</version>
- <scope>test</scope>
- </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-core</artifactId>
+ <version>${metrics-version}</version>
+ </dependency>
+
+ <!-- testing -->
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-spring</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-spring-javaconfig</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test-spring3</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-all</artifactId>
+ <version>${hamcrest-version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- logging -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
- <!-- logging -->
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/AbstractMetricsEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/AbstractMetricsEndpoint.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/AbstractMetricsEndpoint.java
new file mode 100644
index 0000000..594e0c3
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/AbstractMetricsEndpoint.java
@@ -0,0 +1,53 @@
+/**
+ * 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.camel.component.metrics;
+
+import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.impl.DefaultEndpoint;
+
+
+public abstract class AbstractMetricsEndpoint extends DefaultEndpoint {
+
+ protected final MetricRegistry registry;
+ protected final String metricsName;
+
+ public AbstractMetricsEndpoint(MetricRegistry registry, String metricsName) {
+ this.registry = registry;
+ this.metricsName = metricsName;
+ }
+
+ @Override
+ public Consumer createConsumer(Processor processor) throws Exception {
+ throw new RuntimeCamelException("Cannot consume from " + getClass().getSimpleName() + ": " + getEndpointUri());
+ }
+
+ @Override
+ public boolean isSingleton() {
+ return false;
+ }
+
+ public MetricRegistry getRegistry() {
+ return registry;
+ }
+
+ public String getMetricsName() {
+ return metricsName;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/AbstractMetricsProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/AbstractMetricsProducer.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/AbstractMetricsProducer.java
new file mode 100644
index 0000000..539847a
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/AbstractMetricsProducer.java
@@ -0,0 +1,72 @@
+/**
+ * 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.camel.component.metrics;
+
+import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public abstract class AbstractMetricsProducer<T extends AbstractMetricsEndpoint> extends DefaultProducer {
+
+ public static final String HEADER_PATTERN = MetricsComponent.HEADER_PERFIX + "*";
+ private static final Logger LOG = LoggerFactory.getLogger(AbstractMetricsProducer.class);
+
+ public AbstractMetricsProducer(T endpoint) {
+ super(endpoint);
+ }
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ @SuppressWarnings("unchecked")
+ T endpoint = (T) getEndpoint();
+ Message in = exchange.getIn();
+ String defaultMetricsName = endpoint.getMetricsName();
+ String finalMetricsName = getMetricsName(in, defaultMetricsName);
+ MetricRegistry registry = endpoint.getRegistry();
+ try {
+ doProcess(exchange, endpoint, registry, finalMetricsName);
+ } catch (Exception e) {
+ LOG.warn("Failed to produce metrics for {} in {} - {}", new Object[] {
+ finalMetricsName, getClass().getSimpleName(), e.getMessage() });
+ }
+ clearMetricsHeaders(in);
+ }
+
+ protected abstract void doProcess(Exchange exchange, T endpoint, MetricRegistry registry, String metricsName) throws Exception;
+
+ public String getMetricsName(Message in, String defaultValue) {
+ return getStringHeader(in, MetricsComponent.HEADER_METRIC_NAME, defaultValue);
+ }
+
+ public String getStringHeader(Message in, String header, String defaultValue) {
+ String headerValue = in.getHeader(header, String.class);
+ return ObjectHelper.isNotEmpty(headerValue) ? headerValue : defaultValue;
+ }
+
+ public Long getLongHeader(Message in, String header, Long defaultValue) {
+ return in.getHeader(header, defaultValue, Long.class);
+ }
+
+ protected boolean clearMetricsHeaders(Message in) {
+ return in.removeHeaders(HEADER_PATTERN);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsComponent.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsComponent.java
new file mode 100644
index 0000000..bb2813a
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsComponent.java
@@ -0,0 +1,134 @@
+/**
+ * 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.camel.component.metrics;
+
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Slf4jReporter;
+import org.apache.camel.Endpoint;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.component.metrics.counter.CounterEndpoint;
+import org.apache.camel.component.metrics.histogram.HistogramEndpoint;
+import org.apache.camel.component.metrics.meter.MeterEndpoint;
+import org.apache.camel.component.metrics.timer.TimerEndpoint;
+import org.apache.camel.spi.Registry;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Represents the component that manages {@link MetricsEndpoint}.
+ */
+public class MetricsComponent extends DefaultComponent {
+
+ public static final String METRIC_REGISTRY_NAME = "metricRegistry";
+ public static final MetricsType DEFAULT_METRICS_TYPE = MetricsType.METER;
+ public static final long DEFAULT_REPORTING_INTERVAL_SECONDS = 60L;
+ public static final String HEADER_PERFIX = "CamelMetrics";
+ public static final String HEADER_METRIC_NAME = HEADER_PERFIX + "Name";
+ public static final String HEADER_COUNTER_INCREMENT = HEADER_PERFIX + "CounterIncrement";
+ public static final String HEADER_COUNTER_DECREMENT = HEADER_PERFIX + "CounterDecrement";
+ public static final String HEADER_HISTOGRAM_VALUE = HEADER_PERFIX + "HistogramValue";
+ public static final String HEADER_METER_MARK = HEADER_PERFIX + "MeterMark";
+ public static final String HEADER_TIMER_ACTION = HEADER_PERFIX + "TimerAction";
+
+ private static final Logger LOG = LoggerFactory.getLogger(MetricsComponent.class);
+
+ private MetricRegistry metricRegistry;
+
+ @Override
+ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+ if (metricRegistry == null) {
+ Registry camelRegistry = getCamelContext().getRegistry();
+ metricRegistry = getOrCreateMetricRegistry(camelRegistry, METRIC_REGISTRY_NAME);
+ }
+ String metricsName = getMetricsName(remaining);
+ MetricsType metricsType = getMetricsType(remaining);
+ LOG.info("Metrics type: {}; name: {}", metricsType, metricsName);
+ Endpoint endpoint = createNewEndpoint(metricRegistry, metricsType, metricsName);
+ setProperties(endpoint, parameters);
+ return endpoint;
+ }
+
+ String getMetricsName(String remaining) {
+ String name = ObjectHelper.after(remaining, ":");
+ return name == null ? remaining : name;
+ }
+
+ Endpoint createNewEndpoint(MetricRegistry registry, MetricsType type, String metricsName) {
+ Endpoint endpoint;
+ switch (type) {
+ case COUNTER:
+ endpoint = new CounterEndpoint(registry, metricsName);
+ break;
+ case METER:
+ endpoint = new MeterEndpoint(registry, metricsName);
+ break;
+ case HISTOGRAM:
+ endpoint = new HistogramEndpoint(registry, metricsName);
+ break;
+ case TIMER:
+ endpoint = new TimerEndpoint(registry, metricsName);
+ break;
+ default:
+ throw new RuntimeCamelException("Metrics type \"" + type.toString() + "\" not supported");
+ }
+ return endpoint;
+ }
+
+ MetricsType getMetricsType(String remaining) {
+ String name = ObjectHelper.before(remaining, ":");
+ MetricsType type;
+ if (name == null) {
+ type = DEFAULT_METRICS_TYPE;
+ } else {
+ type = MetricsType.getByName(name);
+ }
+ if (type == null) {
+ throw new RuntimeCamelException("Unknown metrics type \"" + name + "\"");
+ }
+ return type;
+ }
+
+ MetricRegistry getOrCreateMetricRegistry(Registry camelRegistry, String registryName) {
+ LOG.debug("Looking up MetricRegistry from Camel Registry for name \"{}\"", registryName);
+ MetricRegistry result = getMetricRegistryFromCamelRegistry(camelRegistry, registryName);
+ if (result == null) {
+ LOG.debug("MetricRegistry not found from Camel Registry for name \"{}\"", registryName);
+ LOG.info("Creating new default MetricRegistry");
+ result = createMetricRegistry();
+ }
+ return result;
+ }
+
+ MetricRegistry getMetricRegistryFromCamelRegistry(Registry camelRegistry, String registryName) {
+ return camelRegistry.lookupByNameAndType(registryName, MetricRegistry.class);
+ }
+
+ MetricRegistry createMetricRegistry() {
+ MetricRegistry registry = new MetricRegistry();
+ final Slf4jReporter reporter = Slf4jReporter.forRegistry(registry)
+ .outputTo(LOG)
+ .convertRatesTo(TimeUnit.SECONDS)
+ .convertDurationsTo(TimeUnit.MILLISECONDS)
+ .build();
+ reporter.start(DEFAULT_REPORTING_INTERVAL_SECONDS, TimeUnit.SECONDS);
+ return registry;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsType.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsType.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsType.java
new file mode 100644
index 0000000..3348578
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsType.java
@@ -0,0 +1,53 @@
+/**
+ * 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.camel.component.metrics;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+public enum MetricsType {
+
+ GAUGE("gauge"),
+ COUNTER("counter"),
+ HISTOGRAM("histogram"),
+ METER("meter"),
+ TIMER("timer");
+
+ private static final Map<String, MetricsType> MAP = new HashMap<String, MetricsType>();
+
+ private final String name;
+
+ static {
+ for (MetricsType type : EnumSet.allOf(MetricsType.class)) {
+ MAP.put(type.name, type);
+ }
+ }
+
+ private MetricsType(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
+ public static MetricsType getByName(String name) {
+ return MAP.get(name);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/counter/CounterEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/counter/CounterEndpoint.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/counter/CounterEndpoint.java
new file mode 100644
index 0000000..2eae8f2
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/counter/CounterEndpoint.java
@@ -0,0 +1,66 @@
+/**
+ * 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.camel.component.metrics.counter;
+
+import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.Producer;
+import org.apache.camel.component.metrics.AbstractMetricsEndpoint;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+
+
+@UriEndpoint(scheme = "metrics")
+public class CounterEndpoint extends AbstractMetricsEndpoint {
+
+ public static final String ENDPOINT_URI = "metrics:counter";
+
+ @UriParam
+ private Long increment;
+
+ @UriParam
+ private Long decrement;
+
+ public CounterEndpoint(MetricRegistry registry, String metricsName) {
+ super(registry, metricsName);
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ return new CounterProducer(this);
+ }
+
+ public Long getIncrement() {
+ return increment;
+ }
+
+ public void setIncrement(Long increment) {
+ this.increment = increment;
+ }
+
+ public Long getDecrement() {
+ return decrement;
+ }
+
+ public void setDecrement(Long decrement) {
+ this.decrement = decrement;
+ }
+
+ @Override
+ protected String createEndpointUri() {
+ return ENDPOINT_URI;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/counter/CounterProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/counter/CounterProducer.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/counter/CounterProducer.java
new file mode 100644
index 0000000..5a9dd42
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/counter/CounterProducer.java
@@ -0,0 +1,51 @@
+/**
+ * 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.camel.component.metrics.counter;
+
+
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.component.metrics.AbstractMetricsProducer;
+import static org.apache.camel.component.metrics.MetricsComponent.HEADER_COUNTER_DECREMENT;
+import static org.apache.camel.component.metrics.MetricsComponent.HEADER_COUNTER_INCREMENT;
+
+
+public class CounterProducer extends AbstractMetricsProducer<CounterEndpoint> {
+
+ public CounterProducer(CounterEndpoint endpoint) {
+ super(endpoint);
+ }
+
+ @Override
+ protected void doProcess(Exchange exchange, CounterEndpoint endpoint, MetricRegistry registry, String metricsName) throws Exception {
+ Message in = exchange.getIn();
+ Counter counter = registry.counter(metricsName);
+ Long increment = endpoint.getIncrement();
+ Long decrement = endpoint.getDecrement();
+ Long finalIncrement = getLongHeader(in, HEADER_COUNTER_INCREMENT, increment);
+ Long finalDecrement = getLongHeader(in, HEADER_COUNTER_DECREMENT, decrement);
+ if (finalIncrement != null) {
+ counter.inc(finalIncrement);
+ } else if (finalDecrement != null) {
+ counter.dec(finalDecrement);
+ } else {
+ counter.inc();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/histogram/HistogramEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/histogram/HistogramEndpoint.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/histogram/HistogramEndpoint.java
new file mode 100644
index 0000000..bf7ce6c
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/histogram/HistogramEndpoint.java
@@ -0,0 +1,55 @@
+/**
+ * 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.camel.component.metrics.histogram;
+
+import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.Producer;
+import org.apache.camel.component.metrics.AbstractMetricsEndpoint;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+
+
+@UriEndpoint(scheme = "metrics")
+public class HistogramEndpoint extends AbstractMetricsEndpoint {
+
+ public static final String ENDPOINT_URI = "metrics:histogram";
+
+ @UriParam
+ private Long value;
+
+ public HistogramEndpoint(MetricRegistry registry, String metricsName) {
+ super(registry, metricsName);
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ return new HistogramProducer(this);
+ }
+
+ public Long getValue() {
+ return value;
+ }
+
+ public void setValue(Long value) {
+ this.value = value;
+ }
+
+ @Override
+ protected String createEndpointUri() {
+ return ENDPOINT_URI;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/histogram/HistogramProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/histogram/HistogramProducer.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/histogram/HistogramProducer.java
new file mode 100644
index 0000000..161da92
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/histogram/HistogramProducer.java
@@ -0,0 +1,49 @@
+/**
+ * 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.camel.component.metrics.histogram;
+
+
+import com.codahale.metrics.Histogram;
+import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.component.metrics.AbstractMetricsProducer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static org.apache.camel.component.metrics.MetricsComponent.HEADER_HISTOGRAM_VALUE;
+
+public class HistogramProducer extends AbstractMetricsProducer<HistogramEndpoint> {
+
+ private static final Logger LOG = LoggerFactory.getLogger(HistogramProducer.class);
+
+ public HistogramProducer(HistogramEndpoint endpoint) {
+ super(endpoint);
+ }
+
+ @Override
+ protected void doProcess(Exchange exchange, HistogramEndpoint endpoint, MetricRegistry registry, String metricsName) throws Exception {
+ Message in = exchange.getIn();
+ Histogram histogram = registry.histogram(metricsName);
+ Long value = endpoint.getValue();
+ Long finalValue = getLongHeader(in, HEADER_HISTOGRAM_VALUE, value);
+ if (finalValue != null) {
+ histogram.update(finalValue);
+ } else {
+ LOG.warn("Cannot update histogram \"{}\" with null value", metricsName);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/meter/MeterEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/meter/MeterEndpoint.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/meter/MeterEndpoint.java
new file mode 100644
index 0000000..f376261
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/meter/MeterEndpoint.java
@@ -0,0 +1,55 @@
+/**
+ * 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.camel.component.metrics.meter;
+
+import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.Producer;
+import org.apache.camel.component.metrics.AbstractMetricsEndpoint;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+
+
+@UriEndpoint(scheme = "metrics")
+public class MeterEndpoint extends AbstractMetricsEndpoint {
+
+ public static final String ENDPOINT_URI = "metrics:meter";
+
+ @UriParam
+ private Long mark;
+
+ public MeterEndpoint(MetricRegistry registry, String metricsName) {
+ super(registry, metricsName);
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ return new MeterProducer(this);
+ }
+
+ public Long getMark() {
+ return mark;
+ }
+
+ public void setMark(Long mark) {
+ this.mark = mark;
+ }
+
+ @Override
+ protected String createEndpointUri() {
+ return ENDPOINT_URI;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/meter/MeterProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/meter/MeterProducer.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/meter/MeterProducer.java
new file mode 100644
index 0000000..b3474bb
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/meter/MeterProducer.java
@@ -0,0 +1,44 @@
+/**
+ * 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.camel.component.metrics.meter;
+
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.component.metrics.AbstractMetricsProducer;
+import static org.apache.camel.component.metrics.MetricsComponent.HEADER_METER_MARK;
+
+public class MeterProducer extends AbstractMetricsProducer<MeterEndpoint> {
+
+ public MeterProducer(MeterEndpoint endpoint) {
+ super(endpoint);
+ }
+
+ @Override
+ protected void doProcess(Exchange exchange, MeterEndpoint endpoint, MetricRegistry registry, String metricsName) throws Exception {
+ Message in = exchange.getIn();
+ Meter meter = registry.meter(metricsName);
+ Long mark = endpoint.getMark();
+ Long finalMark = getLongHeader(in, HEADER_METER_MARK, mark);
+ if (finalMark == null) {
+ meter.mark();
+ } else {
+ meter.mark(finalMark);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/timer/TimerEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/timer/TimerEndpoint.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/timer/TimerEndpoint.java
new file mode 100644
index 0000000..f1591a0
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/timer/TimerEndpoint.java
@@ -0,0 +1,59 @@
+/**
+ * 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.camel.component.metrics.timer;
+
+import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.Producer;
+import org.apache.camel.component.metrics.AbstractMetricsEndpoint;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+
+@UriEndpoint(scheme = "metrics")
+public class TimerEndpoint extends AbstractMetricsEndpoint {
+
+ public static final String ENDPOINT_URI = "metrics:timer";
+
+ public enum TimerAction {
+ start,
+ stop;
+ }
+
+ @UriParam
+ private TimerAction action;
+
+ public TimerEndpoint(MetricRegistry registry, String metricsName) {
+ super(registry, metricsName);
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ return new TimerProducer(this);
+ }
+
+ public TimerAction getAction() {
+ return action;
+ }
+
+ public void setAction(TimerAction action) {
+ this.action = action;
+ }
+
+ @Override
+ protected String createEndpointUri() {
+ return ENDPOINT_URI;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/timer/TimerProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/timer/TimerProducer.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/timer/TimerProducer.java
new file mode 100644
index 0000000..57cf471
--- /dev/null
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/timer/TimerProducer.java
@@ -0,0 +1,85 @@
+/**
+ * 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.camel.component.metrics.timer;
+
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Timer;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.component.metrics.AbstractMetricsProducer;
+import org.apache.camel.component.metrics.timer.TimerEndpoint.TimerAction;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static org.apache.camel.component.metrics.MetricsComponent.HEADER_TIMER_ACTION;
+import static org.apache.camel.component.metrics.timer.TimerEndpoint.ENDPOINT_URI;
+
+public class TimerProducer extends AbstractMetricsProducer<TimerEndpoint> {
+
+ private static final Logger LOG = LoggerFactory.getLogger(TimerProducer.class);
+
+ public TimerProducer(TimerEndpoint endpoint) {
+ super(endpoint);
+ }
+
+ @Override
+ protected void doProcess(Exchange exchange, TimerEndpoint endpoint, MetricRegistry registry, String metricsName) throws Exception {
+ Message in = exchange.getIn();
+ TimerAction action = endpoint.getAction();
+ TimerAction finalAction = in.getHeader(HEADER_TIMER_ACTION, action, TimerAction.class);
+ if (finalAction == TimerAction.start) {
+ handleStart(exchange, registry, metricsName);
+ } else if (finalAction == TimerAction.stop) {
+ handleStop(exchange, registry, metricsName);
+ } else {
+ LOG.warn("No action provided for timer \"{}\"", metricsName);
+ }
+ }
+
+ void handleStart(Exchange exchange, MetricRegistry registry, String metricsName) {
+ String propertyName = getPropertyName(metricsName);
+ Timer.Context context = getTimerContextFromExchange(exchange, propertyName);
+ if (context == null) {
+ Timer timer = registry.timer(metricsName);
+ context = timer.time();
+ exchange.setProperty(propertyName, context);
+ } else {
+ LOG.warn("Timer \"{}\" already running", metricsName);
+ }
+ }
+
+ void handleStop(Exchange exchange, MetricRegistry registry, String metricsName) {
+ String propertyName = getPropertyName(metricsName);
+ Timer.Context context = getTimerContextFromExchange(exchange, propertyName);
+ if (context != null) {
+ context.stop();
+ exchange.removeProperty(propertyName);
+ } else {
+ LOG.warn("Timer \"{}\" not found", metricsName);
+ }
+ }
+
+ String getPropertyName(String metricsName) {
+ return new StringBuilder(ENDPOINT_URI)
+ .append(":")
+ .append(metricsName)
+ .toString();
+ }
+
+ Timer.Context getTimerContextFromExchange(Exchange exchange, String propertyName) {
+ return exchange.getProperty(propertyName, Timer.Context.class);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java
deleted file mode 100644
index f437846..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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.camel.metrics;
-
-import com.codahale.metrics.MetricRegistry;
-import org.apache.camel.Consumer;
-import org.apache.camel.Processor;
-import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.impl.DefaultEndpoint;
-
-
-public abstract class AbstractMetricsEndpoint extends DefaultEndpoint {
-
- protected final MetricRegistry registry;
- protected final String metricsName;
-
- public AbstractMetricsEndpoint(MetricRegistry registry, String metricsName) {
- this.registry = registry;
- this.metricsName = metricsName;
- }
-
- @Override
- public Consumer createConsumer(Processor processor) throws Exception {
- throw new RuntimeCamelException("Cannot consume from " + getClass().getSimpleName() + ": " + getEndpointUri());
- }
-
- @Override
- public boolean isSingleton() {
- return false;
- }
-
- public MetricRegistry getRegistry() {
- return registry;
- }
-
- public String getMetricsName() {
- return metricsName;
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/AbstractMetricsProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/AbstractMetricsProducer.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/AbstractMetricsProducer.java
deleted file mode 100644
index cd11447..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/AbstractMetricsProducer.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * 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.camel.metrics;
-
-import com.codahale.metrics.MetricRegistry;
-import org.apache.camel.Exchange;
-import org.apache.camel.Message;
-import org.apache.camel.impl.DefaultProducer;
-import org.apache.camel.util.ObjectHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import static org.apache.camel.metrics.MetricsComponent.HEADER_METRIC_NAME;
-import static org.apache.camel.metrics.MetricsComponent.HEADER_PERFIX;
-
-
-public abstract class AbstractMetricsProducer<T extends AbstractMetricsEndpoint> extends DefaultProducer {
-
- public static final String HEADER_PATTERN = HEADER_PERFIX + "*";
- private static final Logger LOG = LoggerFactory.getLogger(AbstractMetricsProducer.class);
-
- public AbstractMetricsProducer(T endpoint) {
- super(endpoint);
- }
-
- @Override
- public void process(Exchange exchange) throws Exception {
- @SuppressWarnings("unchecked")
- T endpoint = (T) getEndpoint();
- Message in = exchange.getIn();
- String defaultMetricsName = endpoint.getMetricsName();
- String finalMetricsName = getMetricsName(in, defaultMetricsName);
- MetricRegistry registry = endpoint.getRegistry();
- try {
- doProcess(exchange, endpoint, registry, finalMetricsName);
- } catch (Exception e) {
- LOG.warn("Failed to produce metrics for {} in {} - {}", new Object[] {
- finalMetricsName, getClass().getSimpleName(), e.getMessage() });
- }
- clearMetricsHeaders(in);
- }
-
- protected abstract void doProcess(Exchange exchange, T endpoint, MetricRegistry registry, String metricsName) throws Exception;
-
- public String getMetricsName(Message in, String defaultValue) {
- return getStringHeader(in, HEADER_METRIC_NAME, defaultValue);
- }
-
- public String getStringHeader(Message in, String header, String defaultValue) {
- String headerValue = in.getHeader(header, String.class);
- return ObjectHelper.isNotEmpty(headerValue) ? headerValue : defaultValue;
- }
-
- public Long getLongHeader(Message in, String header, Long defaultValue) {
- return in.getHeader(header, defaultValue, Long.class);
- }
-
- protected boolean clearMetricsHeaders(Message in) {
- return in.removeHeaders(HEADER_PATTERN);
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/MetricsComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/MetricsComponent.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/MetricsComponent.java
deleted file mode 100644
index b73626a..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/MetricsComponent.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- * 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.camel.metrics;
-
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import com.codahale.metrics.MetricRegistry;
-import com.codahale.metrics.Slf4jReporter;
-import org.apache.camel.Endpoint;
-import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.impl.DefaultComponent;
-import org.apache.camel.metrics.counter.CounterEndpoint;
-import org.apache.camel.metrics.histogram.HistogramEndpoint;
-import org.apache.camel.metrics.meter.MeterEndpoint;
-import org.apache.camel.metrics.timer.TimerEndpoint;
-import org.apache.camel.spi.Registry;
-import org.apache.camel.util.ObjectHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Represents the component that manages {@link MetricsEndpoint}.
- */
-public class MetricsComponent extends DefaultComponent {
-
- public static final String METRIC_REGISTRY_NAME = "metricRegistry";
- public static final MetricsType DEFAULT_METRICS_TYPE = MetricsType.METER;
- public static final long DEFAULT_REPORTING_INTERVAL_SECONDS = 60L;
- public static final String HEADER_PERFIX = "CamelMetrics";
- public static final String HEADER_METRIC_NAME = HEADER_PERFIX + "Name";
- public static final String HEADER_COUNTER_INCREMENT = HEADER_PERFIX + "CounterIncrement";
- public static final String HEADER_COUNTER_DECREMENT = HEADER_PERFIX + "CounterDecrement";
- public static final String HEADER_HISTOGRAM_VALUE = HEADER_PERFIX + "HistogramValue";
- public static final String HEADER_METER_MARK = HEADER_PERFIX + "MeterMark";
- public static final String HEADER_TIMER_ACTION = HEADER_PERFIX + "TimerAction";
-
- private static final Logger LOG = LoggerFactory.getLogger(MetricsComponent.class);
-
- private MetricRegistry metricRegistry;
-
- @Override
- protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
- if (metricRegistry == null) {
- Registry camelRegistry = getCamelContext().getRegistry();
- metricRegistry = getOrCreateMetricRegistry(camelRegistry, METRIC_REGISTRY_NAME);
- }
- String metricsName = getMetricsName(remaining);
- MetricsType metricsType = getMetricsType(remaining);
- LOG.info("Metrics type: {}; name: {}", metricsType, metricsName);
- Endpoint endpoint = createNewEndpoint(metricRegistry, metricsType, metricsName);
- setProperties(endpoint, parameters);
- return endpoint;
- }
-
- String getMetricsName(String remaining) {
- String name = ObjectHelper.after(remaining, ":");
- return name == null ? remaining : name;
- }
-
- Endpoint createNewEndpoint(MetricRegistry registry, MetricsType type, String metricsName) {
- Endpoint endpoint;
- switch (type) {
- case COUNTER:
- endpoint = new CounterEndpoint(registry, metricsName);
- break;
- case METER:
- endpoint = new MeterEndpoint(registry, metricsName);
- break;
- case HISTOGRAM:
- endpoint = new HistogramEndpoint(registry, metricsName);
- break;
- case TIMER:
- endpoint = new TimerEndpoint(registry, metricsName);
- break;
- default:
- throw new RuntimeCamelException("Metrics type \"" + type.toString() + "\" not supported");
- }
- return endpoint;
- }
-
- MetricsType getMetricsType(String remaining) {
- String name = ObjectHelper.before(remaining, ":");
- MetricsType type;
- if (name == null) {
- type = DEFAULT_METRICS_TYPE;
- } else {
- type = MetricsType.getByName(name);
- }
- if (type == null) {
- throw new RuntimeCamelException("Unknown metrics type \"" + name + "\"");
- }
- return type;
- }
-
- MetricRegistry getOrCreateMetricRegistry(Registry camelRegistry, String registryName) {
- LOG.debug("Looking up MetricRegistry from Camel Registry for name \"{}\"", registryName);
- MetricRegistry result = getMetricRegistryFromCamelRegistry(camelRegistry, registryName);
- if (result == null) {
- LOG.debug("MetricRegistry not found from Camel Registry for name \"{}\"", registryName);
- LOG.info("Creating new default MetricRegistry");
- result = createMetricRegistry();
- }
- return result;
- }
-
- MetricRegistry getMetricRegistryFromCamelRegistry(Registry camelRegistry, String registryName) {
- return camelRegistry.lookupByNameAndType(registryName, MetricRegistry.class);
- }
-
- MetricRegistry createMetricRegistry() {
- MetricRegistry registry = new MetricRegistry();
- final Slf4jReporter reporter = Slf4jReporter.forRegistry(registry)
- .outputTo(LOG)
- .convertRatesTo(TimeUnit.SECONDS)
- .convertDurationsTo(TimeUnit.MILLISECONDS)
- .build();
- reporter.start(DEFAULT_REPORTING_INTERVAL_SECONDS, TimeUnit.SECONDS);
- return registry;
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/MetricsType.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/MetricsType.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/MetricsType.java
deleted file mode 100644
index 760c794..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/MetricsType.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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.camel.metrics;
-
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.Map;
-
-public enum MetricsType {
-
- GAUGE("gauge"),
- COUNTER("counter"),
- HISTOGRAM("histogram"),
- METER("meter"),
- TIMER("timer");
-
- private static final Map<String, MetricsType> MAP = new HashMap<String, MetricsType>();
-
- private final String name;
-
- static {
- for (MetricsType type : EnumSet.allOf(MetricsType.class)) {
- MAP.put(type.name, type);
- }
- }
-
- private MetricsType(String name) {
- this.name = name;
- }
-
- @Override
- public String toString() {
- return name;
- }
-
- public static MetricsType getByName(String name) {
- return MAP.get(name);
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/counter/CounterEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/counter/CounterEndpoint.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/counter/CounterEndpoint.java
deleted file mode 100644
index 406c21d..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/counter/CounterEndpoint.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * 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.camel.metrics.counter;
-
-import com.codahale.metrics.MetricRegistry;
-import org.apache.camel.Producer;
-import org.apache.camel.metrics.AbstractMetricsEndpoint;
-import org.apache.camel.spi.UriEndpoint;
-import org.apache.camel.spi.UriParam;
-
-
-@UriEndpoint(scheme = "metrics")
-public class CounterEndpoint extends AbstractMetricsEndpoint {
-
- public static final String ENDPOINT_URI = "metrics:counter";
-
- @UriParam
- private Long increment;
-
- @UriParam
- private Long decrement;
-
- public CounterEndpoint(MetricRegistry registry, String metricsName) {
- super(registry, metricsName);
- }
-
- @Override
- public Producer createProducer() throws Exception {
- return new CounterProducer(this);
- }
-
- public Long getIncrement() {
- return increment;
- }
-
- public void setIncrement(Long increment) {
- this.increment = increment;
- }
-
- public Long getDecrement() {
- return decrement;
- }
-
- public void setDecrement(Long decrement) {
- this.decrement = decrement;
- }
-
- @Override
- protected String createEndpointUri() {
- return ENDPOINT_URI;
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java
deleted file mode 100644
index bdabba3..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * 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.camel.metrics.counter;
-
-
-import com.codahale.metrics.Counter;
-import com.codahale.metrics.MetricRegistry;
-import org.apache.camel.Exchange;
-import org.apache.camel.Message;
-import org.apache.camel.metrics.AbstractMetricsProducer;
-import static org.apache.camel.metrics.MetricsComponent.HEADER_COUNTER_DECREMENT;
-import static org.apache.camel.metrics.MetricsComponent.HEADER_COUNTER_INCREMENT;
-
-
-public class CounterProducer extends AbstractMetricsProducer<CounterEndpoint> {
-
- public CounterProducer(CounterEndpoint endpoint) {
- super(endpoint);
- }
-
- @Override
- protected void doProcess(Exchange exchange, CounterEndpoint endpoint, MetricRegistry registry, String metricsName) throws Exception {
- Message in = exchange.getIn();
- Counter counter = registry.counter(metricsName);
- Long increment = endpoint.getIncrement();
- Long decrement = endpoint.getDecrement();
- Long finalIncrement = getLongHeader(in, HEADER_COUNTER_INCREMENT, increment);
- Long finalDecrement = getLongHeader(in, HEADER_COUNTER_DECREMENT, decrement);
- if (finalIncrement != null) {
- counter.inc(finalIncrement);
- } else if (finalDecrement != null) {
- counter.dec(finalDecrement);
- } else {
- counter.inc();
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/histogram/HistogramEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/histogram/HistogramEndpoint.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/histogram/HistogramEndpoint.java
deleted file mode 100644
index fad53c0..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/histogram/HistogramEndpoint.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 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.camel.metrics.histogram;
-
-import com.codahale.metrics.MetricRegistry;
-import org.apache.camel.Producer;
-import org.apache.camel.metrics.AbstractMetricsEndpoint;
-import org.apache.camel.spi.UriEndpoint;
-import org.apache.camel.spi.UriParam;
-
-
-@UriEndpoint(scheme = "metrics")
-public class HistogramEndpoint extends AbstractMetricsEndpoint {
-
- public static final String ENDPOINT_URI = "metrics:histogram";
-
- @UriParam
- private Long value;
-
- public HistogramEndpoint(MetricRegistry registry, String metricsName) {
- super(registry, metricsName);
- }
-
- @Override
- public Producer createProducer() throws Exception {
- return new HistogramProducer(this);
- }
-
- public Long getValue() {
- return value;
- }
-
- public void setValue(Long value) {
- this.value = value;
- }
-
- @Override
- protected String createEndpointUri() {
- return ENDPOINT_URI;
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
deleted file mode 100644
index b29505a..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 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.camel.metrics.histogram;
-
-
-import com.codahale.metrics.Histogram;
-import com.codahale.metrics.MetricRegistry;
-import org.apache.camel.Exchange;
-import org.apache.camel.Message;
-import org.apache.camel.metrics.AbstractMetricsProducer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import static org.apache.camel.metrics.MetricsComponent.HEADER_HISTOGRAM_VALUE;
-
-public class HistogramProducer extends AbstractMetricsProducer<HistogramEndpoint> {
-
- private static final Logger LOG = LoggerFactory.getLogger(HistogramProducer.class);
-
- public HistogramProducer(HistogramEndpoint endpoint) {
- super(endpoint);
- }
-
- @Override
- protected void doProcess(Exchange exchange, HistogramEndpoint endpoint, MetricRegistry registry, String metricsName) throws Exception {
- Message in = exchange.getIn();
- Histogram histogram = registry.histogram(metricsName);
- Long value = endpoint.getValue();
- Long finalValue = getLongHeader(in, HEADER_HISTOGRAM_VALUE, value);
- if (finalValue != null) {
- histogram.update(finalValue);
- } else {
- LOG.warn("Cannot update histogram \"{}\" with null value", metricsName);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/meter/MeterEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/meter/MeterEndpoint.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/meter/MeterEndpoint.java
deleted file mode 100644
index 84c6316..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/meter/MeterEndpoint.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 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.camel.metrics.meter;
-
-import com.codahale.metrics.MetricRegistry;
-import org.apache.camel.Producer;
-import org.apache.camel.metrics.AbstractMetricsEndpoint;
-import org.apache.camel.spi.UriEndpoint;
-import org.apache.camel.spi.UriParam;
-
-
-@UriEndpoint(scheme = "metrics")
-public class MeterEndpoint extends AbstractMetricsEndpoint {
-
- public static final String ENDPOINT_URI = "metrics:meter";
-
- @UriParam
- private Long mark;
-
- public MeterEndpoint(MetricRegistry registry, String metricsName) {
- super(registry, metricsName);
- }
-
- @Override
- public Producer createProducer() throws Exception {
- return new MeterProducer(this);
- }
-
- public Long getMark() {
- return mark;
- }
-
- public void setMark(Long mark) {
- this.mark = mark;
- }
-
- @Override
- protected String createEndpointUri() {
- return ENDPOINT_URI;
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java
deleted file mode 100644
index 686b198..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 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.camel.metrics.meter;
-
-import com.codahale.metrics.Meter;
-import com.codahale.metrics.MetricRegistry;
-import org.apache.camel.Exchange;
-import org.apache.camel.Message;
-import org.apache.camel.metrics.AbstractMetricsProducer;
-import static org.apache.camel.metrics.MetricsComponent.HEADER_METER_MARK;
-
-public class MeterProducer extends AbstractMetricsProducer<MeterEndpoint> {
-
- public MeterProducer(MeterEndpoint endpoint) {
- super(endpoint);
- }
-
- @Override
- protected void doProcess(Exchange exchange, MeterEndpoint endpoint, MetricRegistry registry, String metricsName) throws Exception {
- Message in = exchange.getIn();
- Meter meter = registry.meter(metricsName);
- Long mark = endpoint.getMark();
- Long finalMark = getLongHeader(in, HEADER_METER_MARK, mark);
- if (finalMark == null) {
- meter.mark();
- } else {
- meter.mark(finalMark);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/timer/TimerEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/timer/TimerEndpoint.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/timer/TimerEndpoint.java
deleted file mode 100644
index 10bc25f..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/timer/TimerEndpoint.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 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.camel.metrics.timer;
-
-import com.codahale.metrics.MetricRegistry;
-import org.apache.camel.Producer;
-import org.apache.camel.metrics.AbstractMetricsEndpoint;
-import org.apache.camel.spi.UriEndpoint;
-import org.apache.camel.spi.UriParam;
-
-@UriEndpoint(scheme = "metrics")
-public class TimerEndpoint extends AbstractMetricsEndpoint {
-
- public static final String ENDPOINT_URI = "metrics:timer";
-
- public enum TimerAction {
- start,
- stop;
- }
-
- @UriParam
- private TimerAction action;
-
- public TimerEndpoint(MetricRegistry registry, String metricsName) {
- super(registry, metricsName);
- }
-
- @Override
- public Producer createProducer() throws Exception {
- return new TimerProducer(this);
- }
-
- public TimerAction getAction() {
- return action;
- }
-
- public void setAction(TimerAction action) {
- this.action = action;
- }
-
- @Override
- protected String createEndpointUri() {
- return ENDPOINT_URI;
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java b/components/camel-metrics/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java
deleted file mode 100644
index d12726e..0000000
--- a/components/camel-metrics/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * 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.camel.metrics.timer;
-
-import com.codahale.metrics.MetricRegistry;
-import com.codahale.metrics.Timer;
-import org.apache.camel.Exchange;
-import org.apache.camel.Message;
-import org.apache.camel.metrics.AbstractMetricsProducer;
-import org.apache.camel.metrics.timer.TimerEndpoint.TimerAction;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import static org.apache.camel.metrics.MetricsComponent.HEADER_TIMER_ACTION;
-import static org.apache.camel.metrics.timer.TimerEndpoint.ENDPOINT_URI;
-
-public class TimerProducer extends AbstractMetricsProducer<TimerEndpoint> {
-
- private static final Logger LOG = LoggerFactory.getLogger(TimerProducer.class);
-
- public TimerProducer(TimerEndpoint endpoint) {
- super(endpoint);
- }
-
- @Override
- protected void doProcess(Exchange exchange, TimerEndpoint endpoint, MetricRegistry registry, String metricsName) throws Exception {
- Message in = exchange.getIn();
- TimerAction action = endpoint.getAction();
- TimerAction finalAction = in.getHeader(HEADER_TIMER_ACTION, action, TimerAction.class);
- if (finalAction == TimerAction.start) {
- handleStart(exchange, registry, metricsName);
- } else if (finalAction == TimerAction.stop) {
- handleStop(exchange, registry, metricsName);
- } else {
- LOG.warn("No action provided for timer \"{}\"", metricsName);
- }
- }
-
- void handleStart(Exchange exchange, MetricRegistry registry, String metricsName) {
- String propertyName = getPropertyName(metricsName);
- Timer.Context context = getTimerContextFromExchange(exchange, propertyName);
- if (context == null) {
- Timer timer = registry.timer(metricsName);
- context = timer.time();
- exchange.setProperty(propertyName, context);
- } else {
- LOG.warn("Timer \"{}\" already running", metricsName);
- }
- }
-
- void handleStop(Exchange exchange, MetricRegistry registry, String metricsName) {
- String propertyName = getPropertyName(metricsName);
- Timer.Context context = getTimerContextFromExchange(exchange, propertyName);
- if (context != null) {
- context.stop();
- exchange.removeProperty(propertyName);
- } else {
- LOG.warn("Timer \"{}\" not found", metricsName);
- }
- }
-
- String getPropertyName(String metricsName) {
- return new StringBuilder(ENDPOINT_URI)
- .append(":")
- .append(metricsName)
- .toString();
- }
-
- Timer.Context getTimerContextFromExchange(Exchange exchange, String propertyName) {
- return exchange.getProperty(propertyName, Timer.Context.class);
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/acf0fa39/components/camel-metrics/src/main/resources/META-INF/services/org/apache/camel/component/metrics
----------------------------------------------------------------------
diff --git a/components/camel-metrics/src/main/resources/META-INF/services/org/apache/camel/component/metrics b/components/camel-metrics/src/main/resources/META-INF/services/org/apache/camel/component/metrics
index debbe31..6701de5 100644
--- a/components/camel-metrics/src/main/resources/META-INF/services/org/apache/camel/component/metrics
+++ b/components/camel-metrics/src/main/resources/META-INF/services/org/apache/camel/component/metrics
@@ -1 +1,18 @@
-class=org.apache.camel.metrics.MetricsComponent
+#
+# 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.
+#
+
+class=org.apache.camel.component.metrics.MetricsComponent