diff options
Diffstat (limited to 'rubbos/app/tomcat-connectors-1.2.32-src/tools')
14 files changed, 1796 insertions, 0 deletions
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/.htaccess b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/.htaccess new file mode 100644 index 00000000..61a2d610 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/.htaccess @@ -0,0 +1,19 @@ +# Directives controlling the display of server-generated directory listings. +IndexOptions DescriptionWidth=34 +AddDescription "OpenPGP ASCII armored signature" .asc +AddDescription "MD5 checksum file" .md5 +AddDescription "SHA1 checksum file" .sha1 +AddDescription "SHA256 checksum file" .sha256 +AddDescription "ZIP compressed archive" .zip +AddDescription "GZIP compressed document" .gz +AddDescription "Unix tar archive" .tar +AddDescription "GZIP compressed tar archive" .tgz +AddDescription "plain text document" .txt +AddDescription "Unified diff patch" .diff +AddDescription "shared object file" .so +AddDescription "dynamically linked library" .dll +AddIcon /icons/generic.sec.gif .asc .key +AddIcon /icons/patch.gif .diff +AddIcon /icons/screw2.gif .md5 +AddIcon /icons/screw2.gif .sha1 +AddIcon /icons/screw2.gif .sha256 diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/HEADER.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/HEADER.html new file mode 100644 index 00000000..f8e90e6f --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/HEADER.html @@ -0,0 +1,20 @@ +<h1>Index of /dist/tomcat/tomcat-connectors/jk</h1> + +<h2>Apache Tomcat Connectors <u>Source Code</u> Distributions</h2> + +<p>This download page includes <strong>only the sources</strong> to compile + and build Apache Tomcat Connectors yourself with the proper tools. Download + the precompiled distribution for your platform from + <a href="binaries/">binaries/</a>. +</p> + +<h2>Important Notices</h2> + +<ul> +<li><a href="#mirrors">Download from your nearest mirror site!</a></li> +<li><a href="#binaries">Binary Releases</a></li> +<li><a href="#releases">Current Releases</a></li> +<li><a href="#archive">Older Releases</a></li> +<li><a href="#sig">PGP Signatures</a></li> +</ul> + diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/README.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/README.html new file mode 100644 index 00000000..7f9ae7fb --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/README.html @@ -0,0 +1,68 @@ +<h2><a name="mirrors">Download from your + <a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/"> +nearest mirror site!</a></a></h2> + +<p>Do not download from www.apache.org. Please use a mirror site + to help us save apache.org bandwidth. + <a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/"> + Go here to find your nearest mirror.</a> +</p> + +<h2><a name="binaries">Binary Releases</a></h2> +<p>Are available in the <a href="binaries/">binaries/</a> directory. + Every binary distribution contains an install script. See README + for details. +</p> + +<h2><a name="releases">Current Releases</a></h2> +<p>For details on current releases, please see the + <a href="http://tomcat.apache.org/download-connectors.cgi">Apache Tomcat + Connectors Download Page</a>. +</p> +<p>Note; the -src.zip versions of Apache Tomcat Connectors are nearly identical to the + .tar.gz versions. However, they offer the source files in DOS/Windows + CR/LF text format, and include the Winows build files. + These -src.zip files <strong>do NOT contain binaries!</strong> + See the <a href="binaries/windows/">binaries/windows/</a> + directory for the Windows binary distributions. +</p> + +<h2><a name="archive">Older Releases</a></h2> +<p>Only current, recommended releases are available on www.apache.org + and the mirror sites. Older releases can be obtained from the + <a href="http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/">archive site</a>. +</p> + +<h2><a name="sig">PGP Signatures</a></h2> +<p>All of the release distribution packages have been digitally signed + (using PGP or GPG) by the Apache Tomcat Group members that constructed them. + There will be an accompanying <SAMP><EM>distribution</EM>.asc</SAMP> file + in the same directory as the distribution. The PGP keys can be found + at the MIT key repository and within this project's + <a href="http://www.apache.org/dist/tomcat/tomcat-connectors/KEYS">KEYS file</a>. +</p> + +<p>Always use the signature files to verify the authenticity + of the distribution, <i>e.g.</i>,</p> + +<pre> +% pgpk -a KEYS +% pgpv tomcat-connectors-1.2.32-src.tar.gz.asc +<i>or</i>, +% pgp -ka KEYS +% pgp tomcat-connectors-1.2.32-src.tar.gz.asc +<i>or</i>, +% gpg --import KEYS +% gpg --verify tomcat-connectors-1.2.32-src.tar.gz.asc +</pre> + +<p>We offer MD5 and SHA1 hashes as an alternative to validate the integrity + of the downloaded files. A unix program called <code>md5</code> or + <code>md5sum</code> is included in many unix distributions. It is + also available as part of <a + href="http://www.gnu.org/software/textutils/textutils.html">GNU + Textutils</a>. Windows users can get binary md5 programs from <a + href="http://www.fourmilab.ch/md5/">here</a>, <a + href="http://www.pc-tools.net/win32/freeware/console/">here</a>, or + <a href="http://www.slavasoft.com/fsum/">here</a>. +</p> diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/HEADER.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/HEADER.html new file mode 100644 index 00000000..7da51e1c --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/HEADER.html @@ -0,0 +1,12 @@ +<h1>Index of /dist/tomcat/tomcat-connectors/jk/binaries/windows</h1> + +<h2>Important Notices</h2> +<ul> +<li><a href="#warnings">Windows Users, Read These First...</a></li> +<li><a href="#released">Obtain the Current Stable Release</a><br/></li> +<li><a href="#source">Debugging and Source Code</a></li> +</ul> + +<h2>Download from your +<a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/binaries/windows/"> +nearest mirror site!</a></h2> diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/README.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/README.html new file mode 100644 index 00000000..a13ce392 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/README.html @@ -0,0 +1,60 @@ +<h2><a name="mirrors">Download from your + <a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/binaries/windows/">nearest mirror site!</a></a></h2> + +<p><strong>Please</strong> do not download from www.apache.org. Use a mirror + site to help us save apache.org bandwidth and to speed up your download. + <a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/binaries/windows/"> + Click here</a> to find your nearest mirror.</p> + +<h2><a name="warnings">Windows Users, Read These First...</a></h2> + +<h3><strong>Warning:</strong> TCP/IP networking must be installed</h3> + +<p>TCP/IP must be correctly installed, configured and running in + order to install and use Apache Tomcat Connectors on Windows.</p> + +<h3>If you are installing on Windows XP prior to Service Pack 3</h3> + +<p>Install the Windows XP Service Pack 3. Refer to + <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;317949"> + KB article 317949</a> if you need the gory details exactly why you must + not run the original Windows XP or SP1. +</p> + +<h3><strong>Warning</strong> about the Quality of Service driver</h3> + +<p>We suggest disabling the "Quality of Service" (or QoS) network driver from + Microsoft if you primarily use the machine as an Web Server, as connector + does not support the QoS extensions to the WinSock API.</p> + +<h3><strong>Warning</strong> about Firewall and similar software</h3> + +<p>Most Firewall programs, Web Spam filters and other TCP/IP driver-based + products (including spyware!) do not correctly implement the entire WinSock + API. The shortcuts taken by the developers of such products could cause + connector to fail. +</p> + +<h2><a name="released">The current stable release is 1.2.32</a></h2> + +<p>See the Apache Tomcat Connectors +<a href="http://tomcat.apache.org/connectors-doc/miscellaneous/changelog.html">changelog</a> +for the complete list of features and bugs fixed in this release.</p> + +<h2><a name="source">Debugging and Source Code</a></h2> + +<p>You can find a corresponding -symbols.zip archive of the + debugging databases in the <a href="symbols/#symbols">symbols/</a> + directory, these are typically not needed. This -symbols.zip + archive can be unpacked into the web server installation directory, providing + all of the .pdb diagnostic files allowing most Windows debugging tools + (and the Dr. Watson utility) to produce useful crash analysis.</p> + +<p>You will find the source code package in the + <a href="../../../jk/">/dist/tomcat-connectors/jk/</a> source tree. The -src.zip file + contains <strong>only</strong> source and build files, and contains + <strong>no</strong> binary executable files.</p> + +<p>This binary release was created with Microsoft Windows DDK 7.1, + using a more recent Platform SDK. +</p> diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/HEADER.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/HEADER.html new file mode 100644 index 00000000..1f1166de --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/HEADER.html @@ -0,0 +1,11 @@ +<h1>Index of /dist/tomcat/tomcat-connectors/jk/binaries/windows/symbols</h1> + +<h2>Important Notices</h2> +<ul> +<li><a href="../#warnings">Windows Users, Read These First...</a></li> +<li><a href="#symbols">Binary Diagnostic Symbol Downloads</a></li> +</ul> + +<h2>Download from your +<a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/binaries/windows/symbols/"> +nearest mirror site!</a></h2> diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/README.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/README.html new file mode 100644 index 00000000..f149a646 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/README.html @@ -0,0 +1,25 @@ +<h2><a name="mirrors">Download from your +<a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/binaries/windows/symbols/"> +nearest mirror site!</a></a></h2> + +<h2><a name="symbols">Binary Diagnostic Symbol Downloads</a></h2> + +<p>We now distribute a -symbols.zip file containing the precise + debugging symbols corresponding to each released binary distribution. + For the typical user, there is no need to download these archives. +</p> + +<p>These -symbols.zip packages contain the .pdb diagnostic symbol files (which + correpsond to the distributed binary release) and can be used by nearly all + modern Windows debugging tools, including the freely available WinDbg utility. + They are most useful for the core developers to review crash dumps generated + by Dr. Watson if Apache experiences a General Protection Fault. They also + provide additional backtrace details in Dr. Watson crash log files, if they + are installed into the Apache directory which is experiencing General + Protection Fault or other crash issues. +</p> + +<p>If you don't understand a word of this, and a developer did not personally + ask you to install them to help troubleshoot a problem, please trust that + you do not need these files to install or run Apache Tomcat Connectors. +</p> diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkbindist.sh b/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkbindist.sh new file mode 100755 index 00000000..881fb67b --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkbindist.sh @@ -0,0 +1,153 @@ +#!/bin/ksh + +# 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. + + +# Make sure to set your path so that we can find +# the following binaries: +# cd, mkdir, cp, rm, find, zip + +prefix="tomcat-connectors" +tools="`pwd`" +sign="" + +#################### NO CHANGE BELOW THIS LINE ############## + +#################### FUNCTIONS ############## + +usage() { + echo "Usage:: $0 -v VERSION -w WEBSERVER -o OS -a ARCH <module file>" + echo " -v: version to package" + echo " -w: package for web server" + echo " -o: Operating System" + echo " -a: Architecture" + echo " -p: GNU PG passphrrase used for signing" + echo " -k: ID of GNU PG key to use for signing" +} + +while getopts :v:w:o:a:p:k: c +do + case $c in + v) version=$OPTARG;; + w) websrv=$OPTARG;; + k) sign="--default-key=$OPTARG $sign";; + p) sign="--passphrase=$OPTARG $sign";; + o) opsys=$OPTARG;; + a) arch=$OPTARG;; + \:) usage + exit 2;; + \?) usage + exit 2;; + esac +done +shift `expr $OPTIND - 1` + +if [ -z "$version" -o -z "$websrv" ] +then + usage + exit 2 +fi +if [ -z "$opsys" ] +then + opsys="`uname -s | tr [A-Z] [a-z]`" + case "$opsys" in + cygwin*) + opsys=windows + ;; + esac +fi +if [ -z "$arch" ] +then + arch="`uname -m`" +fi + +if [ ! -f "$1" ] +then + usage + exit 2 +fi + +case "$websrv" in + httpd*) + webdesc="Apache HTTP Server" + ;; + iis*) + webdesc="Microsoft IIS Web Server" + ;; + netscape*|nsapi*) + webdesc="Oracle iPlanet Web Server" + ;; + *) + echo "Unknown web server: $webserv" + echo " Supported are: httpd, iis, nsapi" + ;; +esac + +dist=${prefix}-${version}-${opsys}-${arch}-${websrv} +dtop=${tools}/.. +copy="KEYS LICENSE NOTICE" + +rm -f ${copy} 2>/dev/null +rm -f ${dist} 2>/dev/null +rm -f ${dist}.* 2>/dev/null +cat << EOF > README + 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. + + + +Apache Tomcat Connectors - $version + +Here your'll find module binaries for $webdesc. +Check the online documentation at http://tomcat.apache.org/connectors-doc/ +for installation instructions. + +The Apache Tomcat Project +http://tomcat.apache.org +EOF + +umask 022 +for i in ${copy} +do + if [ -f ${dtop}/$i ] + then + cp ${dtop}/$i . + else + cp ${dtop}/native/$i . + fi +done + +# Pack +zip -9 -j ${dist}.zip $1 README ${copy} + +# Sign +archive=${dist}.zip +. ${tools}/signfile.sh ${sign} $archive + +# Cleanup +rm -f README ${copy} 2>/dev/null diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkrelease.sh b/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkrelease.sh new file mode 100755 index 00000000..d92b1c46 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkrelease.sh @@ -0,0 +1,327 @@ +#!/bin/ksh + +# 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. + + +# Make sure to set your path so that we can find +# the following binaries: +# cd, mkdir, cp, rm, find +# svn +# ant +# libtoolize, aclocal, autoheader, automake, autoconf +# tar, zip, gzip +# gpg +# And any one of: w3m, elinks, links (links2) + +SVNROOT="http://svn.apache.org/repos/asf" +SVNPROJ="tomcat/jk" +JK_CVST="tomcat-connectors" +JK_OWNER="root" +JK_GROUP="bin" +JK_TOOLS="`pwd`" + +COPY_TOP="KEYS" +COPY_JK="BUILD.txt native jkstatus support tools xdocs" +COPY_NATIVE="LICENSE NOTICE" +COPY_BUILD="docs" +COPY_CONF="httpd-jk.conf uriworkermap.properties workers.properties workers.properties.minimal" +SIGN_OPTS="" + +#################### NO CHANGE BELOW THIS LINE ############## + +#################### FUNCTIONS ############## + +usage() { + echo "Usage:: $0 -v VERSION [-f] [-r revision] [-t tag | -b BRANCH | -T | -d DIR]" + echo " -v: version to package" + echo " -f: force, do not validate tag against version" + echo " -t: tag to use if different from version" + echo " -r: revision to package" + echo " -b: package from branch BRANCH" + echo " -T: package from trunk" + echo " -d: package from local directory" + echo " -p: GNU PG passphrrase used for signing" + echo " -k: ID of GNU PG key to use for signing" +} + +copy_files() { + src=$1 + target=$2 + list="$3" + + mkdir -p $target + for item in $list + do + echo "Copying $item from $src ..." + cp -pr $src/$item $target/ + done +} + +#################### MAIN ############## + +conflict=0 +while getopts :v:t:r:b:d:p:k:Tf c +do + case $c in + v) version=$OPTARG;; + t) tag=$OPTARG + conflict=$(($conflict+1));; + r) revision=$OPTARG;; + k) SIGN_OPTS="--default-key=$OPTARG $SIGN_OPTS";; + p) SIGN_OPTS="--passphrase=$OPTARG $SIGN_OPTS";; + b) branch=$OPTARG + conflict=$(($conflict+1));; + T) trunk=trunk + conflict=$(($conflict+1));; + d) local_dir=$OPTARG + conflict=$(($conflict+1));; + f) force='y';; + \:) usage + exit 2;; + \?) usage + exit 2;; + esac +done +shift `expr $OPTIND - 1` + +if [ $conflict -gt 1 ] +then + usage + echo "Only one of the options '-t', '-b', '-T' and '-d' is allowed." + exit 2 +fi + +if [ -n "$local_dir" ] +then + echo "Caution: Packaging from directory!" + echo "Make sure the directory is committed." + answer="x" + while [ "$answer" != "y" -a "$answer" != "n" ] + do + echo "Do you want to proceed? [y/n]" + read answer + done + if [ "$answer" != "y" ] + then + echo "Aborting." + exit 4 + fi +fi + +if [ -z "$version" ] +then + usage + exit 2 +fi +if [ -n "$revision" ] +then + revision="-r $revision" +fi +if [ -n "$trunk" ] +then + JK_SVN_URL="${SVNROOT}/${SVNPROJ}/trunk" + svn_url_info="`svn help info | grep URL`" + if [ -n "$svn_url_info" ] + then + JK_SVN_INFO="${JK_SVN_URL}" + else + JK_SVN_INFO=. + fi + JK_REV=`svn info $revision $JK_SVN_INFO | awk '$1 == "Revision:" {print $2}'` + if [ -z "$JK_REV" ] + then + echo "No Revision found at '$JK_SVN_URL'" + exit 3 + fi + JK_SUFFIX=-${JK_REV} + JK_DIST=${JK_CVST}-${version}-dev${JK_SUFFIX}-src +elif [ -n "$branch" ] +then + JK_BRANCH=`echo $branch | sed -e 's#/#__#g'` + JK_SVN_URL="${SVNROOT}/${SVNPROJ}/branches/$branch" + JK_REV=`svn info $revision ${JK_SVN_URL} | awk '$1 == "Revision:" {print $2}'` + if [ -z "$JK_REV" ] + then + echo "No Revision found at '$JK_SVN_URL'" + exit 3 + fi + JK_SUFFIX=-${JK_BRANCH}-${JK_REV} + JK_DIST=${JK_CVST}-${version}-dev${JK_SUFFIX}-src +elif [ -n "$local_dir" ] +then + JK_SVN_URL="$local_dir" + JK_REV=`svn info $revision ${JK_SVN_URL} | awk '$1 == "Revision:" {print $2}'` + if [ -z "$JK_REV" ] + then + echo "No Revision found at '$JK_SVN_URL'" + exit 3 + fi + JK_SUFFIX=-local-`date +%Y%m%d%H%M%S`-${JK_REV} + JK_DIST=${JK_CVST}-${version}-dev${JK_SUFFIX}-src +else + JK_VER=$version + JK_TAG=`echo $version | sed -e 's#^#JK_#' -e 's#\.#_#g'` + if [ -n $tag ] + then + if [ -z $force ] + then + echo $tag | grep "^$JK_TAG" > /dev/null 2>&1 + if [ $? -gt 0 ] + then + echo "Tag '$tag' doesn't belong to version '$version'." + echo "Force using '-f' if you are sure." + exit 5 + fi + fi + JK_TAG=$tag + fi + JK_SVN_URL="${SVNROOT}/${SVNPROJ}/tags/${JK_TAG}" + JK_REV=`svn info $revision ${JK_SVN_URL} | awk '$1 == "Revision:" {print $2}'` + JK_SUFFIX=" ($JK_REV)" + JK_DIST=${JK_CVST}-${JK_VER}-src +fi + +echo "Using subversion URL: $JK_SVN_URL" +echo "Rolling into file $JK_DIST.*" +sleep 2 + +umask 022 + +rm -rf ${JK_DIST} +rm -rf ${JK_DIST}.tmp + +mkdir -p ${JK_DIST}.tmp +svn export $revision "${JK_SVN_URL}" ${JK_DIST}.tmp/jk +if [ $? -ne 0 ]; then + echo "svn export failed" + exit 1 +fi + +for item in ${COPY_TOP} +do + svn export $revision "${JK_SVN_URL}/${item}" ${JK_DIST}.tmp/${item} +done + +# Build documentation. +cd ${JK_DIST}.tmp/jk/xdocs +ant +cd ../../.. + +# Update version information +file=${JK_DIST}.tmp/jk/native/common/jk_version.h +cp -p $file $file.orig +sed -e 's/^#define JK_REVISION .*/#define JK_REVISION "'"$JK_SUFFIX"'"/' \ + $file.orig > $file +rm $file.orig + +# Copying things into the source distribution +copy_files ${JK_DIST}.tmp $JK_DIST "$COPY_TOP" +copy_files ${JK_DIST}.tmp/jk $JK_DIST "$COPY_JK" +copy_files ${JK_DIST}.tmp/jk/native $JK_DIST "$COPY_NATIVE" +copy_files ${JK_DIST}.tmp/jk/build $JK_DIST "$COPY_BUILD" +copy_files ${JK_DIST}.tmp/jk/conf $JK_DIST/conf "$COPY_CONF" + +# Remove extra directories and files +targetdir=${JK_DIST} +rm -rf ${targetdir}/xdocs/jk2 +rm -rf ${targetdir}/native/CHANGES.txt +rm -rf ${targetdir}/native/build.xml +rm -rf ${targetdir}/native/NOTICE +rm -rf ${targetdir}/native/LICENSE +find ${JK_DIST} -name .cvsignore -exec rm -rf \{\} \; +find ${JK_DIST} -name CVS -exec rm -rf \{\} \; +find ${JK_DIST} -name .svn -exec rm -rf \{\} \; + +cd ${JK_DIST}/native + +# Check for links, elinks or w3m +W3MOPTS="-dump -cols 80 -t 4 -S -O iso-8859-1 -T text/html" +ELNKOPTS="-dump -dump-width 80 -dump-charset iso-8859-1 -no-numbering -no-home" +LNKOPTS="-dump -width 80 -codepage iso-8859-1 -no-g -html-numbered-links 0" +failed=true +for tool in `echo "w3m elinks links"` +do + found=false + for dir in `echo ${PATH} | sed 's!^:!.:!;s!:$!:.!;s!::!:.:!g;s!:! !g'` + do + if [ -x ${dir}/${tool} ] + then + found=true + break + fi + done + + # Try to run it + if ${found} + then + case ${tool} in + w3m) + TOOL="w3m $W3MOPTS" + ;; + links) + TOOL="links $LNKOPTS" + ;; + elinks) + TOOL="elinks $ELNKOPTS" + ;; + esac + rm -f CHANGES + echo "Creating the CHANGES file using '$TOOL' ..." + ${TOOL} ../docs/miscellaneous/printer/changelog.html > CHANGES 2>/dev/null + if [ -f CHANGES -a -s CHANGES ] + then + failed=false + break + fi + fi +done +if [ ${failed} = "true" ] +then + echo "Can't convert html to text (CHANGES)" + exit 1 +fi + +# Export text docs +echo "Creating the NEWS file using '$TOOL' ..." +rm -f NEWS +touch NEWS +for news in `ls -r ../xdocs/news/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml` +do + print=`echo $news | sed -e 's#xdocs/news#docs/news/printer#' -e 's#\.xml#.html#'` + echo "Adding $print to NEWS file ..." + ${TOOL} $print >>NEWS +done +if [ ! -s NEWS ] +then + echo "Can't convert html to text (NEWS)" + exit 1 +fi + +# Generate configure et. al. +./buildconf.sh +cd ../../ + +# Pack +tar cfz ${JK_DIST}.tar.gz --owner="${JK_OWNER}" --group="${JK_GROUP}" ${JK_DIST} || exit 1 +perl ${JK_DIST}/tools/lineends.pl --cr ${JK_DIST} +zip -9 -r ${JK_DIST}.zip ${JK_DIST} + +# Create detached signature and verify it +archive=${JK_DIST}.tar.gz +. ${JK_TOOLS}/signfile.sh ${SIGN_OPTS} $archive +archive=${JK_DIST}.zip +. ${JK_TOOLS}/signfile.sh ${SIGN_OPTS} $archive + diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/lineends.pl b/rubbos/app/tomcat-connectors-1.2.32-src/tools/lineends.pl new file mode 100755 index 00000000..8a8b6666 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/lineends.pl @@ -0,0 +1,165 @@ +#!/usr/bin/perl + +# 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. + +# +# Heuristically converts line endings to the current OS's preferred format +# +# All existing line endings must be identical (e.g. lf's only, or even +# the accedental cr.cr.lf sequence.) If some lines end lf, and others as +# cr.lf, the file is presumed binary. If the cr character appears anywhere +# except prefixed to an lf, the file is presumed binary. If there is no +# change in the resulting file size, or the file is binary, the conversion +# is discarded. +# +# Todo: Handle NULL stdin characters gracefully. +# + +use IO::File; +use File::Find; + +# The ignore list is '-' seperated, with this leading hyphen and +# trailing hyphens in ever concatinated list below. +$ignore = "-"; + +# Image formats +$ignore .= "gif-jpg-jpeg-png-ico-bmp-"; + +# Archive formats +$ignore .= "tar-gz-z-zip-jar-war-bz2-tgz-"; + +# Many document formats +$ignore .= "eps-psd-pdf-ai-"; + +# Some encodings +$ignore .= "ucs2-ucs4-"; + +# Some binary objects +$ignore .= "class-so-dll-exe-obj-a-o-lo-slo-sl-dylib-"; + +# Some build env files +$ignore .= "mcp-xdc-ncb-opt-pdb-ilk-sbr-"; + +$preservedate = 1; + +$forceending = 0; + +$givenpaths = 0; + +$notnative = 0; + +while (defined @ARGV[0]) { + if (@ARGV[0] eq '--touch') { + $preservedate = 0; + } + elsif (@ARGV[0] eq '--nocr') { + $notnative = -1; + } + elsif (@ARGV[0] eq '--cr') { + $notnative = 1; + } + elsif (@ARGV[0] eq '--force') { + $forceending = 1; + } + elsif (@ARGV[0] eq '--FORCE') { + $forceending = 2; + } + elsif (@ARGV[0] =~ m/^-/) { + die "What is " . @ARGV[0] . " supposed to mean?\n\n" + . "Syntax:\t$0 [option()s] [path(s)]\n\n" . <<'OUTCH' +Where: paths specifies the top level directory to convert (default of '.') + options are; + + --cr keep/add one ^M + --nocr remove ^M's + --touch the datestamp (default: keeps date/attribs) + --force mismatched corrections (unbalanced ^M's) + --FORCE all files regardless of file name! + +OUTCH + } + else { + find(\&totxt, @ARGV[0]); + print "scanned " . @ARGV[0] . "\n"; + $givenpaths = 1; + } + shift @ARGV; +} + +if (!$givenpaths) { + find(\&totxt, '.'); + print "did .\n"; +} + +sub totxt { + $oname = $_; + $tname = '.#' . $_; + if (!-f) { + return; + } + @exts = split /\./; + if ($forceending < 2) { + while ($#exts && ($ext = pop(@exts))) { + if ($ignore =~ m|-$ext-|i) { + return; + } + } + } + @ostat = stat($oname); + $srcfl = new IO::File $oname, "r" or die; + $dstfl = new IO::File $tname, "w" or die; + binmode $srcfl; + if ($notnative) { + binmode $dstfl; + } + undef $t; + while (<$srcfl>) { + if (s/(\r*)\n$/\n/) { + $n = length $1; + if (!defined $t) { + $t = $n; + } + if (!$forceending && (($n != $t) || m/\r/)) { + print "mismatch in " .$oname. ":" .$n. " expected " .$t. "\n"; + undef $t; + last; + } + elsif ($notnative > 0) { + s/\n$/\r\n/; + } + } + print $dstfl $_; + } + if (defined $t && (tell $srcfl == tell $dstfl)) { + undef $t; + } + undef $srcfl; + undef $dstfl; + if (defined $t) { + unlink $oname or die; + rename $tname, $oname or die; + @anames = ($oname); + if ($preservedate) { + utime $ostat[9], $ostat[9], @anames; + } + chmod $ostat[2] & 07777, @anames; + chown $ostat[5], $ostat[6], @anames; + print "Converted file " . $oname . " to text in " . $File::Find::dir . "\n"; + } + else { + unlink $tname or die; + } +} diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/README.txt b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/README.txt new file mode 100644 index 00000000..898a9df5 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/README.txt @@ -0,0 +1,33 @@ + 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. + +This directory contains perl scripts which can be used to generate +statistics for tomcat requests and errors logged by mod_jk. + +See the comments in the scripts for more details. + +A great deal of statistical data is generated but at this time +only long term trend graphs are being created and no reports. +This is only a start. Many more graphs and reports could be +generated from the data. Please consider contributing back any +new reports or graphs you create. Thanks. + +Requires the following perl modules and libraries: + +GD 1.8.x graphics library http://www.boutell.com/gd/. +GD 1.4.x perl module. +GD Graph perl module. +GD TextUtil perl module. +StatisticsDescriptive perl module. diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_reports.pl b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_reports.pl new file mode 100755 index 00000000..4995c251 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_reports.pl @@ -0,0 +1,431 @@ +#!/usr/local/bin/perl + +# +# 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. +# + +# $Id: tomcat_reports.pl 466585 2006-10-21 22:16:34Z markt $ + +# Author: Glenn Nielsen + +# Script for generating reports and graphs using statistical data generated +# by the tomcat_trend.pl script. +# +# The following graphs are created: +# +# tomcat_request.png +# Long term trend graph of total number of tomcat requests handled +# +# tomcat_median.png +# Long term overall trend graph of tomcat request latency median +# +# tomcat_deviation.png +# Long term overall trend graph of tomcat request mean and standard deviation +# +# tomcat_error.png +# Long term trend graph of requests rejected by tomcat. Shows requests rejected +# when tomcat has no request processors available. Can be an indicator that tomcat +# is overloaded or having other scaling problems. +# +# tomcat_client.png +# Long term trend graph of requests forward to tomcat which were aborted by the remote +# client (browser). You will normally see some aborted requests. High numbers of these +# can be an indicator that tomcat is overloaded or there are requests which have very high +# latency. +# +# tomcat_reports.pl <directory where statistics are archived> <directory to place graphs/reports in> + +use GD; +use GD::Graph; +use GD::Graph::Data; +use GD::Graph::lines; +use GD::Graph::linespoints; +use Statistics::Descriptive; +use Time::Local; + +# Constants + +%MON = ('JAN' => 0, 'Jan' => 0, + 'FEB' => 1, 'Feb' => 1, + 'MAR' => 2, 'Mar' => 2, + 'APR' => 3, 'Apr' => 3, + 'MAY' => 4, 'May' => 4, + 'JUN' => 5, 'Jun' => 5, + 'JUL' => 6, 'Jul' => 6, + 'AUG' => 7, 'Aug' => 7, + 'SEP' => 8, 'Sep' => 8, + 'OCT' => 9, 'Oct' => 9, + 'NOV' => 10, 'Nov' => 10, + 'DEC' => 11, 'Dec' => 11,); + +@Months = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); + +# Check the args + +$archivedir = $ARGV[0]; +$reportdir = $ARGV[1]; + +die "Usage: $0 archivedir reportdir" + unless( length($archivedir) && ($reportdir) ); + +die "Archive Directory $archivedir doesn't exist" + unless( -d $archivedir); + +die "Report Directory $reportdir doesn't exist" + unless( -d $reportdir); + +# Read in data from file +die "Archive Directory $archivedir has no global.data file" + unless( -e "$archivedir/global.data" ); + +@Data = `tail -365 $archivedir/global.data`; +$numdays = $#Data; +$daycounter = $numdays; + +foreach( @Data ) { + $line = $_; + chomp($line); + ($date,$count,$median,$mean,$stddev,$min,$max,$client_gone,$tomcat_full) = split /\s+/,$line; + # print "$daycounter $date $count $median $mean $stdev $min $max $client_gone $tomcat_full\n"; + $start_time = $date unless $start_time>0; + $end_time = $date; + push @days,int($daycounter/7); + push @count,$count; + push @median,$median; + push @mean,$mean; + push @stddev,$mean+$stddev; + push @min,$min; + push @max,$max; + push @client_gone,$client_gone; + push @tomcat_full,$tomcat_full; + $daycounter--; +} + +($day,$mon,$year) = (localtime($start_time))[3..5]; +$year += 1900; +$startdate = "$Months[$mon] $day, $year"; +($day,$mon,$year) = (localtime($end_time))[3..5]; +$year += 1900; +$enddate = "$Months[$mon] $day, $year"; + +# Output request trend graph +$outfile = "$reportdir/tomcat_request.png"; +unlink $outfile; + +$stats = Statistics::Descriptive::Sparse->new(); +$stats->add_data(@count); +$max = $stats->max(); +$min = $stats->min(); + +&RequestGraph(); + +# Output median latency trend graph +$outfile = "$reportdir/tomcat_median.png"; +unlink $outfile; + +$stats = Statistics::Descriptive::Sparse->new(); +$stats->add_data(@median); +$max = $stats->max(); +$min = $stats->min(); + +&MedianGraph(); + +# Output latency deviation trend graph +$outfile = "$reportdir/tomcat_deviation.png"; +unlink $outfile; + +$stats = Statistics::Descriptive::Sparse->new(); +$stats->add_data(@stddev); +$stats->add_data(@mean); +$max = $stats->max(); +$min = $stats->min(); + +&DeviationGraph(); + +# Output request error trend graph +$outfile = "$reportdir/tomcat_error.png"; +unlink $outfile; + +$stats = Statistics::Descriptive::Sparse->new(); +$stats->add_data(@tomcat_full); +$max = $stats->max(); +$min = $stats->min(); + +&ErrorGraph(); + +# Output request error trend graph +$outfile = "$reportdir/tomcat_client.png"; +unlink $outfile; + +$stats = Statistics::Descriptive::Sparse->new(); +$stats->add_data(@client_gone); +$max = $stats->max(); +$min = $stats->min(); + +&ClientGraph(); + +exit; + +sub RequestGraph { + + $graph = GD::Graph::lines->new(800,600); + @data = (\@days,\@count); + + $div = 100; + $div = 500 if $max >= 2000; + $div = 1000 if $max >= 5000; + $div = 5000 if $max >= 20000; + $div = 10000 if $max >= 50000; + $div = 50000 if $max >= 200000; + $div = 100000 if $max >= 500000; + $div = 500000 if $max >= 2000000; + $div = 1000000 if $max >= 5000000; + $ymax = (int($max/$div) + 1)*$div; + $ymin = int($min/$div)*$div; + $ytick = ($ymax - $ymin)/$div; + + $graph->set( + y_label => 'Requests', + title => "Tomcat Requests by Day from $startdate to $enddate", + y_min_value => $ymin, + y_max_value => $ymax, + y_tick_number => $ytick, + y_number_format => \&val_format, + x_label => 'Weeks Ago', + x_label_skip => 7, + x_tick_offset => $numdays%7, + dclrs => [ qw(green) ], + legend_placement => 'BC' + ) or warn $graph->error; + + $graph->set_legend( 'Requests' ); + $graph->set_title_font(GD::gdGiantFont); + $graph->set_x_axis_font(GD::gdSmallFont); + $graph->set_y_axis_font(GD::gdSmallFont); + $graph->set_legend_font(GD::gdSmallFont); + $gd = $graph->plot(\@data); + die "Graph Plot Failed: " . $graph->error unless defined $gd; + + open IMG, ">$outfile" or die $!; + print IMG $gd->png or die $gd->error; + close IMG; +} + +sub MedianGraph { + + $graph = GD::Graph::lines->new(800,600); + @data = (\@days,\@median); + + $div = .05; + $div = .1 if $max >= .5; + $div = .5 if $max >= 2; + $div = 1 if $max >= 5; + $div = 5 if $max >= 20; + $div = 10 if $max >= 50; + $div = 50 if $max >= 200; + $div = 100 if $max >= 500; + $ymax = (int($max/$div) + 1)*$div; + $ytick = $ymax/$div; + + $graph->set( + y_label => 'Latency (Seconds)', + title => "Tomcat Request Median Latency by Day from $startdate to $enddate", + y_min_value => 0, + y_max_value => $ymax, + y_tick_number => $ytick, + y_number_format => \&val_format, + x_label => 'Weeks Ago', + x_label_skip => 7, + x_tick_offset => $numdays%7, + dclrs => [ qw(green) ], + legend_placement => 'BC' + ) or warn $graph->error; + + $graph->set_legend( 'Median' ); + $graph->set_title_font(GD::gdGiantFont); + $graph->set_x_axis_font(GD::gdSmallFont); + $graph->set_y_axis_font(GD::gdSmallFont); + $graph->set_legend_font(GD::gdSmallFont); + $gd = $graph->plot(\@data); + die "Graph Plot Failed: " . $graph->error unless defined $gd; + + open IMG, ">$outfile" or die $!; + print IMG $gd->png or die $gd->error; + close IMG; +} + +sub DeviationGraph { + + $graph = GD::Graph::lines->new(800,600); + @data = (\@days,\@mean,\@stddev); + + $div = .1; + $div = .5 if $max >= 2; + $div = 1 if $max >= 5; + $div = 5 if $max >= 20; + $div = 10 if $max >= 50; + $div = 50 if $max >= 200; + $div = 100 if $max >= 500; + $ymax = (int($max/$div) + 1)*$div; + $ytick = $ymax/$div; + + $graph->set( + y_label => 'Latency (Seconds)', + title => "Tomcat Request Latency Mean and Deviation by Day from $startdate to $enddate", + y_max_value => $ymax, + y_tick_number => $ytick, + x_label => 'Weeks Ago', + x_label_skip => 7, + x_tick_offset => $numdays%7, + dclrs => [ qw(green yellow) ], + legend_placement => 'BC' + ) or warn $graph->error; + + $graph->set_legend( 'Mean', 'Mean plus Standard Deviation' ); + $graph->set_title_font(GD::gdGiantFont); + $graph->set_x_axis_font(GD::gdSmallFont); + $graph->set_y_axis_font(GD::gdSmallFont); + $graph->set_legend_font(GD::gdSmallFont); + $gd = $graph->plot(\@data); + die "Graph Plot Failed: " . $graph->error unless defined $gd; + + open IMG, ">$outfile" or die $!; + print IMG $gd->png or die $gd->error; + close IMG; +} + +sub ErrorGraph { + + $graph = GD::Graph::lines->new(800,600); + @data = (\@days,\@tomcat_full); + + $div = 5; + $div = 10 if $max >=100; + $div = 50 if $max >= 200; + $div = 100 if $max >= 1000; + $div = 500 if $max >= 2000; + $div = 1000 if $max >= 5000; + $div = 5000 if $max >= 20000; + $div = 10000 if $max >= 50000; + $div = 50000 if $max >= 200000; + $div = 100000 if $max >= 500000; + $div = 500000 if $max >= 2000000; + $div = 1000000 if $max >= 5000000; + $ymax = (int($max/$div) + 1)*$div; + $ymin = int($min/$div)*$div; + $ytick = ($ymax - $ymin)/$div; + + $graph->set( + y_label => 'Requests', + title => "Tomcat Rejected Request by Day from $startdate to $enddate", + y_min_value => $ymin, + y_max_value => $ymax, + y_tick_number => $ytick, + y_number_format => \&val_format, + x_label => 'Weeks Ago', + x_label_skip => 7, + x_tick_offset => $numdays%7, + dclrs => [ qw(green) ], + legend_placement => 'BC' + ) or warn $graph->error; + + $graph->set_legend( 'Tomcat Rejected Requests' ); + $graph->set_title_font(GD::gdGiantFont); + $graph->set_x_axis_font(GD::gdSmallFont); + $graph->set_y_axis_font(GD::gdSmallFont); + $graph->set_legend_font(GD::gdSmallFont); + $gd = $graph->plot(\@data); + die "Graph Plot Failed: " . $graph->error unless defined $gd; + + open IMG, ">$outfile" or die $!; + print IMG $gd->png or die $gd->error; + close IMG; +} + +sub ClientGraph { + + $graph = GD::Graph::lines->new(800,600); + @data = (\@days,\@client_gone); + + $div = 5; + $div = 10 if $max >=100; + $div = 50 if $max >= 200; + $div = 100 if $max >= 1000; + $div = 500 if $max >= 2000; + $div = 1000 if $max >= 5000; + $div = 5000 if $max >= 20000; + $div = 10000 if $max >= 50000; + $div = 50000 if $max >= 200000; + $div = 100000 if $max >= 500000; + $div = 500000 if $max >= 2000000; + $div = 1000000 if $max >= 5000000; + $ymax = (int($max/$div) + 1)*$div; + $ymin = int($min/$div)*$div; + $ytick = ($ymax - $ymin)/$div; + + $graph->set( + y_label => 'Requests', + title => "Tomcat Client Aborted Requests by Day from $startdate to $enddate", + y_min_value => $ymin, + y_max_value => $ymax, + y_tick_number => $ytick, + y_number_format => \&val_format, + x_label => 'Weeks Ago', + x_label_skip => 7, + x_tick_offset => $numdays%7, + dclrs => [ qw(green) ], + legend_placement => 'BC' + ) or warn $graph->error; + + $graph->set_legend( 'Tomcat Client Aborted Requests' ); + $graph->set_title_font(GD::gdGiantFont); + $graph->set_x_axis_font(GD::gdSmallFont); + $graph->set_y_axis_font(GD::gdSmallFont); + $graph->set_legend_font(GD::gdSmallFont); + $gd = $graph->plot(\@data); + die "Graph Plot Failed: " . $graph->error unless defined $gd; + + open IMG, ">$outfile" or die $!; + print IMG $gd->png or die $gd->error; + close IMG; +} + +sub val_format { + my $value = shift; + my $ret; + + $ret = $value; + if( $ret =~ /\./ ) { + $ret =~ s/\.(\d\d\d).*/\.$1/; + } else { + $ret =~ s/(\d+)(\d\d\d)$/$1,$2/; + $ret =~ s/(\d+)(\d\d\d),(\d\d\d)$/$1,$2,$3/; + } + return $ret; +} + +sub size_format { + my $value = shift; + my $ret; + + if( $max >= 5000 ) { + $value = int(($value/1024)+.5); + } + $ret = $value; + $ret =~ s/(\d+)(\d\d\d)$/$1,$2/; + $ret =~ s/(\d+)(\d\d\d),(\d\d\d)$/$1,$2,$3/; + return $ret; +} diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_trend.pl b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_trend.pl new file mode 100755 index 00000000..ee933a2a --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_trend.pl @@ -0,0 +1,408 @@ +#!/usr/local/bin/perl + +# +# 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. +# + +# $Id: tomcat_trend.pl 466585 2006-10-21 22:16:34Z markt $ + +# Author: Glenn Nielsen + +# Script for analyzing mod_jk.log data when logging tomcat request data using +# the JkRequestLogFormat Apache mod_jk configuration. +# +# Generates statistics for request latency and errors. Archives the generated +# data to files for later use in long term trend graphs and reports. +# +# tomcat_trend.pl <directory containing mod_jk.log> <directory for archiving statistics> + +use FileHandle; +use Statistics::Descriptive; +use Time::Local; + +# Constants + +%MON = ('JAN' => 0, 'Jan' => 0, + 'FEB' => 1, 'Feb' => 1, + 'MAR' => 2, 'Mar' => 2, + 'APR' => 3, 'Apr' => 3, + 'MAY' => 4, 'May' => 4, + 'JUN' => 5, 'Jun' => 5, + 'JUL' => 6, 'Jul' => 6, + 'AUG' => 7, 'Aug' => 7, + 'SEP' => 8, 'Sep' => 8, + 'OCT' => 9, 'Oct' => 9, + 'NOV' => 10, 'Nov' => 10, + 'DEC' => 11, 'Dec' => 11,); + +@Months = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); + +# Check the args + +$logdir= $ARGV[0]; +$archivedir = $ARGV[1]; + +die "Usage: $0 logdir archivedir" + unless( length($logdir) && length($archivedir) ); + +die "Log Directory $logdir doesn't exist" + unless( -d $logdir); + +die "Archive Directory $archivedir doesn't exist" + unless( -d $archivedir); + +# Get start date from global.data if it exists + +if( -e "$archivedir/global.data" ) { + # Get the start date from the last entry in global.data + @tail = `tail -1 $archivedir/global.data`; + $startdate = (split /\s+/,$tail[0])[0]; + ($day, $mon, $year) = (localtime($startdate))[3..5]; + if ($day == 31) { + $day=1; + $month++; + if ($month > 11) { + $month=0; + $year++; + } + } + $startdate = timelocal(0,0,0,$day+1,$mon,$year); + +} + +($day, $mon, $year) = (localtime(time))[3..5]; +$curdate = timelocal(0,0,0,$day,$mon,$year); +print "Today: " . scalar(localtime($curdate)) . "\n"; + +# Get the log files names and date they start +@logs = `ls -1 $logdir/mod_jk.log*`; +foreach( @logs ) { + $logfile = $_; + chomp($logfile); + next if ( $logfile =~ /\.(bz2|gz|zip)$/ ); + @head = `head -1 $logfile`; + ($mon, $day, $time, $year) = (split /\s+/,$head[0])[1..4]; + ($hour, $min, $sec) = split /:/,$time; + $year =~ s/\]$//; + $logtime = timelocal($sec,$min,$hour,$day,$MON{$mon},$year-1900); + $modjklog{$logtime} = $logfile; +} + +# Set the startdate if this is the first time processing the logs +# If we have a startdate, remove log files we con't need to process +foreach $logtime ( sort {$a <=> $b} keys %modjklog ) { + # If logs haven't been processed before, set startdate to time of + # first log entry + if( $startdate !~ /^\d+$/ ) { + $startdate = $logtime; + ($day, $mon, $year) = (localtime($startdate))[3..5]; + $startdate = timelocal(0,0,0,$day,$mon,$year); + last; + } + if( $logtime > $startdate ) { + last; + } + # Save the previous log file since start date may start here + $prevlogfile = $modjklog{$logtime}; + $prevlogtime = $logtime; + # Remove log files we don't need to process + delete $modjklog{$logtime}; +} + +# Add back in the previous log file where we need to start processing +if( defined $prevlogtime ) { + $modjklog{$prevlogtime} = $prevlogfile; +} + +print "StartDate: " . scalar(localtime($startdate)) . "\n"; +$processdate = $startdate; + +foreach $key ( sort {$a <=> $b} keys %modjklog ) { + $logtime = $processdate; + $logfile = $modjklog{$key}; + print "Processing log: $logfile\n"; + last if( $key >= $curdate ); + $fh = new FileHandle "<$logfile"; + die "Open of logfile $logfile failed: $!" + unless defined $fh; + while( $line = $fh->getline) { + chomp($line); + ($mon, $day, $time, $year) = (split /\s+/,$line)[1..4]; + ($hour, $min, $sec) = split /:/,$time; + $year =~ s/\]$//; + if( $day !~ /^\d+/ || $hour !~ /^\d+/ || $min!~ /^\d+/ || $sec !~ /^\d+/ ) { + print "Unknown log entry: $origline\n" unless $origline =~ /\.c /; + next; + } + $logtime = timelocal($sec,$min,$hour,$day,$MON{$mon},$year-1900); + + if( $logtime > $processdate ) { + $origline = $line; + # Strip off the leading date and time + $line =~ s/^\[.*\] //; + + # See if this is a new 5 minute period + $interval = int($logtime/300); + if( $interval != $previnterval ) { + if( defined $previnterval ) { + &IntervalStats(\%Global,\%Interval,$previnterval*300); + } + undef %Interval; + undef @IntervalLatency; + undef %IntervalWorkers; + $Interval{tomcat_full} = 0; + $Interval{client_gone} = 0; + $Interval{latency} = \@IntervalLatency; + $Interval{workers} = \%IntervalWorkers; + $previnterval = $interval; + } + + # See if this is a new day + if( $day != $prevday ) { + if( defined $prevday ) { + &DailyStats($processdate,\%Global); + } + undef %Global; + undef %GlobalWorkers; + undef @GlobalLatency; + $Global{tomcat_full} = 0; + $Global{client_gone} = 0; + $Global{interval} = ""; + $Global{latency} = \@GlobalLatency; + $Global{workers} = \%GlobalWorkers; + $Global{errors} = ""; + $prevday = $day; + $processdate = $logtime; + } + + # Stop processing if logtime is today + last if( $logtime >= $curdate ); + + if( $line =~ /\d\)\]{0,1}: / ) { + # Handle a mod_jk error + if( $line =~ /(jk_tcp_socket_recvfull failed|ERROR: Receiving from tomcat failed)/ ) { + $Global{tomcat_full}++; + $Interval{tomcat_full}++; + } elsif( $line =~ /(ajp_process_callback - write failed|ERROR sending data to client. Connection aborted or network problems|Client connection aborted or network problems)/ ) { + $Global{client_gone}++; + $Interval{client_gone}++; + } + next; + } else { + # Handle a mod_jk request log entry + $line =~ s/^\[.*\] //; + $line =~ s/\"(GET|POST|OPTIONS|HEAD)[^\"]*\" //; + $line =~ s/[\?\;].*\"//; + $line =~ s/\"//g; + ($work, $host, $page, $status, $latency) = split /\s+/,$line; + $page =~ s/\/\//\//g; + $page =~ s/\.\//\//g; + if( length($work) <= 0 || length($host) <= 0 || + length($page) <= 0 || $status !~ /^\d+$/ || $latency !~ /^\d+\.\d+$/ ) { + print "Unknown log entry: $origline\n" unless $origline =~ /\.c /; + next; + } + + # Throw out abnormally long requests and log them as an error + if( $latency >= 1800 ) { + $Global{errors} .= "Error: $page has an HTTP status of $status and an "; + $Global{errors} .= "abnormally long request latency of $latency seconds\n"; + next; + } + + # Save the data by day for Global, Worker, and Host + push @{$Global{latency}},$latency; + $workers = $Global{workers}; + if( !defined $$workers{$work} ) { + undef @{"$work"}; + undef %{"$work"}; + undef %{"$work-hosts"}; + ${"$work"}{latency} = \@{"$work"}; + ${"$work"}{hosts} = \%{"$work-hosts"}; + ${"$work"}{interval} = ""; + $$workers{$work} = \%{"$work"}; + } + $worker = $$workers{$work}; + push @{$$worker{latency}},$latency; + + if( !defined $$worker{hosts}{$host} ) { + undef @{"$work-$host"}; + undef %{"$work-$host"}; + undef %{"$work-$host-pages"}; + ${"$work-$host"}{latency} = \@{"$work-$host"}; + ${"$work-$host"}{pages} = \%{"$work-$host-pages"}; + ${"$work-$host"}{interval} = ""; + $$worker{hosts}{$host} = \%{"$work-$host"}; + } + $hoster = $$worker{hosts}{$host}; + push @{$$hoster{latency}},$latency; + + if( !defined $$hoster{pages}{$page} ) { + undef @{"$work-$host-$page"}; + $$hoster{pages}{$page} = \@{"$work-$host-$page"}; + } + push @{$$hoster{pages}{$page}},$latency; + + # Save the data by 5 minute interval for Global, Worker, and Host + push @{$Interval{latency}},$latency; + $workers = $Interval{workers}; + if( !defined $$workers{"$work"} ) { + undef @{"int-$work"}; + undef %{"int-$work"}; + undef %{"int-$work-hosts"}; + ${"int-$work"}{latency} = \@{"int-$work"}; + ${"int-$work"}{hosts} = \%{"int-$work-hosts"}; + $$workers{$work} = \%{"int-$work"}; + } + $worker = $$workers{$work}; + push @{$$worker{latency}},$latency; + + if( !defined $$worker{hosts}{$host} ) { + undef @{"int-$work-$host"}; + undef %{"int-$work-$host"}; + ${"int-$work-$host"}{latency} = \@{"int-$work-$host"}; + $$worker{hosts}{$host} = \%{"int-$work-$host"}; + } + $hoster = $$worker{hosts}{$host}; + push @{$$hoster{latency}},$latency; + } + } + } + undef $fh; +} + +# If the last log file ends before switch to the current day, +# output the last days data +if( $logtime < $curdate ) { + &IntervalStats(\%Global,\%Interval,$previnterval*300); + &DailyStats($processdate,\%Global); +} + +exit; + +sub IntervalStats($$$) { + my $global = $_[0]; + my $data = $_[1]; + my $interval = $_[2]; + + ($count,$median,$mean,$stddev,$min,$max) = &CalcStats($$data{latency}); + $$global{interval} .= "$interval $count $median $mean $stddev $min $max $$data{client_gone} $$data{tomcat_full}\n"; + + foreach $work ( keys %{$$data{workers}} ) { + $worker = $$data{workers}{$work}; + $gworker = $$global{workers}{$work}; + ($count,$median,$mean,$stddev,$min,$max) = &CalcStats($$worker{latency}); + $$gworker{interval} .= "$interval $count $median $mean $stddev $min $max\n"; + foreach $host ( keys %{$$worker{hosts}} ) { + $hoster = $$worker{hosts}{$host}; + $ghoster = $$gworker{hosts}{$host}; + ($count,$median,$mean,$stddev,$min,$max) = &CalcStats($$hoster{latency}); + $$ghoster{interval} .= "$interval $count $median $mean $stddev $min $max\n"; + } + } +} + +sub DailyStats($$) { + my $date = $_[0]; + my $data = $_[1]; + + &SaveStats($data,$date,"","global"); + &SaveFile($$data{interval},$date,"","daily"); + foreach $work ( keys %{$$data{workers}} ) { + $worker = $$data{workers}{$work}; + &SaveStats($worker,$date,$work,"global"); + &SaveFile($$worker{interval},$date,$work,"daily"); + foreach $host ( keys %{$$worker{hosts}} ) { + $hoster = $$worker{hosts}{$host}; + &SaveStats($hoster,$date,"$work/$host","global"); + &SaveFile($$hoster{interval},$date,"$work/$host","daily"); + $pagedata = ""; + foreach $page ( sort keys %{$$hoster{pages}} ) { + $pager = $$hoster{pages}{$page}; + ($count,$median,$mean,$stddev,$min,$max) = &CalcStats($pager); + $pagedata .= "$page $count $median $mean $stddev $min $max\n"; + } + $pagedata .= $$data{errors}; + &SaveFile($pagedata,$date,"$work/$host","request"); + } + } +} + +sub CalcStats($) { + my $data = $_[0]; + + $stats = Statistics::Descriptive::Full->new(); + $stats->add_data(@{$data}); + $median = $stats->median(); + $mean = $stats->mean(); + $stddev = $stats->standard_deviation(); + $max = $stats->max(); + $min = $stats->min(); + $count = $stats->count(); + return ($count,$median,$mean,$stddev,$min,$max); +} + +sub SaveStats($$$$) { + my $data = $_[0]; + my $date = $_[1]; + my $dir = $_[2]; + my $file = $_[3]; + + if( length($dir) > 0 ) { + $dir = "$archivedir/$dir"; + } else { + $dir = $archivedir; + } + mkdir "$dir",0755; + + $outfile = "$dir/${file}.data"; + + ($count,$median,$mean,$stddev,$min,$max) = &CalcStats($$data{latency}); + + open DATA, ">>$outfile" or die $!; + print DATA "$date $count $median $mean $stddev $min $max"; + print DATA " $$data{client_gone} $$data{tomcat_full}" if defined $$data{tomcat_full}; + print DATA "\n"; + close DATA; +} + +sub SaveFile($$$$) { + my $data = $_[0]; + my $date = $_[1]; + my $dir = $_[2]; + my $file = $_[3]; + my ($day, $mon, $year); + + ($day, $mon, $year) = (localtime($date))[3..5]; + $year += 1900; + $mon++; + $mon = "0$mon" if $mon < 10; + $day = "0$day" if $day < 10; + $file = "$year-$mon-$day-$file"; + + if( length($dir) > 0 ) { + $dir = "$archivedir/$dir"; + } else { + $dir = $archivedir; + } + mkdir "$dir",0755; + + $outfile = "$dir/${file}.data"; + + open DATA, ">>$outfile" or die $!; + print DATA $data; + close DATA; +} diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/signfile.sh b/rubbos/app/tomcat-connectors-1.2.32-src/tools/signfile.sh new file mode 100755 index 00000000..25d2c8a3 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/signfile.sh @@ -0,0 +1,64 @@ +#!/bin/sh + +# 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. + +gpgopts="-ba" +for o +do + case "$o" in + *=*) a=`echo "$o" | sed 's/^[-_a-zA-Z0-9]*=//'` + ;; + *) a='' + ;; + esac + case "$o" in + --default-key=* ) + gpgopts="$gpgopts --default-key $a" + shift + ;; + --passphrase=* ) + gpgopts="$gpgopts --passphrase $a" + shift + ;; + * ) + break + ;; + esac +done + +# Try to locate a MD5 binary +md5_bin="`which md5sum 2>/dev/null || type md5sum 2>&1`" +if [ -x "$md5_bin" ]; then + MD5SUM="$md5_bin --binary " +else + MD5SUM="echo 00000000000000000000000000000000 " +fi +# Try to locate a SHA1 binary +sha1_bin="`which sha1sum 2>/dev/null || type sha1sum 2>&1`" +if [ -x "$sha1_bin" ]; then + SHA1SUM="$sha1_bin --binary " +else + SHA1SUM="echo 0000000000000000000000000000000000000000 " +fi + +for o +do + echo "Signing $o" + gpg $gpgopts $o + $MD5SUM $o > $o.md5 + $SHA1SUM $o > $o.sha1 +done + |