bottleneck testcase based on rubbos
[bottlenecks.git] / rubbos / app / tomcat-connectors-1.2.32-src / jkstatus / src / share / org / apache / jk / status / JkStatusParser.java
1 /*
2  *  Licensed to the Apache Software Foundation (ASF) under one or more
3  *  contributor license agreements.  See the NOTICE file distributed with
4  *  this work for additional information regarding copyright ownership.
5  *  The ASF licenses this file to You under the Apache License, Version 2.0
6  *  (the "License"); you may not use this file except in compliance with
7  *  the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  */
17 package org.apache.jk.status;
18
19 import org.apache.commons.logging.Log;
20 import org.apache.commons.logging.LogFactory;
21 import org.apache.tomcat.util.digester.Digester;
22
23 /**
24  * mod_jk 1.2.19 document:<br/>
25  * <code>
26  *
27  *  &lt;?xml version="1.0" encoding="UTF-8" ?&gt;
28  *  &lt;jk:status xmlns:jk="http://tomcat.apache.org"&gt;
29  *    &lt;jk:server name="localhost" port="2010" software="Apache/2.0.58 (Unix) mod_jk/1.2.19-dev" version="1.2.19" /&gt;
30  *    &lt;jk:balancers&gt;
31  *    &lt;jk:balancer id="0" name="loadbalancer" type="lb" sticky="True" stickyforce="False" retries="2" recover="60" &gt;
32  *        &lt;jk:member id="0" name="node01" type="ajp13" host="localhost" port="20012" address="127.0.0.1:20012" activation="ACT" state="N/A" distance="0" lbfactor="1" lbmult="1" lbvalue="0" elected="0" errors="0" transferred="0" readed="0" busy="0" maxbusy="0" jvm_route="node01" /&gt;
33  *        &lt;jk:member id="1" name="node02" type="ajp13" host="localhost" port="20022" address="127.0.0.1:20022" activation="ACT" state="N/A" distance="0" lbfactor="1" lbmult="1" lbvalue="0" elected="0" errors="0" transferred="0" readed="0" busy="0" maxbusy="0" jvm_route="node02" /&gt;
34  *      &lt;jk:map type="Wildchar" uri="/ClusterSession*" context="/ClusterSession*" /&gt;
35  *      &lt;jk:map type="Wildchar" uri="/ClusterTest*" context="/ClusterTest*" /&gt;
36  *      &lt;jk:map type="Wildchar" uri="/test*" context="/test*" /&gt;
37  *    &lt;/jk:balancer&gt;
38  *    &lt;/jk:balancers&gt;
39  *  &lt;/jk:status&gt;
40  * </code>
41  * <br/>
42  * mod_jk 1.2.20 document:<br/>
43  * <code>
44  * &lt;?xml version="1.0" encoding="UTF-8" ?&gt;
45  * &lt;jk:status xmlns:jk="http://tomcat.apache.org"&gt;
46  * &lt;jk:server
47  *  name="127.0.0.1"
48  *  port="2080"
49  *  software="Apache/2.0.59 (Unix) mod_jk/1.2.20-dev"
50  *  version="1.2.20"/&gt;
51  * &lt;jk:balancers&gt;
52  *   &lt;jk:balancer
53  *    name="loadbalancer"
54  *    type="lb"
55  *    sticky="True"
56  *    stickyforce="False"
57  *    retries="2"
58  *    recover="60"
59  *    method="Request"
60  *    lock="Optimistic"
61  *    good="2"
62  *    degraded="0"
63  *    bad="0"
64  *    busy="0"
65  *    max_busy="0"&gt;
66  *      &lt;jk:member
67  *        name="node01"
68  *        type="ajp13"
69  *        host="localhost"
70  *        port="7309"
71  *        address="127.0.0.1:7309"
72  *        activation="ACT"
73  *        lbfactor="1"
74  *        jvm_route="node01"
75  *        redirect=""
76  *        domain=""
77  *        distance="0"
78  *        state="N/A"
79  *        lbmult="1"
80  *        lbvalue="0"
81  *        elected="0"
82  *        errors="0"
83  *        clienterrors="0"
84  *        transferred="0"
85  *        readed="0"
86  *        busy="0"
87  *        maxbusy="0"
88  *        time-to-recover="0"/&gt;
89  *      &lt;jk:member
90  *        name="node02"
91  *        type="ajp13"
92  *        host="localhost"
93  *        port="7409"
94  *        address="127.0.0.1:7409"
95  *        activation="ACT"
96  *        lbfactor="1"
97  *        jvm_route="node02"
98  *        redirect=""
99  *        domain=""
100  *        distance="0"
101  *        state="N/A"
102  *        lbmult="1"
103  *        lbvalue="0"
104  *        elected="0"
105  *        errors="0"
106  *        clienterrors="0"
107  *        transferred="0"
108  *        readed="0"
109  *        busy="0"
110  *        maxbusy="0"
111  *        time-to-recover="0"/&gt;
112  *      &lt;jk:map
113  *        type="Wildchar"
114  *        uri="/ClusterTest*"
115  *        source="JkMount"/&gt;
116  *      &lt;jk:map
117  *        type="Wildchar"
118  *        uri="/myapps*"
119  *        source="JkMount"/&gt;
120  *      &lt;jk:map
121  *        type="Wildchar"
122  *        uri="/last*"
123  *        source="JkMount"/&gt;
124  *  &lt;/jk:balancer&gt;
125  * &lt;/jk:balancers&gt;
126  * &lt;/jk:status&gt;
127  *
128  *
129  * </code>
130  * <br/>
131  * mod_jk 1.2.24 runtime state N/A changed to OK/IDLE:<br/>
132  * <code>
133  *        state="OK/IDLE"
134  * </code>
135  * @author Peter Rossbach
136  * @version $Revision: 753168 $ $Date: 2009-03-13 09:46:29 +0100 (Fri, 13 Mar 2009) $
137  * @since 5.5.10
138  */
139 public class JkStatusParser {
140     private static Log log = LogFactory.getLog(JkStatusParser.class);
141
142     /**
143      * The descriptive information about this implementation.
144      */
145     private static final String info = "org.apache.jk.status.JkStatusParser/1.1";
146
147     /**
148      * Return descriptive information about this implementation and the
149      * corresponding version number, in the format
150      * <code>&lt;description&gt;/&lt;version&gt;</code>.
151      */
152     public String getInfo() {
153
154         return (info);
155
156     }
157
158     /**
159      * The <code>Digester</code> instance used to parse registry descriptors.
160      */
161     public static final Digester digester = createDigester();
162
163     public static Digester getDigester() {
164         return digester;
165     }
166
167     /**
168      * Create and configure the Digester we will be using for setup mod_jk jk status page.
169      */
170     public static Digester createDigester() {
171         long t1 = System.currentTimeMillis();
172         // Initialize the digester
173         Digester digester = new Digester();
174         digester.setValidating(false);
175         digester.setClassLoader(JkStatus.class.getClassLoader());
176
177         // parse status
178         digester.addObjectCreate("jk:status", "org.apache.jk.status.JkStatus",
179                 "className");
180         digester.addSetProperties("jk:status");
181
182         digester.addObjectCreate("jk:status/jk:server",
183                 "org.apache.jk.status.JkServer", "className");
184         digester.addSetProperties("jk:status/jk:server");
185         digester.addSetNext("jk:status/jk:server", "setServer",
186                 "org.apache.jk.status.JkServer");
187
188         digester.addObjectCreate("jk:status/jk:software",
189                 "org.apache.jk.status.JkSoftware", "className");
190         digester.addSetProperties("jk:status/jk:software");
191         digester.addSetNext("jk:status/jk:software", "setSoftware",
192                 "org.apache.jk.status.JkSoftware");
193
194         digester.addObjectCreate("jk:status/jk:result",
195                 "org.apache.jk.status.JkResult", "className");
196         digester.addSetProperties("jk:status/jk:result");
197         digester.addSetNext("jk:status/jk:result", "setResult",
198                 "org.apache.jk.status.JkResult");
199
200         digester.addObjectCreate("jk:status/jk:balancers/jk:balancer",
201                 "org.apache.jk.status.JkBalancer", "className");
202         digester.addSetProperties("jk:status/jk:balancers/jk:balancer");
203         digester.addSetNext("jk:status/jk:balancers/jk:balancer",
204                 "addBalancer", "org.apache.jk.status.JkBalancer");
205
206         digester.addObjectCreate(
207                 "jk:status/jk:balancers/jk:balancer/jk:member",
208                 "org.apache.jk.status.JkBalancerMember", "className");
209         digester
210                 .addSetProperties("jk:status/jk:balancers/jk:balancer/jk:member");
211         digester.addSetNext("jk:status/jk:balancers/jk:balancer/jk:member",
212                 "addBalancerMember", "org.apache.jk.status.JkBalancerMember");
213
214         digester.addObjectCreate("jk:status/jk:balancers/jk:balancer/jk:map",
215                 "org.apache.jk.status.JkBalancerMapping", "className");
216         digester.addSetProperties("jk:status/jk:balancers/jk:balancer/jk:map");
217         digester.addSetNext("jk:status/jk:balancers/jk:balancer/jk:map",
218                 "addBalancerMapping", "org.apache.jk.status.JkBalancerMapping");
219
220         long t2 = System.currentTimeMillis();
221         if (log.isDebugEnabled())
222             log.debug("Digester for apache mod_jk jkstatus page is created "
223                     + (t2 - t1));
224         return (digester);
225
226     }
227
228 }