You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by an...@apache.org on 2015/04/24 21:26:44 UTC
karaf-decanter git commit: [KARAF-3697] - Decanter: Camel collector
Repository: karaf-decanter
Updated Branches:
refs/heads/master a142a9906 -> ccdd75ad0
[KARAF-3697] - Decanter: Camel collector
Project: http://git-wip-us.apache.org/repos/asf/karaf-decanter/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-decanter/commit/ccdd75ad
Tree: http://git-wip-us.apache.org/repos/asf/karaf-decanter/tree/ccdd75ad
Diff: http://git-wip-us.apache.org/repos/asf/karaf-decanter/diff/ccdd75ad
Branch: refs/heads/master
Commit: ccdd75ad0d98cbca0a815bf74261123e3f4d4389
Parents: a142a99
Author: anierbeck <bc...@googlemail.com>
Authored: Fri Apr 24 21:26:32 2015 +0200
Committer: anierbeck <bc...@googlemail.com>
Committed: Fri Apr 24 21:26:32 2015 +0200
----------------------------------------------------------------------
assembly/src/main/feature/feature.xml | 5 +
collector/camel/.gitignore | 1 +
collector/camel/pom.xml | 81 +++++++++++++
.../decanter/collector/camel/Activator.java | 43 +++++++
.../collector/camel/CamelCollector.java | 117 +++++++++++++++++++
.../decanter/collector/jmx/JmxCollector.java | 2 +
collector/pom.xml | 1 +
7 files changed, 250 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/ccdd75ad/assembly/src/main/feature/feature.xml
----------------------------------------------------------------------
diff --git a/assembly/src/main/feature/feature.xml b/assembly/src/main/feature/feature.xml
index 1cc46b0..4920b26 100644
--- a/assembly/src/main/feature/feature.xml
+++ b/assembly/src/main/feature/feature.xml
@@ -38,6 +38,11 @@
<bundle>mvn:org.apache.karaf.decanter.collector/org.apache.karaf.decanter.collector.jmx/${project.version}</bundle>
</feature>
+ <feature name="decanter-collector-camel" version="${project.version}" description="Karaf Decanter Camel Collector">
+ <feature version="${project.version}">decanter-common</feature>
+ <bundle>mvn:org.apache.karaf.decanter.collector/org.apache.karaf.decanter.collector.camel/${project.version}</bundle>
+ </feature>
+
<feature name="decanter-appender-log" version="${project.version}" description="Karaf Decanter Log Appender">
<feature version="${project.version}">decanter-common</feature>
<bundle>mvn:org.apache.karaf.decanter.appender/org.apache.karaf.decanter.appender.log/${project.version}</bundle>
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/ccdd75ad/collector/camel/.gitignore
----------------------------------------------------------------------
diff --git a/collector/camel/.gitignore b/collector/camel/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/collector/camel/.gitignore
@@ -0,0 +1 @@
+/target/
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/ccdd75ad/collector/camel/pom.xml
----------------------------------------------------------------------
diff --git a/collector/camel/pom.xml b/collector/camel/pom.xml
new file mode 100644
index 0000000..f6702e0
--- /dev/null
+++ b/collector/camel/pom.xml
@@ -0,0 +1,81 @@
+<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/xsd/maven-4.0.0.xsd">
+
+ <!-- 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. -->
+
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.karaf.decanter</groupId>
+ <artifactId>org.apache.karaf.decanter.collector</artifactId>
+ <version>3.0.0-SNAPSHOT</version>
+ </parent>
+ <groupId>org.apache.karaf.decanter.collector</groupId>
+ <artifactId>org.apache.karaf.decanter.collector.camel</artifactId>
+ <packaging>bundle</packaging>
+ <name>Apache Karaf :: Decanter :: Collector :: Camel</name>
+
+ <dependencies>
+
+ <!-- Decanter API -->
+ <dependency>
+ <groupId>org.apache.karaf.decanter</groupId>
+ <artifactId>org.apache.karaf.decanter.api</artifactId>
+ </dependency>
+
+ <!-- OSGi -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+
+ <!-- SLF4J -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+
+ <!-- Test dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <inherited>true</inherited>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+ <Bundle-Version>${project.version}</Bundle-Version>
+ <Bundle-Activator>org.apache.karaf.decanter.collector.camel.Activator</Bundle-Activator>
+ <Import-Package>
+ org.apache.karaf.decanter.api;version=${project.version},
+ org.slf4j;version="[1.7,2)";resolution:=optional,
+ *
+ </Import-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/ccdd75ad/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/Activator.java
----------------------------------------------------------------------
diff --git a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/Activator.java b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/Activator.java
new file mode 100644
index 0000000..9c559c3
--- /dev/null
+++ b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/Activator.java
@@ -0,0 +1,43 @@
+package org.apache.karaf.decanter.collector.camel;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.event.EventAdmin;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator implements BundleActivator {
+
+ private ServiceTracker<EventAdmin, ServiceRegistration> tracker;
+
+ public void start(final BundleContext bundleContext) throws Exception {
+ tracker = new ServiceTracker<EventAdmin, ServiceRegistration>(bundleContext, EventAdmin.class, null) {
+
+ @Override
+ public ServiceRegistration<?> addingService(ServiceReference<EventAdmin> reference) {
+ EventAdmin eventAdmin = bundleContext.getService(reference);
+ CamelCollector collector = new CamelCollector(eventAdmin);
+ Dictionary<String, String> properties = new Hashtable<String, String>();
+ properties.put("decanter.collector.name", "camel");
+ return bundleContext.registerService(Runnable.class, collector, properties);
+ }
+
+ @Override
+ public void removedService(ServiceReference<EventAdmin> reference, ServiceRegistration reg) {
+ reg.unregister();
+ super.removedService(reference, reg);
+ }
+
+ };
+ tracker.open();
+ }
+
+ public void stop(BundleContext bundleContext) throws Exception {
+ tracker.close();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/ccdd75ad/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelCollector.java
----------------------------------------------------------------------
diff --git a/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelCollector.java b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelCollector.java
new file mode 100644
index 0000000..b49535f
--- /dev/null
+++ b/collector/camel/src/main/java/org/apache/karaf/decanter/collector/camel/CamelCollector.java
@@ -0,0 +1,117 @@
+/*
+ * 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.karaf.decanter.collector.camel;
+
+import java.lang.management.ManagementFactory;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.management.openmbean.CompositeDataSupport;
+import javax.management.openmbean.CompositeType;
+
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventAdmin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Decanter Camel Pooling Collector
+ */
+public class CamelCollector implements Runnable {
+
+ private final static Logger LOGGER = LoggerFactory.getLogger(CamelCollector.class);
+ private EventAdmin eventAdmin;
+
+ public CamelCollector(EventAdmin eventAdmin) {
+ this.eventAdmin = eventAdmin;
+ }
+
+ @Override
+ public void run() {
+ LOGGER.debug("Karaf Decanter Camel Collector starts harvesting ...");
+
+ MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+ //ObjectName: org.apache.camel:context=*,type=routes,name="*"
+ Set<ObjectName> names = Collections.emptySet();
+ try {
+ names = server.queryNames(new ObjectName("org.apache.camel:context=*,type=routes,name=\"*\""), null);
+ } catch (MalformedObjectNameException e1) {
+ LOGGER.warn("Error retrieving information from mbean-server for camel data");
+ }
+ for (ObjectName name : names) {
+ try {
+ Map<String, Object> data = harvestBean(server, name);
+ Event event = new Event("decanter/camel/" + getTopic(name), data);
+ eventAdmin.postEvent(event);
+ } catch (Exception e) {
+ LOGGER.warn("Error reading mbean " + name, e);
+ }
+ }
+
+ LOGGER.debug("Karaf Decanter Camel Collector harvesting done");
+ }
+
+ private String getTopic(ObjectName name) {
+ return name.getDomain().replace(".", "/");
+ }
+
+ Map<String, Object> harvestBean(MBeanServer server, ObjectName name) throws Exception {
+ MBeanAttributeInfo[] attributes = server.getMBeanInfo(name).getAttributes();
+ Map<String, Object> data = new HashMap<>();
+ data.put("type", "camel");
+ for (MBeanAttributeInfo attribute : attributes) {
+ try {
+ // TODO add SLA check on attributes and filtering
+ Object attributeObject = server.getAttribute(name, attribute.getName());
+ if (attributeObject instanceof String) {
+ data.put(attribute.getName(), (String)attributeObject);
+ } else if (attributeObject instanceof ObjectName) {
+ data.put(attribute.getName(), ((ObjectName)attributeObject).toString());
+ } else if (attributeObject instanceof CompositeDataSupport) {
+ CompositeDataSupport cds = (CompositeDataSupport)attributeObject;
+ CompositeType compositeType = cds.getCompositeType();
+ Set<String> keySet = compositeType.keySet();
+ Map<String, Object> composite = new HashMap<String, Object>();
+ for (String key : keySet) {
+ Object cdsObject = cds.get(key);
+ composite.put(key, cdsObject);
+ }
+ data.put(attribute.getName(), composite);
+ } else if (attributeObject instanceof Long
+ || attributeObject instanceof Integer
+ || attributeObject instanceof Boolean
+ || attributeObject instanceof Float
+ || attributeObject instanceof Double){
+ data.put(attribute.getName(), attributeObject);
+ }
+ } catch (SecurityException se) {
+ LOGGER.error("SecurityException: ", se);
+ } catch (Exception e) {
+ LOGGER.debug("Could not read attribute " + name.toString() + " " + attribute.getName());
+ }
+
+ }
+ return data;
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/ccdd75ad/collector/jmx/src/main/java/org/apache/karaf/decanter/collector/jmx/JmxCollector.java
----------------------------------------------------------------------
diff --git a/collector/jmx/src/main/java/org/apache/karaf/decanter/collector/jmx/JmxCollector.java b/collector/jmx/src/main/java/org/apache/karaf/decanter/collector/jmx/JmxCollector.java
index 59da402..fcc5f9b 100644
--- a/collector/jmx/src/main/java/org/apache/karaf/decanter/collector/jmx/JmxCollector.java
+++ b/collector/jmx/src/main/java/org/apache/karaf/decanter/collector/jmx/JmxCollector.java
@@ -97,6 +97,8 @@ public class JmxCollector implements Runnable {
|| attributeObject instanceof Double){
data.put(attribute.getName(), attributeObject);
}
+ } catch (SecurityException se) {
+ LOGGER.error("SecurityException: ", se);
} catch (Exception e) {
LOGGER.debug("Could not read attribute " + name.toString() + " " + attribute.getName());
}
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/ccdd75ad/collector/pom.xml
----------------------------------------------------------------------
diff --git a/collector/pom.xml b/collector/pom.xml
index 426327e..ae58c5f 100644
--- a/collector/pom.xml
+++ b/collector/pom.xml
@@ -37,6 +37,7 @@
<module>jmx</module>
<module>log</module>
<!-- TODO camel tracer <module>camel</module> -->
+ <module>camel</module>
</modules>
</project>
\ No newline at end of file