View | Details | Raw Unified | Return to bug 54143
Collapse All | Expand All

(-)java/org/apache/catalina/manager/StatusTransformer.java (-3 / +47 lines)
Lines 18-25 Link Here
18
18
19
package org.apache.catalina.manager;
19
package org.apache.catalina.manager;
20
20
21
import java.io.IOException;
22
import java.io.PrintWriter;
21
import java.io.PrintWriter;
22
import java.lang.management.ManagementFactory;
23
import java.lang.management.MemoryPoolMXBean;
24
import java.lang.management.MemoryUsage;
23
import java.lang.reflect.Method;
25
import java.lang.reflect.Method;
24
import java.text.MessageFormat;
26
import java.text.MessageFormat;
25
import java.util.Date;
27
import java.util.Date;
Lines 26-37 Link Here
26
import java.util.Enumeration;
28
import java.util.Enumeration;
27
import java.util.Iterator;
29
import java.util.Iterator;
28
import java.util.Set;
30
import java.util.Set;
31
import java.util.SortedMap;
32
import java.util.TreeMap;
29
import java.util.Vector;
33
import java.util.Vector;
30
34
31
import javax.management.MBeanServer;
35
import javax.management.MBeanServer;
32
import javax.management.ObjectInstance;
36
import javax.management.ObjectInstance;
33
import javax.management.ObjectName;
37
import javax.management.ObjectName;
34
import javax.servlet.ServletException;
35
import javax.servlet.http.HttpServletResponse;
38
import javax.servlet.http.HttpServletResponse;
36
39
37
import org.apache.catalina.util.RequestUtil;
40
import org.apache.catalina.util.RequestUtil;
Lines 191-196 Link Here
191
    public static void writeVMState(PrintWriter writer, int mode)
194
    public static void writeVMState(PrintWriter writer, int mode)
192
        throws Exception {
195
        throws Exception {
193
196
197
        SortedMap<String, MemoryPoolMXBean> memoryPoolMBeans =
198
                new TreeMap<String, MemoryPoolMXBean>();
199
        for (MemoryPoolMXBean mbean: ManagementFactory.getMemoryPoolMXBeans()) {
200
            String sortKey = mbean.getType() + ":" + mbean.getName();
201
            memoryPoolMBeans.put(sortKey, mbean);
202
        }
203
194
        if (mode == 0){
204
        if (mode == 0){
195
            writer.print("<h1>JVM</h1>");
205
            writer.print("<h1>JVM</h1>");
196
206
Lines 205-210 Link Here
205
            writer.print(formatSize
215
            writer.print(formatSize
206
                         (new Long(Runtime.getRuntime().maxMemory()), true));
216
                         (new Long(Runtime.getRuntime().maxMemory()), true));
207
            writer.print("</p>");
217
            writer.print("</p>");
218
219
            writer.write("<table border=\"0\"><thead><tr><th>Memory Pool</th><th>Type</th><th>Initial</th><th>Total</th><th>Maximum</th><th>Used</th></tr></thead><tbody>");
220
            for (MemoryPoolMXBean memoryPoolMBean : memoryPoolMBeans.values()) {
221
                MemoryUsage usage = memoryPoolMBean.getUsage();
222
                writer.write("<tr><td>");
223
                writer.print(memoryPoolMBean.getName());
224
                writer.write("</td><td>");
225
                writer.print(memoryPoolMBean.getType());
226
                writer.write("</td><td>");
227
                writer.print(formatSize(Long.valueOf(usage.getInit()), true));
228
                writer.write("</td><td>");
229
                writer.print(formatSize(Long.valueOf(usage.getCommitted()), true));
230
                writer.write("</td><td>");
231
                writer.print(formatSize(Long.valueOf(usage.getMax()), true));
232
                writer.write("</td><td>");
233
                writer.print(formatSize(Long.valueOf(usage.getUsed()), true));
234
                if (usage.getMax() > 0) {
235
                    writer.write(" ("
236
                            + (usage.getUsed() * 100 / usage.getMax()) + "%)");
237
                }
238
                writer.write("</td></tr>");
239
            }
240
            writer.write("</tbody></table>");
208
        } else if (mode == 1){
241
        } else if (mode == 1){
209
            writer.write("<jvm>");
242
            writer.write("<jvm>");
210
243
Lines 213-218 Link Here
213
            writer.write(" total='" + Runtime.getRuntime().totalMemory() + "'");
246
            writer.write(" total='" + Runtime.getRuntime().totalMemory() + "'");
214
            writer.write(" max='" + Runtime.getRuntime().maxMemory() + "'/>");
247
            writer.write(" max='" + Runtime.getRuntime().maxMemory() + "'/>");
215
248
249
            for (MemoryPoolMXBean memoryPoolMBean : memoryPoolMBeans.values()) {
250
                MemoryUsage usage = memoryPoolMBean.getUsage();
251
                writer.write("<memorypool");
252
                writer.write(" name='" + memoryPoolMBean.getName() + "'");
253
                writer.write(" type='" + memoryPoolMBean.getType() + "'");
254
                writer.write(" usageInit='" + usage.getInit() + "'");
255
                writer.write(" usageCommitted='" + usage.getCommitted() + "'");
256
                writer.write(" usageMax='" + usage.getMax() + "'");
257
                writer.write(" usageUsed='" + usage.getUsed() + "'/>");
258
            }
259
216
            writer.write("</jvm>");
260
            writer.write("</jvm>");
217
        }
261
        }
218
262
Lines 520-526 Link Here
520
            } else {
564
            } else {
521
                writer.write(" requestProcessingTime=\"0\"");
565
                writer.write(" requestProcessingTime=\"0\"");
522
                writer.write(" requestBytesSent=\"0\"");
566
                writer.write(" requestBytesSent=\"0\"");
523
                writer.write(" requestBytesRecieved=\"0\"");
567
                writer.write(" requestBytesReceived=\"0\"");
524
                writer.write(" remoteAddr=\"&#63;\"");
568
                writer.write(" remoteAddr=\"&#63;\"");
525
                writer.write(" virtualHost=\"&#63;\"");
569
                writer.write(" virtualHost=\"&#63;\"");
526
                writer.write(" method=\"&#63;\"");
570
                writer.write(" method=\"&#63;\"");
(-)webapps/manager/status.xsd (-14 / +19 lines)
Lines 15-23 Link Here
15
  See the License for the specific language governing permissions and
15
  See the License for the specific language governing permissions and
16
  limitations under the License.
16
  limitations under the License.
17
-->
17
-->
18
<!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by peter lin (consultant) -->
19
<!--W3C Schema generated by XMLSPY v5 rel. 4 U (http://www.xmlspy.com)-->
20
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
18
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
19
    <xs:element name="status">
20
        <xs:complexType>
21
            <xs:sequence>
22
                <xs:element name="jvm" type="jvm"/>
23
                <xs:element name="connector" type="connector" minOccurs="1" maxOccurs="unbounded"/>
24
            </xs:sequence>
25
        </xs:complexType>
26
    </xs:element>
21
    <xs:complexType name="connector">
27
    <xs:complexType name="connector">
22
        <xs:sequence>
28
        <xs:sequence>
23
            <xs:element name="threadInfo" type="threadInfo"/>
29
            <xs:element name="threadInfo" type="threadInfo"/>
Lines 29-34 Link Here
29
    <xs:complexType name="jvm">
35
    <xs:complexType name="jvm">
30
        <xs:sequence>
36
        <xs:sequence>
31
            <xs:element name="memory" type="memory"/>
37
            <xs:element name="memory" type="memory"/>
38
            <xs:element name="memorypool" type="memorypool" minOccurs="0" maxOccurs="unbounded"/>
32
        </xs:sequence>
39
        </xs:sequence>
33
    </xs:complexType>
40
    </xs:complexType>
34
    <xs:complexType name="memory">
41
    <xs:complexType name="memory">
Lines 36-41 Link Here
36
        <xs:attribute name="total" type="xs:long" use="required"/>
43
        <xs:attribute name="total" type="xs:long" use="required"/>
37
        <xs:attribute name="max" type="xs:long" use="required"/>
44
        <xs:attribute name="max" type="xs:long" use="required"/>
38
    </xs:complexType>
45
    </xs:complexType>
46
    <xs:complexType name="memorypool">
47
        <xs:attribute name="name" type="xs:string" use="required"/>
48
        <xs:attribute name="type" type="xs:string" use="required"/>
49
        <xs:attribute name="usageInit" type="xs:long" use="required"/>
50
        <xs:attribute name="usageCommitted" type="xs:long" use="required"/>
51
        <xs:attribute name="usageMax" type="xs:long" use="required"/>
52
        <xs:attribute name="usageUsed" type="xs:long" use="required"/>
53
    </xs:complexType>
39
    <xs:complexType name="requestInfo">
54
    <xs:complexType name="requestInfo">
40
        <xs:attribute name="maxTime" type="xs:long" use="required"/>
55
        <xs:attribute name="maxTime" type="xs:long" use="required"/>
41
        <xs:attribute name="processingTime" type="xs:int" use="required"/>
56
        <xs:attribute name="processingTime" type="xs:int" use="required"/>
Lines 44-61 Link Here
44
        <xs:attribute name="bytesReceived" type="xs:long" use="required"/>
59
        <xs:attribute name="bytesReceived" type="xs:long" use="required"/>
45
        <xs:attribute name="bytesSent" type="xs:long" use="required"/>
60
        <xs:attribute name="bytesSent" type="xs:long" use="required"/>
46
    </xs:complexType>
61
    </xs:complexType>
47
    <xs:element name="status">
48
        <xs:complexType>
49
            <xs:sequence>
50
                <xs:element name="jvm" type="jvm"/>
51
                <xs:element name="connector" type="connector"/>
52
            </xs:sequence>
53
        </xs:complexType>
54
    </xs:element>
55
    <xs:complexType name="threadInfo">
62
    <xs:complexType name="threadInfo">
56
        <xs:attribute name="maxThreads" type="xs:int" use="required"/>
63
        <xs:attribute name="maxThreads" type="xs:int" use="required"/>
57
        <xs:attribute name="minSpareThreads" type="xs:int" use="required"/>
58
        <xs:attribute name="maxSpareThreads" type="xs:int" use="required"/>
59
        <xs:attribute name="currentThreadCount" type="xs:int" use="required"/>
64
        <xs:attribute name="currentThreadCount" type="xs:int" use="required"/>
60
        <xs:attribute name="currentThreadsBusy" type="xs:int" use="required"/>
65
        <xs:attribute name="currentThreadsBusy" type="xs:int" use="required"/>
61
    </xs:complexType>
66
    </xs:complexType>
Lines 63-69 Link Here
63
        <xs:attribute name="stage" type="xs:string" use="required"/>
68
        <xs:attribute name="stage" type="xs:string" use="required"/>
64
        <xs:attribute name="requestProcessingTime" type="xs:int" use="required"/>
69
        <xs:attribute name="requestProcessingTime" type="xs:int" use="required"/>
65
        <xs:attribute name="requestBytesSent" type="xs:long" use="required"/>
70
        <xs:attribute name="requestBytesSent" type="xs:long" use="required"/>
66
        <xs:attribute name="requestBytesRecieved" type="xs:long" use="required"/>
71
        <xs:attribute name="requestBytesReceived" type="xs:long" use="required"/>
67
        <xs:attribute name="remoteAddr" type="xs:string" use="required"/>
72
        <xs:attribute name="remoteAddr" type="xs:string" use="required"/>
68
        <xs:attribute name="virtualHost" type="xs:string" use="required"/>
73
        <xs:attribute name="virtualHost" type="xs:string" use="required"/>
69
        <xs:attribute name="method" type="xs:string" use="required"/>
74
        <xs:attribute name="method" type="xs:string" use="required"/>
Lines 73-79 Link Here
73
    </xs:complexType>
78
    </xs:complexType>
74
    <xs:complexType name="workers">
79
    <xs:complexType name="workers">
75
        <xs:sequence>
80
        <xs:sequence>
76
            <xs:element name="worker" type="worker"/>
81
            <xs:element name="worker" type="worker" minOccurs="0" maxOccurs="unbounded"/>
77
        </xs:sequence>
82
        </xs:sequence>
78
    </xs:complexType>
83
    </xs:complexType>
79
</xs:schema>
84
</xs:schema>
(-)webapps/manager/xform.xsl (-3 / +16 lines)
Lines 44-49 Link Here
44
44
45
  <xsl:template match="jvm">
45
  <xsl:template match="jvm">
46
   <xsl:apply-templates select="memory"/>
46
   <xsl:apply-templates select="memory"/>
47
   <b>Memory Pools</b><br />
48
   <xsl:apply-templates select="memorypool"/>
49
   <hr />
47
  </xsl:template>
50
  </xsl:template>
48
51
49
  <xsl:template match="memory">
52
  <xsl:template match="memory">
Lines 56-61 Link Here
56
    </table><hr />
59
    </table><hr />
57
  </xsl:template>
60
  </xsl:template>
58
61
62
  <xsl:template match="memorypool">
63
    <table><tr>
64
             <td><b>Name:</b> <xsl:value-of select="@name"/></td>
65
             <td><b>Type:</b> <xsl:value-of select="@type"/></td>
66
             <td><b>Initial:</b> <xsl:value-of select="@usageInit"/></td>
67
             <td><b>Committed:</b> <xsl:value-of select="@usageCommitted"/></td>
68
             <td><b>Maximum:</b> <xsl:value-of select="@usageMax"/></td>
69
             <td><b>Used:</b> <xsl:value-of select="@usageUsed"/></td>
70
           </tr>
71
    </table>
72
  </xsl:template>
73
59
  <xsl:template match="connector">
74
  <xsl:template match="connector">
60
     <b>Connector -- </b> <xsl:value-of select="@name"/><br />
75
     <b>Connector -- </b> <xsl:value-of select="@name"/><br />
61
76
Lines 66-75 Link Here
66
81
67
  <xsl:template match="threadInfo">
82
  <xsl:template match="threadInfo">
68
    <table><tr>
83
    <table><tr>
69
             <td><b>threadInfo </b></td>
84
             <td><b>threadInfo</b></td>
70
             <td><b>maxThreads:</b> <xsl:value-of select="@maxThreads"/></td>
85
             <td><b>maxThreads:</b> <xsl:value-of select="@maxThreads"/></td>
71
             <td><b>minSpareThreads:</b> <xsl:value-of select="@minSpareThreads"/></td>
72
             <td><b>maxSpareThreads:</b> <xsl:value-of select="@maxSpareThreads"/></td>
73
             <td><b>currentThreadCount:</b> <xsl:value-of select="@currentThreadCount"/></td>
86
             <td><b>currentThreadCount:</b> <xsl:value-of select="@currentThreadCount"/></td>
74
             <td><b>currentThreadsBusy:</b> <xsl:value-of select="@currentThreadsBusy"/></td>
87
             <td><b>currentThreadsBusy:</b> <xsl:value-of select="@currentThreadsBusy"/></td>
75
           </tr>
88
           </tr>

Return to bug 54143