You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2015/03/18 13:42:07 UTC
karaf-decanter git commit: [KARAF-3618] Better support attributes of
other types than String
Repository: karaf-decanter
Updated Branches:
refs/heads/master 8b9fd6484 -> 3701da08e
[KARAF-3618] Better support attributes of other types than String
Project: http://git-wip-us.apache.org/repos/asf/karaf-decanter/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf-decanter/commit/3701da08
Tree: http://git-wip-us.apache.org/repos/asf/karaf-decanter/tree/3701da08
Diff: http://git-wip-us.apache.org/repos/asf/karaf-decanter/diff/3701da08
Branch: refs/heads/master
Commit: 3701da08ebd33f56528a2e7da69084c962478b5d
Parents: 8b9fd64
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Wed Mar 18 13:41:47 2015 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Wed Mar 18 13:41:47 2015 +0100
----------------------------------------------------------------------
.../elasticsearch/ElasticsearchAppender.java | 47 +++++++++++++------
collector/jmx/pom.xml | 5 ++
.../decanter/collector/jmx/JmxCollector.java | 48 +++++++++++++-------
.../collector/jmx/TestMapAttribute.java | 27 +++++++++++
.../decanter/collector/log/LogAppender.java | 1 +
5 files changed, 97 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/3701da08/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 ce9f517..e9050cd 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
@@ -18,9 +18,10 @@ package org.apache.karaf.decanter.appender.elasticsearch;
import static org.elasticsearch.common.settings.ImmutableSettings.settingsBuilder;
+import java.math.BigDecimal;
+import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.Date;
-import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TimeZone;
@@ -88,7 +89,6 @@ public class ElasticsearchAppender implements EventHandler {
@SuppressWarnings("unchecked")
private void send(Client client, Event event) {
- Map<String, Object> props = new HashMap<>();
Long ts = (Long)event.getProperty("timestamp");
Date date = ts != null ? new Date((Long)ts) : new Date();
@@ -96,15 +96,23 @@ public class ElasticsearchAppender implements EventHandler {
jsonObjectBuilder.add("@timestamp", tsFormat.format(date));
for (String key : event.getPropertyNames()) {
Object value = event.getProperty(key);
- if (value instanceof String) {
- jsonObjectBuilder.add(key, (String) value);
- } else if (value instanceof Map) {
+ if (value instanceof Map) {
jsonObjectBuilder.add(key, build((Map<String, Object>) value));
+ } else {
+ addProperty(jsonObjectBuilder, key, value);
}
}
JsonObject jsonObject = jsonObjectBuilder.build();
String indexName = getIndexName("karaf", date);
- client.prepareIndex(indexName, "karaf_event").setSource(jsonObject.toString()).execute().actionGet();
+ String jsonSt = jsonObject.toString();
+ LOGGER.debug("Sending event to elastic search with content: {}", jsonSt);
+
+ client.prepareIndex(indexName, getType(event)).setSource(jsonSt).execute().actionGet();
+ }
+
+ private String getType(Event event) {
+ String type = (String)event.getProperty("type");
+ return type != null ? type : "karaf_event";
}
private JsonObject build(Map<String, Object> value) {
@@ -115,15 +123,24 @@ public class ElasticsearchAppender implements EventHandler {
return innerBuilder.build();
}
- private void addProperty(JsonObjectBuilder innerBuilder, String innerKey, Object innerValue) {
- if (innerValue instanceof String)
- innerBuilder.add(innerKey, (String) innerValue);
- else if (innerValue instanceof Long)
- innerBuilder.add(innerKey, (Long) innerValue);
- else if (innerValue instanceof Integer)
- innerBuilder.add(innerKey, (Integer) innerValue);
- else if (innerValue instanceof Float)
- innerBuilder.add(innerKey, (Float) innerValue);
+ private void addProperty(JsonObjectBuilder builder, String key, Object value) {
+ if (value instanceof BigDecimal)
+ builder.add(key, (BigDecimal) value);
+ else if (value instanceof BigInteger)
+ builder.add(key, (BigInteger) value);
+ else if (value instanceof String)
+ builder.add(key, (String) value);
+ else if (value instanceof Long)
+ builder.add(key, (Long) value);
+ else if (value instanceof Integer)
+ builder.add(key, (Integer) value);
+ else if (value instanceof Float)
+ builder.add(key, (Float) value);
+ else if (value instanceof Double)
+ builder.add(key, (Double) value);
+ else if (value instanceof Boolean)
+ builder.add(key, (Boolean) value);
+
}
private String getIndexName(String prefix, Date date) {
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/3701da08/collector/jmx/pom.xml
----------------------------------------------------------------------
diff --git a/collector/jmx/pom.xml b/collector/jmx/pom.xml
index bf4357b..100ce89 100644
--- a/collector/jmx/pom.xml
+++ b/collector/jmx/pom.xml
@@ -57,6 +57,11 @@
<artifactId>slf4j-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/3701da08/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 5f04026..59da402 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
@@ -54,7 +54,7 @@ public class JmxCollector implements Runnable {
for (ObjectName name : names) {
try {
Map<String, Object> data = harvestBean(server, name);
- Event event = new Event("decanter/jmx", data);
+ Event event = new Event("decanter/jmx/" + getTopic(name), data);
eventAdmin.postEvent(event);
} catch (Exception e) {
LOGGER.warn("Error reading mbean " + name, e);
@@ -64,25 +64,41 @@ public class JmxCollector implements Runnable {
LOGGER.debug("Karaf Decanter JMX Collector harvesting done");
}
- private Map<String, Object> harvestBean(MBeanServer server, ObjectName name) throws Exception {
+ 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("mbean", name.toString());
+ data.put("type", "jmx");
for (MBeanAttributeInfo attribute : attributes) {
- // 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 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);
+ 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);
}
- data.put(attribute.getName(), composite);
+ } catch (Exception e) {
+ LOGGER.debug("Could not read attribute " + name.toString() + " " + attribute.getName());
}
}
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/3701da08/collector/jmx/src/test/java/org/apache/karaf/decanter/collector/jmx/TestMapAttribute.java
----------------------------------------------------------------------
diff --git a/collector/jmx/src/test/java/org/apache/karaf/decanter/collector/jmx/TestMapAttribute.java b/collector/jmx/src/test/java/org/apache/karaf/decanter/collector/jmx/TestMapAttribute.java
new file mode 100644
index 0000000..9c904e3
--- /dev/null
+++ b/collector/jmx/src/test/java/org/apache/karaf/decanter/collector/jmx/TestMapAttribute.java
@@ -0,0 +1,27 @@
+package org.apache.karaf.decanter.collector.jmx;
+
+import java.lang.management.ManagementFactory;
+import java.util.Map;
+
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestMapAttribute {
+
+ @Test
+ public void testOperatingSystemMBean() throws MalformedObjectNameException, Exception {
+ MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+ JmxCollector jmxCollector = new JmxCollector(null);
+ Map<String, Object> data = jmxCollector.harvestBean(server, new ObjectName("java.lang:type=OperatingSystem"));
+ Assert.assertTrue(data.size() >= 17);
+ Object freeMem = data.get("FreePhysicalMemorySize");
+ Assert.assertTrue(freeMem != null);
+ Assert.assertTrue(freeMem instanceof Long);
+ Assert.assertTrue((Long)freeMem > 10000);
+ System.out.println(data);
+ }
+}
http://git-wip-us.apache.org/repos/asf/karaf-decanter/blob/3701da08/collector/log/src/main/java/org/apache/karaf/decanter/collector/log/LogAppender.java
----------------------------------------------------------------------
diff --git a/collector/log/src/main/java/org/apache/karaf/decanter/collector/log/LogAppender.java b/collector/log/src/main/java/org/apache/karaf/decanter/collector/log/LogAppender.java
index 0b52e30..9c520bc 100644
--- a/collector/log/src/main/java/org/apache/karaf/decanter/collector/log/LogAppender.java
+++ b/collector/log/src/main/java/org/apache/karaf/decanter/collector/log/LogAppender.java
@@ -59,6 +59,7 @@ public class LogAppender implements PaxAppender {
LOGGER.debug("Karaf Decanter Log Collector hooked ...");
Map<String, Object> data = new HashMap<>();
+ data.put("type", "log");
data.put("timeStamp", event.getTimeStamp());
data.put("loggerClass", event.getFQNOfLoggerClass());
data.put("loggerName", event.getLoggerName());