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