-
Notifications
You must be signed in to change notification settings - Fork 0
/
filter.patch
66 lines (64 loc) · 2.43 KB
/
filter.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Index: src/zabbix_java/src/com/zabbix/gateway/JMXItemChecker.java
===================================================================
--- src/zabbix_java/src/com/zabbix/gateway/JMXItemChecker.java (revision 41390)
+++ src/zabbix_java/src/com/zabbix/gateway/JMXItemChecker.java (working copy)
@@ -20,12 +20,16 @@
package com.zabbix.gateway;
import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map.Entry;
+import java.util.Set;
import java.util.Vector;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
+import javax.management.ObjectInstance;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.TabularDataSupport;
import javax.management.remote.JMXConnector;
@@ -192,6 +196,44 @@
mapping.put(ItemChecker.JSON_TAG_DATA, counters);
return mapping.toString();
}
+ else if (item.getKeyId().equals("jmx.discovery.filter"))
+ {
+ if (1 != item.getArgumentCount())
+ throw new ZabbixException("required key format: jmx.discovery.filter[<obj name>]");
+
+ ObjectName filter = new ObjectName(item.getArgument(1));
+ JSONArray beanList = new JSONArray();
+ JSONObject mapping = new JSONObject();
+
+ Set beans = mbsc.queryMBeans(filter, null);
+ for (Object obj : beans) {
+ JSONObject bean = new JSONObject();
+ ObjectName beanName;
+
+ // Return the ObjectName instance correctly for both Objects and Instances
+ if (obj instanceof ObjectName)
+ beanName = (ObjectName) obj;
+ else if (obj instanceof ObjectInstance)
+ beanName = ((ObjectInstance) obj).getObjectName();
+ else
+ throw new RuntimeException("Unexpected object type: " + obj);
+
+ // Build the standing info, description and object path
+ MBeanInfo mbi = mbsc.getMBeanInfo(beanName);
+ bean.put("{#JMXDESC}", mbi.getDescription());
+ bean.put("{#JMXOBJ}", beanName.getCanonicalName());
+
+ // Build a list of all the MBean properties as {#PROP<NAME>}
+ Hashtable<String, String> pt = beanName.getKeyPropertyList();
+ for (Entry<String, String> prop : pt.entrySet())
+ bean.put(String.format("{#PROP%s}", prop.getKey().toUpperCase()), prop.getValue());
+
+ beanList.put(bean);
+ }
+
+ mapping.put(ItemChecker.JSON_TAG_DATA, beanList);
+ return mapping.toString();
+ }
else
throw new ZabbixException("key ID '%s' is not supported", item.getKeyId());
}