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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.apache.jk.status;
19 import org.apache.commons.logging.Log;
20 import org.apache.commons.logging.LogFactory;
21 import org.apache.tomcat.util.digester.Digester;
24 * mod_jk 1.2.19 document:<br/>
27 * <?xml version="1.0" encoding="UTF-8" ?>
28 * <jk:status xmlns:jk="http://tomcat.apache.org">
29 * <jk:server name="localhost" port="2010" software="Apache/2.0.58 (Unix) mod_jk/1.2.19-dev" version="1.2.19" />
30 * <jk:balancers>
31 * <jk:balancer id="0" name="loadbalancer" type="lb" sticky="True" stickyforce="False" retries="2" recover="60" >
32 * <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" />
33 * <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" />
34 * <jk:map type="Wildchar" uri="/ClusterSession*" context="/ClusterSession*" />
35 * <jk:map type="Wildchar" uri="/ClusterTest*" context="/ClusterTest*" />
36 * <jk:map type="Wildchar" uri="/test*" context="/test*" />
37 * </jk:balancer>
38 * </jk:balancers>
42 * mod_jk 1.2.20 document:<br/>
44 * <?xml version="1.0" encoding="UTF-8" ?>
45 * <jk:status xmlns:jk="http://tomcat.apache.org">
49 * software="Apache/2.0.59 (Unix) mod_jk/1.2.20-dev"
50 * version="1.2.20"/>
51 * <jk:balancers>
71 * address="127.0.0.1:7309"
88 * time-to-recover="0"/>
94 * address="127.0.0.1:7409"
111 * time-to-recover="0"/>
114 * uri="/ClusterTest*"
115 * source="JkMount"/>
119 * source="JkMount"/>
123 * source="JkMount"/>
124 * </jk:balancer>
125 * </jk:balancers>
131 * mod_jk 1.2.24 runtime state N/A changed to OK/IDLE:<br/>
135 * @author Peter Rossbach
136 * @version $Revision: 753168 $ $Date: 2009-03-13 09:46:29 +0100 (Fri, 13 Mar 2009) $
139 public class JkStatusParser {
140 private static Log log = LogFactory.getLog(JkStatusParser.class);
143 * The descriptive information about this implementation.
145 private static final String info = "org.apache.jk.status.JkStatusParser/1.1";
148 * Return descriptive information about this implementation and the
149 * corresponding version number, in the format
150 * <code><description>/<version></code>.
152 public String getInfo() {
159 * The <code>Digester</code> instance used to parse registry descriptors.
161 public static final Digester digester = createDigester();
163 public static Digester getDigester() {
168 * Create and configure the Digester we will be using for setup mod_jk jk status page.
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());
178 digester.addObjectCreate("jk:status", "org.apache.jk.status.JkStatus",
180 digester.addSetProperties("jk:status");
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");
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");
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");
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");
206 digester.addObjectCreate(
207 "jk:status/jk:balancers/jk:balancer/jk:member",
208 "org.apache.jk.status.JkBalancerMember", "className");
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");
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");
220 long t2 = System.currentTimeMillis();
221 if (log.isDebugEnabled())
222 log.debug("Digester for apache mod_jk jkstatus page is created "