use of javax.management.MBeanInfo in project flink by apache.
the class JMXReporterTest method testHistogramReporting.
/**
* Tests that histograms are properly reported via the JMXReporter.
*/
@Test
public void testHistogramReporting() throws Exception {
MetricRegistry registry = null;
String histogramName = "histogram";
try {
Configuration config = new Configuration();
config.setString(ConfigConstants.METRICS_REPORTERS_LIST, "jmx_test");
config.setString(ConfigConstants.METRICS_REPORTER_PREFIX + "jmx_test." + ConfigConstants.METRICS_REPORTER_CLASS_SUFFIX, JMXReporter.class.getName());
registry = new MetricRegistry(MetricRegistryConfiguration.fromConfiguration(config));
TaskManagerMetricGroup metricGroup = new TaskManagerMetricGroup(registry, "localhost", "tmId");
TestingHistogram histogram = new TestingHistogram();
metricGroup.histogram(histogramName, histogram);
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName objectName = new ObjectName(JMX_DOMAIN_PREFIX + "taskmanager." + histogramName, JMXReporter.generateJmxTable(metricGroup.getAllVariables()));
MBeanInfo info = mBeanServer.getMBeanInfo(objectName);
MBeanAttributeInfo[] attributeInfos = info.getAttributes();
assertEquals(11, attributeInfos.length);
assertEquals(histogram.getCount(), mBeanServer.getAttribute(objectName, "Count"));
assertEquals(histogram.getStatistics().getMean(), mBeanServer.getAttribute(objectName, "Mean"));
assertEquals(histogram.getStatistics().getStdDev(), mBeanServer.getAttribute(objectName, "StdDev"));
assertEquals(histogram.getStatistics().getMax(), mBeanServer.getAttribute(objectName, "Max"));
assertEquals(histogram.getStatistics().getMin(), mBeanServer.getAttribute(objectName, "Min"));
assertEquals(histogram.getStatistics().getQuantile(0.5), mBeanServer.getAttribute(objectName, "Median"));
assertEquals(histogram.getStatistics().getQuantile(0.75), mBeanServer.getAttribute(objectName, "75thPercentile"));
assertEquals(histogram.getStatistics().getQuantile(0.95), mBeanServer.getAttribute(objectName, "95thPercentile"));
assertEquals(histogram.getStatistics().getQuantile(0.98), mBeanServer.getAttribute(objectName, "98thPercentile"));
assertEquals(histogram.getStatistics().getQuantile(0.99), mBeanServer.getAttribute(objectName, "99thPercentile"));
assertEquals(histogram.getStatistics().getQuantile(0.999), mBeanServer.getAttribute(objectName, "999thPercentile"));
} finally {
if (registry != null) {
registry.shutdown();
}
}
}
use of javax.management.MBeanInfo in project tomcat by apache.
the class Registry method getType.
// -------------------- Helpers --------------------
/**
* Get the type of an attribute of the object, from the metadata.
*
* @param oname The bean name
* @param attName The attribute name
* @return null if metadata about the attribute is not found
* @since 1.1
*/
public String getType(ObjectName oname, String attName) {
String type = null;
MBeanInfo info = null;
try {
info = server.getMBeanInfo(oname);
} catch (Exception e) {
log.info("Can't find metadata for object" + oname);
return null;
}
MBeanAttributeInfo[] attInfo = info.getAttributes();
for (int i = 0; i < attInfo.length; i++) {
if (attName.equals(attInfo[i].getName())) {
type = attInfo[i].getType();
return type;
}
}
return null;
}
use of javax.management.MBeanInfo in project tomcat by apache.
the class ManagedBean method getMBeanInfo.
/**
* Create and return a <code>ModelMBeanInfo</code> object that
* describes this entire managed bean.
* @return the MBean info
*/
MBeanInfo getMBeanInfo() {
// Return our cached information (if any)
mBeanInfoLock.readLock().lock();
try {
if (info != null) {
return info;
}
} finally {
mBeanInfoLock.readLock().unlock();
}
mBeanInfoLock.writeLock().lock();
try {
if (info == null) {
// Create subordinate information descriptors as required
AttributeInfo[] attrs = getAttributes();
MBeanAttributeInfo[] attributes = new MBeanAttributeInfo[attrs.length];
for (int i = 0; i < attrs.length; i++) attributes[i] = attrs[i].createAttributeInfo();
OperationInfo[] opers = getOperations();
MBeanOperationInfo[] operations = new MBeanOperationInfo[opers.length];
for (int i = 0; i < opers.length; i++) operations[i] = opers[i].createOperationInfo();
NotificationInfo[] notifs = getNotifications();
MBeanNotificationInfo[] notifications = new MBeanNotificationInfo[notifs.length];
for (int i = 0; i < notifs.length; i++) notifications[i] = notifs[i].createNotificationInfo();
// Construct and return a new ModelMBeanInfo object
info = new MBeanInfo(getClassName(), getDescription(), attributes, new MBeanConstructorInfo[] {}, operations, notifications);
}
return info;
} finally {
mBeanInfoLock.writeLock().unlock();
}
}
use of javax.management.MBeanInfo in project hbase by apache.
the class TestStochasticBalancerJmxMetrics method readJmxMetrics.
/**
* Read the attributes from Hadoop->HBase->Master->Balancer in JMX
* @throws IOException
*/
private Set<String> readJmxMetrics() throws IOException {
JMXConnector connector = null;
ObjectName target = null;
MBeanServerConnection mb = null;
try {
connector = JMXConnectorFactory.connect(JMXListener.buildJMXServiceURL(connectorPort, connectorPort));
mb = connector.getMBeanServerConnection();
Hashtable<String, String> pairs = new Hashtable<>();
pairs.put("service", "HBase");
pairs.put("name", "Master");
pairs.put("sub", "Balancer");
target = new ObjectName("Hadoop", pairs);
MBeanInfo beanInfo = mb.getMBeanInfo(target);
Set<String> existingAttrs = new HashSet<>();
for (MBeanAttributeInfo attrInfo : beanInfo.getAttributes()) {
existingAttrs.add(attrInfo.getName());
}
return existingAttrs;
} catch (Exception e) {
LOG.warn("Failed to get bean!!! " + target, e);
if (mb != null) {
Set<ObjectInstance> instances = mb.queryMBeans(null, null);
Iterator<ObjectInstance> iterator = instances.iterator();
System.out.println("MBean Found:");
while (iterator.hasNext()) {
ObjectInstance instance = iterator.next();
System.out.println("Class Name: " + instance.getClassName());
System.out.println("Object Name: " + instance.getObjectName());
}
}
} finally {
if (connector != null) {
try {
connector.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return null;
}
use of javax.management.MBeanInfo in project tomcat by apache.
the class MBeanDumper method dumpBeans.
/**
* The following code to dump MBeans has been copied from JMXProxyServlet.
* @param mbeanServer the MBean server
* @param names a set of object names for which to dump the info
* @return a string representation of the MBeans
*/
public static String dumpBeans(MBeanServer mbeanServer, Set<ObjectName> names) {
StringBuilder buf = new StringBuilder();
Iterator<ObjectName> it = names.iterator();
while (it.hasNext()) {
ObjectName oname = it.next();
buf.append("Name: ");
buf.append(oname.toString());
buf.append(CRLF);
try {
MBeanInfo minfo = mbeanServer.getMBeanInfo(oname);
// can't be null - I think
String code = minfo.getClassName();
if ("org.apache.commons.modeler.BaseModelMBean".equals(code)) {
code = (String) mbeanServer.getAttribute(oname, "modelerType");
}
buf.append("modelerType: ");
buf.append(code);
buf.append(CRLF);
MBeanAttributeInfo[] attrs = minfo.getAttributes();
Object value = null;
for (int i = 0; i < attrs.length; i++) {
if (!attrs[i].isReadable())
continue;
String attName = attrs[i].getName();
if ("modelerType".equals(attName))
continue;
if (attName.indexOf('=') >= 0 || attName.indexOf(':') >= 0 || attName.indexOf(' ') >= 0) {
continue;
}
try {
value = mbeanServer.getAttribute(oname, attName);
} catch (JMRuntimeException rme) {
Throwable cause = rme.getCause();
if (cause instanceof UnsupportedOperationException) {
if (log.isDebugEnabled()) {
log.debug("Error getting attribute " + oname + " " + attName, rme);
}
} else if (cause instanceof NullPointerException) {
if (log.isDebugEnabled()) {
log.debug("Error getting attribute " + oname + " " + attName, rme);
}
} else {
log.error("Error getting attribute " + oname + " " + attName, rme);
}
continue;
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
log.error("Error getting attribute " + oname + " " + attName, t);
continue;
}
if (value == null)
continue;
String valueString;
try {
Class<?> c = value.getClass();
if (c.isArray()) {
int len = Array.getLength(value);
StringBuilder sb = new StringBuilder("Array[" + c.getComponentType().getName() + "] of length " + len);
if (len > 0) {
sb.append(CRLF);
}
for (int j = 0; j < len; j++) {
sb.append("\t");
Object item = Array.get(value, j);
if (item == null) {
sb.append("NULL VALUE");
} else {
try {
sb.append(escape(item.toString()));
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
sb.append("NON-STRINGABLE VALUE");
}
}
if (j < len - 1) {
sb.append(CRLF);
}
}
valueString = sb.toString();
} else {
valueString = escape(value.toString());
}
buf.append(attName);
buf.append(": ");
buf.append(valueString);
buf.append(CRLF);
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
}
}
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
}
buf.append(CRLF);
}
return buf.toString();
}
Aggregations