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 <[email protected]>
Authored: Fri Apr 24 21:26:32 2015 +0200
Committer: anierbeck <[email protected]>
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

Reply via email to