/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jk.status;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tomcat.util.digester.Digester;
/**
* mod_jk 1.2.19 document:
*
*
* <?xml version="1.0" encoding="UTF-8" ?>
* <jk:status xmlns:jk="http://tomcat.apache.org">
* <jk:server name="localhost" port="2010" software="Apache/2.0.58 (Unix) mod_jk/1.2.19-dev" version="1.2.19" />
* <jk:balancers>
* <jk:balancer id="0" name="loadbalancer" type="lb" sticky="True" stickyforce="False" retries="2" recover="60" >
* <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" />
* <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" />
* <jk:map type="Wildchar" uri="/ClusterSession*" context="/ClusterSession*" />
* <jk:map type="Wildchar" uri="/ClusterTest*" context="/ClusterTest*" />
* <jk:map type="Wildchar" uri="/test*" context="/test*" />
* </jk:balancer>
* </jk:balancers>
* </jk:status>
*
*
* mod_jk 1.2.20 document:
*
* <?xml version="1.0" encoding="UTF-8" ?>
* <jk:status xmlns:jk="http://tomcat.apache.org">
* <jk:server
* name="127.0.0.1"
* port="2080"
* software="Apache/2.0.59 (Unix) mod_jk/1.2.20-dev"
* version="1.2.20"/>
* <jk:balancers>
* <jk:balancer
* name="loadbalancer"
* type="lb"
* sticky="True"
* stickyforce="False"
* retries="2"
* recover="60"
* method="Request"
* lock="Optimistic"
* good="2"
* degraded="0"
* bad="0"
* busy="0"
* max_busy="0">
* <jk:member
* name="node01"
* type="ajp13"
* host="localhost"
* port="7309"
* address="127.0.0.1:7309"
* activation="ACT"
* lbfactor="1"
* jvm_route="node01"
* redirect=""
* domain=""
* distance="0"
* state="N/A"
* lbmult="1"
* lbvalue="0"
* elected="0"
* errors="0"
* clienterrors="0"
* transferred="0"
* readed="0"
* busy="0"
* maxbusy="0"
* time-to-recover="0"/>
* <jk:member
* name="node02"
* type="ajp13"
* host="localhost"
* port="7409"
* address="127.0.0.1:7409"
* activation="ACT"
* lbfactor="1"
* jvm_route="node02"
* redirect=""
* domain=""
* distance="0"
* state="N/A"
* lbmult="1"
* lbvalue="0"
* elected="0"
* errors="0"
* clienterrors="0"
* transferred="0"
* readed="0"
* busy="0"
* maxbusy="0"
* time-to-recover="0"/>
* <jk:map
* type="Wildchar"
* uri="/ClusterTest*"
* source="JkMount"/>
* <jk:map
* type="Wildchar"
* uri="/myapps*"
* source="JkMount"/>
* <jk:map
* type="Wildchar"
* uri="/last*"
* source="JkMount"/>
* </jk:balancer>
* </jk:balancers>
* </jk:status>
*
*
*
*
* mod_jk 1.2.24 runtime state N/A changed to OK/IDLE:
*
* state="OK/IDLE"
*
* @author Peter Rossbach
* @version $Revision: 753168 $ $Date: 2009-03-13 09:46:29 +0100 (Fri, 13 Mar 2009) $
* @since 5.5.10
*/
public class JkStatusParser {
private static Log log = LogFactory.getLog(JkStatusParser.class);
/**
* The descriptive information about this implementation.
*/
private static final String info = "org.apache.jk.status.JkStatusParser/1.1";
/**
* Return descriptive information about this implementation and the
* corresponding version number, in the format
* <description>/<version>
.
*/
public String getInfo() {
return (info);
}
/**
* The Digester
instance used to parse registry descriptors.
*/
public static final Digester digester = createDigester();
public static Digester getDigester() {
return digester;
}
/**
* Create and configure the Digester we will be using for setup mod_jk jk status page.
*/
public static Digester createDigester() {
long t1 = System.currentTimeMillis();
// Initialize the digester
Digester digester = new Digester();
digester.setValidating(false);
digester.setClassLoader(JkStatus.class.getClassLoader());
// parse status
digester.addObjectCreate("jk:status", "org.apache.jk.status.JkStatus",
"className");
digester.addSetProperties("jk:status");
digester.addObjectCreate("jk:status/jk:server",
"org.apache.jk.status.JkServer", "className");
digester.addSetProperties("jk:status/jk:server");
digester.addSetNext("jk:status/jk:server", "setServer",
"org.apache.jk.status.JkServer");
digester.addObjectCreate("jk:status/jk:software",
"org.apache.jk.status.JkSoftware", "className");
digester.addSetProperties("jk:status/jk:software");
digester.addSetNext("jk:status/jk:software", "setSoftware",
"org.apache.jk.status.JkSoftware");
digester.addObjectCreate("jk:status/jk:result",
"org.apache.jk.status.JkResult", "className");
digester.addSetProperties("jk:status/jk:result");
digester.addSetNext("jk:status/jk:result", "setResult",
"org.apache.jk.status.JkResult");
digester.addObjectCreate("jk:status/jk:balancers/jk:balancer",
"org.apache.jk.status.JkBalancer", "className");
digester.addSetProperties("jk:status/jk:balancers/jk:balancer");
digester.addSetNext("jk:status/jk:balancers/jk:balancer",
"addBalancer", "org.apache.jk.status.JkBalancer");
digester.addObjectCreate(
"jk:status/jk:balancers/jk:balancer/jk:member",
"org.apache.jk.status.JkBalancerMember", "className");
digester
.addSetProperties("jk:status/jk:balancers/jk:balancer/jk:member");
digester.addSetNext("jk:status/jk:balancers/jk:balancer/jk:member",
"addBalancerMember", "org.apache.jk.status.JkBalancerMember");
digester.addObjectCreate("jk:status/jk:balancers/jk:balancer/jk:map",
"org.apache.jk.status.JkBalancerMapping", "className");
digester.addSetProperties("jk:status/jk:balancers/jk:balancer/jk:map");
digester.addSetNext("jk:status/jk:balancers/jk:balancer/jk:map",
"addBalancerMapping", "org.apache.jk.status.JkBalancerMapping");
long t2 = System.currentTimeMillis();
if (log.isDebugEnabled())
log.debug("Digester for apache mod_jk jkstatus page is created "
+ (t2 - t1));
return (digester);
}
}