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/02/26 21:38:42 UTC

karaf-decanter git commit: [KARAF-3573] - DECANTER: Improve JMX collected Data

Repository: karaf-decanter
Updated Branches:
  refs/heads/master d34bcf759 -> 0429a816e


[KARAF-3573] - DECANTER: Improve JMX collected Data

Project: http://git-wip-us.apache.org/repos/asf/karaf-decanter/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-decanter/commit/0429a816
Tree: http://git-wip-us.apache.org/repos/asf/karaf-decanter/tree/0429a816
Diff: http://git-wip-us.apache.org/repos/asf/karaf-decanter/diff/0429a816

Branch: refs/heads/master
Commit: 0429a816e477570baa4736c08ef290a6b2b6242b
Parents: d34bcf7
Author: anierbeck <bc...@googlemail.com>
Authored: Thu Feb 26 21:38:26 2015 +0100
Committer: anierbeck <bc...@googlemail.com>
Committed: Thu Feb 26 21:38:26 2015 +0100

----------------------------------------------------------------------
 appender/elasticsearch/pom.xml                  | 149 +++++++++----------
 .../elasticsearch/ElasticsearchAppender.java    |  30 +++-
 assembly/src/main/feature/feature.xml           |   1 +
 .../decanter/collector/jmx/JmxCollector.java    |  33 ++--
 pom.xml                                         |   7 +
 5 files changed, 135 insertions(+), 85 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/0429a816/appender/elasticsearch/pom.xml
----------------------------------------------------------------------
diff --git a/appender/elasticsearch/pom.xml b/appender/elasticsearch/pom.xml
index f2a063d..09291dc 100644
--- a/appender/elasticsearch/pom.xml
+++ b/appender/elasticsearch/pom.xml
@@ -1,89 +1,88 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<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">
+<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. -->
 
-        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
+	<modelVersion>4.0.0</modelVersion>
 
-           http://www.apache.org/licenses/LICENSE-2.0
+	<parent>
+		<groupId>org.apache.karaf.decanter</groupId>
+		<artifactId>appender</artifactId>
+		<version>3.0.0-SNAPSHOT</version>
+		<relativePath>../pom.xml</relativePath>
+	</parent>
 
-        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.
-    -->
+	<groupId>org.apache.karaf.decanter.appender</groupId>
+	<artifactId>org.apache.karaf.decanter.appender.elasticsearch</artifactId>
+	<packaging>bundle</packaging>
+	<name>Apache Karaf :: Decanter :: Appender :: Elasticsearch</name>
 
-    <modelVersion>4.0.0</modelVersion>
+	<dependencies>
 
-    <parent>
-        <groupId>org.apache.karaf.decanter</groupId>
-        <artifactId>appender</artifactId>
-        <version>3.0.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
+		<!-- Decanter -->
+		<dependency>
+			<groupId>org.apache.karaf.decanter</groupId>
+			<artifactId>org.apache.karaf.decanter.api</artifactId>
+		</dependency>
 
-    <groupId>org.apache.karaf.decanter.appender</groupId>
-    <artifactId>org.apache.karaf.decanter.appender.elasticsearch</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Decanter :: Appender :: Elasticsearch</name>
+		<!-- Elasticsearch -->
+		<dependency>
+			<groupId>org.elasticsearch</groupId>
+			<artifactId>elasticsearch</artifactId>
+			<version>${elasticsearch.version}</version>
+		</dependency>
 
-    <dependencies>
+		<!-- OSGi -->
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.core</artifactId>
+		</dependency>
 
-        <!-- Decanter -->
-        <dependency>
-            <groupId>org.apache.karaf.decanter</groupId>
-            <artifactId>org.apache.karaf.decanter.api</artifactId>
-        </dependency>
+		<!-- JSON builder -->
+		<dependency>
+			<groupId>javax.json</groupId>
+			<artifactId>javax.json-api</artifactId>
+		</dependency>
+		<!-- SLF4J -->
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+		</dependency>
 
-        <!-- Elasticsearch -->
-        <dependency>
-            <groupId>org.elasticsearch</groupId>
-            <artifactId>elasticsearch</artifactId>
-            <version>${elasticsearch.version}</version>
-        </dependency>
+	</dependencies>
 
-        <!-- OSGi -->
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-
-        <!-- SLF4J -->
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </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.appender.elasticsearch.Activator</Bundle-Activator>
-                        <Import-Package>
-                            org.apache.karaf.decanter.api;version=${project.version},
-                            org.slf4j;version="[1.7,2)";resolution:=optional,
-                            org.elasticsearch*;version="[1,2)",
-                            *
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
+	<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.appender.elasticsearch.Activator</Bundle-Activator>
+						<Import-Package>
+							org.apache.karaf.decanter.api;version=${project.version},
+							org.slf4j;version="[1.7,2)";resolution:=optional,
+							org.elasticsearch*;version="[1,2)",
+							*
+						</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/0429a816/appender/elasticsearch/src/main/java/org/apache/karaf/decanter/appender/elasticsearch/ElasticsearchAppender.java
----------------------------------------------------------------------
diff --git a/appender/elasticsearch/src/main/java/org/apache/karaf/decanter/appender/elasticsearch/ElasticsearchAppender.java b/appender/elasticsearch/src/main/java/org/apache/karaf/decanter/appender/elasticsearch/ElasticsearchAppender.java
index 06e36d0..c71cc4b 100644
--- a/appender/elasticsearch/src/main/java/org/apache/karaf/decanter/appender/elasticsearch/ElasticsearchAppender.java
+++ b/appender/elasticsearch/src/main/java/org/apache/karaf/decanter/appender/elasticsearch/ElasticsearchAppender.java
@@ -30,6 +30,11 @@ import java.util.Date;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import javax.json.Json;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
+
 /**
  * Karaf Decanter appender which insert into Elasticsearch
  */
@@ -53,7 +58,30 @@ public class ElasticsearchAppender implements Appender {
             	Date date = new Date(entry.getKey());
             	entry.getValue().put("@timestamp", tsFormat.format(date));
             	String indexName = String.format("karaf_%s", dateFormat.format(date));
-            	client.prepareIndex(indexName, "karaf_event").setSource(entry.getValue()).execute().actionGet();
+            	
+            	JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder();
+            	for (Entry<String, Object> valueEntry : entry.getValue().entrySet()) {
+					if (valueEntry.getValue() instanceof String) {
+						jsonObjectBuilder.add(valueEntry.getKey(), (String) valueEntry.getValue());
+					} else if (valueEntry.getValue() instanceof Map) {
+						Map<String, Object> value = (Map<String, Object>) valueEntry.getValue();
+						JsonObjectBuilder innerBuilder = Json.createObjectBuilder();
+						for (Entry<String, Object> innerEntrySet : value.entrySet()) {
+							Object object = innerEntrySet.getValue();
+							if (object instanceof String)
+								innerBuilder.add(innerEntrySet.getKey(), (String) object);
+							else if (object instanceof Long)
+								innerBuilder.add(innerEntrySet.getKey(), (Long) object);
+							else if (object instanceof Integer)
+								innerBuilder.add(innerEntrySet.getKey(), (Integer) object);
+							else if (object instanceof Float)
+								innerBuilder.add(innerEntrySet.getKey(), (Float) object);
+						}
+						jsonObjectBuilder.add(valueEntry.getKey(), innerBuilder.build());
+					}
+				}
+            	JsonObject jsonObject = jsonObjectBuilder.build();
+            	client.prepareIndex(indexName, "karaf_event").setSource(jsonObject.toString()).execute().actionGet();
             }
             LOGGER.debug("Apppending done");
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/0429a816/assembly/src/main/feature/feature.xml
----------------------------------------------------------------------
diff --git a/assembly/src/main/feature/feature.xml b/assembly/src/main/feature/feature.xml
index fa52a17..98eba4a 100644
--- a/assembly/src/main/feature/feature.xml
+++ b/assembly/src/main/feature/feature.xml
@@ -45,6 +45,7 @@
 
     <feature name="decanter-appender-elasticsearch" version="${project.version}" description="Karaf Decanter Elasticsearch Appender">
         <feature version="${project.version}">decanter-common</feature>
+        <bundle>mvn:org.glassfish/javax.json/${glassfish-json.version}</bundle>
         <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.elasticsearch/${elasticsearch.bundle.version}</bundle>
         <bundle>mvn:org.apache.karaf.decanter.appender/org.apache.karaf.decanter.appender.elasticsearch/${project.version}</bundle>
     </feature>

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/0429a816/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 5f11e92..6fb5dd9 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
@@ -16,19 +16,21 @@
  */
 package org.apache.karaf.decanter.collector.jmx;
 
-import org.apache.karaf.decanter.api.PollingCollector;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.management.openmbean.TabularDataSupport;
 import java.lang.management.ManagementFactory;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.openmbean.CompositeDataSupport;
+import javax.management.openmbean.CompositeType;
+
+import org.apache.karaf.decanter.api.PollingCollector;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * Decanter JMX Pooling Collector
  */
@@ -51,7 +53,20 @@ public class JmxCollector implements PollingCollector {
             for (MBeanAttributeInfo attribute : attributes) {
                 // TODO add SLA check on attributes and filtering
                 try {
-                    data.put(attribute.getName(), server.getAttribute(name, attribute.getName()).toString());
+                    Object attributeObject = server.getAttribute(name, attribute.getName());
+                    if (attributeObject instanceof String) {
+                    	data.put(attribute.getName(), (String) attributeObject);
+                    } 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);
+                    }
                 } catch (Exception e) {
                     // LOGGER.warn("Can't put MBean {} attribute {} in collected data", name.toString(), attribute.getName(), e);
                 }

http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/0429a816/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 9c5e62c..9dc6b47 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,8 @@
         <karaf.version>3.0.2</karaf.version>
         <kibana.version>3.1.1</kibana.version>
         <slf4j.version>1.7.7</slf4j.version>
+        <json-api.version>1.0</json-api.version>
+        <glassfish-json.version>1.0.4</glassfish-json.version>
     </properties>
 
     <modules>
@@ -238,6 +240,11 @@
                 <version>4.12</version>
             </dependency>
 
+            <dependency>
+            	<groupId>javax.json</groupId>
+            	<artifactId>javax.json-api</artifactId>
+            	<version>${json-api.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>