/** * Given a typeName string, get the first match from the typeNames setting. * In other words, suppose you have: * * typeName=name=PS Eden Space,type=MemoryPool * * If you addTypeName("name"), then it'll retrieve 'PS Eden Space' from the * string */ public static String getConcatedTypeNameValues(Query query, List<String> typeNames, String typeName) { Set<String> queryTypeNames = query.getTypeNames(); if (queryTypeNames != null && queryTypeNames.size() > 0) { List<String> allNames = new ArrayList<String>(queryTypeNames); for (String name : typeNames) { if (!allNames.contains(name)) { allNames.add(name); } } return getConcatedTypeNameValues(allNames, typeName); } else { return getConcatedTypeNameValues(typeNames, typeName); } }
/** * Returns the object pool map */ @JsonIgnore public Map<String, KeyedObjectPool> getObjectPoolMap() { if (this.objectPoolMap == null) { this.objectPoolMap = JmxUtils.getDefaultPoolMap(); } return this.objectPoolMap; }
/** * Helper method for connecting to a Server. You need to close the resulting * connection. */ public static JMXConnector getServerConnection(Server server) throws Exception { JMXServiceURL url = new JMXServiceURL(server.getUrl()); if (server.getProtocolProviderPackages() != null && server.getProtocolProviderPackages().contains("weblogic")) return JMXConnectorFactory.connect(url, getWebLogicEnvironment(server)); else return JMXConnectorFactory.connect(url, getEnvironment(server)); }
if (value != null) { if (value instanceof CompositeDataSupport) { getResult(resList, info, oi, attribute.getName(), (CompositeData) value, query); } else if (value instanceof CompositeData[]) { for (CompositeData cd : (CompositeData[]) value) { getResult(resList, info, oi, attribute.getName(), cd, query); Result r = getNewResultObject(info, oi, attribute.getName(), query); for (ObjectName obj : (ObjectName[]) value) { r.addValue(obj.getCanonicalName(), obj.getKeyPropertyListString()); Result r = getNewResultObject(info, oi, attribute.getName(), query); for (int i = 0; i < Array.getLength(value); i++) { Object val = Array.get(value, i); } else if (value instanceof TabularDataSupport) { TabularDataSupport tds = (TabularDataSupport) value; Result r = getNewResultObject(info, oi, attribute.getName(), query); processTabularDataSupport(resList, info, oi, r, attribute.getName(), tds, query); resList.add(r); } else { Result r = getNewResultObject(info, oi, attribute.getName(), query); r.addValue(attribute.getName(), value); resList.add(r);
public static String getKeyString2(Query query, Result result, Entry<String, Object> values, List<String> typeNames, String rootPrefix) { String keyStr = null; if (values.getKey().startsWith(result.getAttributeName())) { keyStr = values.getKey(); } else { keyStr = result.getAttributeName() + "." + values.getKey(); } StringBuilder sb = new StringBuilder(); // Allow people to use something other than the classname as the output. if (result.getClassNameAlias() != null) { sb.append(result.getClassNameAlias()); } else { sb.append(cleanupStr(result.getClassName())); } sb.append("."); String typeName = cleanupStr(getConcatedTypeNameValues(query, typeNames, result.getTypeName())); if (typeName != null) { sb.append(typeName); sb.append("."); } sb.append(cleanupStr(keyStr)); return sb.toString(); }
service.execute(new ProcessServerThread(server, null)); } else { JMXConnector conn = JmxUtils.getServerConnection(server); conns.add(conn); service.execute(new ProcessServerThread(server, conn)); for (Server server : process.getServers()) { if (server.getLocalMBeanServer() != null) { processServer(server, null); } else { JMXConnector conn = JmxUtils.getServerConnection(server); conns.add(conn); processServer(server, conn);
getResult(resList, info, oi, attribute, query); runOutputWritersForQuery(query);
/** * Useful for figuring out if an Object is a number. */ public static boolean isNumeric(Object value) { return ((value instanceof Number) || ((value instanceof String) && isNumeric((String) value))); }
/** * Given a typeName string, get the first match from the typeNames setting. * In other words, suppose you have: * * typeName=name=PS Eden Space,type=MemoryPool * * If you addTypeName("name"), then it'll retrieve 'PS Eden Space' from the * string */ public static String getConcatedTypeNameValues(List<String> typeNames, String typeNameStr) { if ((typeNames == null) || (typeNames.size() == 0)) { return null; } String[] tokens = typeNameStr.split(","); StringBuilder sb = new StringBuilder(); for (String key : typeNames) { String result = getTypeNameValue(key, tokens); if (result != null) { sb.append(result); sb.append("_"); } } return StringUtils.chomp(sb.toString(), "_"); }
/** */ private static void processTabularDataSupport(List<Result> resList, MBeanInfo info, ObjectInstance oi, Result r, String attributeName, TabularDataSupport tds, Query query) { Set<Entry<Object, Object>> entries = tds.entrySet(); for (Entry<Object, Object> entry : entries) { Object entryKeys = entry.getKey(); if (entryKeys instanceof List) { // ie: attributeName=LastGcInfo.Par Survivor Space // i haven't seen this be smaller or larger than List<1>, but // might as well loop it. StringBuilder sb = new StringBuilder(); for (Object entryKey : (List<?>) entryKeys) { sb.append("."); sb.append(entryKey); } String attributeName2 = sb.toString(); Object entryValue = entry.getValue(); if (entryValue instanceof CompositeDataSupport) { getResult(resList, info, oi, attributeName + attributeName2, (CompositeDataSupport) entryValue, query); } else { throw new RuntimeException("!!!!!!!!!! Please file a bug: http://code.google.com/p/jmxtrans/issues/entry entryValue is: " + entryValue.getClass().getCanonicalName()); } } else { throw new RuntimeException("!!!!!!!!!! Please file a bug: http://code.google.com/p/jmxtrans/issues/entry entryKeys is: " + entryKeys.getClass().getCanonicalName()); } } }
/** * Populates the Result objects. This is a recursive function. Query * contains the keys that we want to get the values of. */ private static void getResult(List<Result> resList, MBeanInfo info, ObjectInstance oi, String attributeName, CompositeData cds, Query query) { CompositeType t = cds.getCompositeType(); Result r = getNewResultObject(info, oi, attributeName, query); Set<String> keys = t.keySet(); for (String key : keys) { Object value = cds.get(key); if (value instanceof TabularDataSupport) { TabularDataSupport tds = (TabularDataSupport) value; processTabularDataSupport(resList, info, oi, r, attributeName + "." + key, tds, query); r.addValue(key, value); } else if (value instanceof CompositeDataSupport) { // now recursively go through everything. CompositeDataSupport cds2 = (CompositeDataSupport) value; getResult(resList, info, oi, attributeName, cds2, query); return; // because we don't want to add to the list yet. } else { r.addValue(key, value); } } resList.add(r); }
} else { alias = query.getServer().getHost() + "_" + query.getServer().getPort(); alias = cleanupStr(alias); sb.append(result.getClassNameAlias()); } else { sb.append(cleanupStr(result.getClassName())); String typeName = cleanupStr(getConcatedTypeNameValues(query, typeNames, result.getTypeName())); if (typeName != null) { sb.append(typeName); sb.append("."); sb.append(cleanupStr(keyStr));
if (resultValues != null) { for (Map.Entry<String, Object> values : resultValues.entrySet()) { if (JmxUtils.isNumeric(values.getValue())) { StringBuilder writer = new StringBuilder(); writer.append("{ \"host\": ");