jmx.jsp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <%@page import="java.lang.management.*"%>
  2. <%@page import="java.util.*"%>
  3. <%@page import="javax.management.*"%>
  4. <%@page import="javax.management.openmbean.CompositeData"%>
  5. <%@page import="javax.management.openmbean.TabularData"%>
  6. <%!
  7. public String convert(Object value) {
  8. if (value == null) {
  9. return "null";
  10. }
  11. if (value instanceof CompositeData) {
  12. return convertCompositeData(value);
  13. }
  14. if (value instanceof TabularData) {
  15. return convertTabularData(value);
  16. }
  17. if (value.getClass().isArray()) {
  18. if (value instanceof boolean[]) {
  19. return Arrays.toString((boolean[]) value);
  20. } else if (value instanceof char[]) {
  21. return Arrays.toString((char[]) value);
  22. } else if (value instanceof byte[]) {
  23. return Arrays.toString((byte[]) value);
  24. } else if (value instanceof short[]) {
  25. return Arrays.toString((short[]) value);
  26. } else if (value instanceof int[]) {
  27. return Arrays.toString((int[]) value);
  28. } else if (value instanceof long[]) {
  29. return Arrays.toString((long[]) value);
  30. } else if (value instanceof float[]) {
  31. return Arrays.toString((float[]) value);
  32. } else if (value instanceof double[]) {
  33. return Arrays.toString((double[]) value);
  34. } else {
  35. StringBuffer buff = new StringBuffer();
  36. for (Object object : (Object[]) value) {
  37. buff.append(convert(object))
  38. .append("<br>");
  39. }
  40. return buff.toString();
  41. }
  42. }
  43. if (value instanceof Collection) {
  44. StringBuffer buff = new StringBuffer();
  45. for (Object object : (Collection) value) {
  46. buff.append(convert(object))
  47. .append("<br>");
  48. }
  49. return buff.toString();
  50. }
  51. return value.toString();
  52. }
  53. public String convertCompositeData(Object value) {
  54. CompositeData compositeData = (CompositeData) value;
  55. StringBuffer buff = new StringBuffer();
  56. for (String key : compositeData.getCompositeType().keySet()) {
  57. buff.append(key)
  58. .append("=")
  59. .append(convert(compositeData.get(key)))
  60. .append("<br>");
  61. }
  62. return buff.toString();
  63. }
  64. public String convertTabularData(Object value) {
  65. TabularData tabularData = (TabularData) value;
  66. StringBuffer buff = new StringBuffer();
  67. for (Object object : tabularData.values()) {
  68. buff.append(convert(object));
  69. }
  70. return buff.toString();
  71. }
  72. public String getAttributeValue(ObjectName objectName, String attributeName)
  73. throws Exception {
  74. try {
  75. Object value = ManagementFactory.getPlatformMBeanServer()
  76. .getAttribute(objectName, attributeName);
  77. return convert(value);
  78. } catch (Exception ex) {
  79. return ex.toString();
  80. }
  81. }
  82. %>
  83. <html>
  84. <head>
  85. <meta charset="utf-8">
  86. <title>jmx</title>
  87. <style>
  88. tbody tr:nth-child(odd) td,
  89. tbody tr:nth-child(odd) th {
  90. background-color: #f9f9f9;
  91. }
  92. </style>
  93. </head>
  94. <body>
  95. <%
  96. MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
  97. String type = request.getParameter("type");
  98. if ("view".equals(type)) {
  99. String objectNameString = request.getParameter("objectNameString");
  100. ObjectName objectName = ObjectName.getInstance(objectNameString);
  101. MBeanInfo mBeanInfo = mBeanServer.getMBeanInfo(objectName);
  102. out.println(objectName + "<br>");
  103. out.println(mBeanInfo.getClassName() + "<br>");
  104. out.println(mBeanInfo.getDescription() + "<br>");
  105. out.println("<hr>");
  106. out.println("<table border='1'>");
  107. out.println("<thead>");
  108. out.println("<tr>");
  109. out.println("<th>name</th>");
  110. out.println("<th>value</th>");
  111. out.println("</tr>");
  112. out.println("</thead>");
  113. out.println("<tbody>");
  114. for (MBeanAttributeInfo attr : mBeanInfo.getAttributes()) {
  115. out.println("<tr>");
  116. out.println("<td>" + attr.getName() + "</td>");
  117. out.println("<td>" + getAttributeValue(objectName, attr.getName()) + "</td>");
  118. out.println("</tr>");
  119. }
  120. out.println("</tbody>");
  121. out.println("</table>");
  122. /*
  123. <hr>
  124. <table border="1">
  125. <tr>
  126. <th>name</th>
  127. <th>value</th>
  128. </tr>
  129. <#list action.MBeanInfo.attributes as attr>
  130. <tr>
  131. <td>${attr.name}</td><td>${action.getAttributeValue(action.objectName, attr.name)}</td>
  132. </tr>
  133. </#list>
  134. </table>
  135. */
  136. } else {
  137. Set<ObjectName> names = mBeanServer.queryNames(null, null);
  138. Map<String, List<ObjectName>> objectNameMap = new HashMap<String, List<ObjectName>>();
  139. for (ObjectName objectName : names) {
  140. String domain = objectName.getDomain();
  141. List<ObjectName> list = objectNameMap.get(domain);
  142. if (list == null) {
  143. list = new ArrayList<ObjectName>();
  144. objectNameMap.put(domain, list);
  145. }
  146. list.add(objectName);
  147. }
  148. for (Map.Entry<String, List<ObjectName>> entry : objectNameMap.entrySet()) {
  149. out.println("<p>");
  150. out.println(entry.getKey() + "<br>");
  151. out.println("<ul>");
  152. for (ObjectName objectName : entry.getValue()) {
  153. out.println("<li><a href='jmx.jsp?type=view&objectNameString=" + objectName + "'>");
  154. out.println(objectName);
  155. out.println("</a></li>");
  156. }
  157. out.println("</ul>");
  158. out.println("</p>");
  159. }
  160. }
  161. %>
  162. </body>
  163. </html>