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,14 @@ package com.zabbix.gateway; import java.util.HashMap; +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 +194,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[]"); + + 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(); + + if (obj instanceof ObjectName) { + bean.put("{#JMXOBJ}", ((ObjectName) obj).getCanonicalName()); + bean.put("{#JMXNAME}", ((ObjectName) obj).getKeyProperty("name").replace("\"", "")); + bean.put("{#JMXTYPE}", ((ObjectName) obj).getKeyProperty("type")); + bean.put("{#JMXMODULE}", ((ObjectName) obj).getKeyProperty("module")); + + MBeanInfo mbi = mbsc.getMBeanInfo((ObjectName) obj); + logger.trace("Description: " + mbi.getDescription()); + } else if (obj instanceof ObjectInstance) { + MBeanInfo mbi = mbsc.getMBeanInfo( ((ObjectInstance) obj).getObjectName() ); + + bean.put("{#JMXOBJ}", ((ObjectInstance) obj).getObjectName().getCanonicalName()); + bean.put("{#JMXNAME}", ((ObjectInstance) obj).getObjectName().getKeyProperty("name").replace("\"", "")); + bean.put("{#JMXTYPE}", ((ObjectInstance) obj).getObjectName().getKeyProperty("type")); + bean.put("{#JMXMODULE}", ((ObjectInstance) obj).getObjectName().getKeyProperty("module")); + bean.put("{#JMXDESC}", mbi.getDescription()); + } else + throw new RuntimeException("Unexpected object type: " + obj); + + 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()); }