summaryrefslogtreecommitdiff
path: root/src/pmdas/weblog/server.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/pmdas/weblog/server.sh')
-rwxr-xr-xsrc/pmdas/weblog/server.sh1228
1 files changed, 1228 insertions, 0 deletions
diff --git a/src/pmdas/weblog/server.sh b/src/pmdas/weblog/server.sh
new file mode 100755
index 0000000..fc63dfa
--- /dev/null
+++ b/src/pmdas/weblog/server.sh
@@ -0,0 +1,1228 @@
+#! /bin/sh
+#
+# Copyright (c) 2000-2001,2003 Silicon Graphics, Inc. All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+# Get standard environment
+. $PCP_DIR/etc/pcp.env
+
+# Setup some default paths
+_logdir=/var/log
+_msgfil=messages
+
+#
+# Every supported server defines 10 variables which are used by addServer()
+# and installFiles() to create a server specification for the weblog PMDA
+# and a URL for the webping PMDA, respectively.
+#
+# access The full path to the access log
+# accessRegex The regex for the access log
+# errors The full path to the error log
+# errorRegex The regex for the error log
+# serverPath The server path
+# serverDesc A desciption of the type of server
+# serverName The name for the server (must be unique)
+# serverPort Port the server is bound to
+# docs The full path to the document root
+# "$noDocs" - indicates there is no document root
+# http The URL for the server
+# files How to put the HTML files into the doc root
+# "link" - create a soft link
+# "copy" - copy the files
+# "skip" - do not create URLs for this server
+#
+
+do_logs=false
+do_files=false
+do_auto=false
+do_verbose=false
+debug=false
+noDocs="???"
+unknownDocs=""
+docsDir="$PCP_DOC_DIR/pcpweb/"
+link="pcpweb"
+file1="index.html"
+file2="planning.html"
+file3="tasks.html"
+pfx=" "
+skipping="${pfx}skipping..."
+tmp=`mktemp -d /tmp/pcp.XXXXXXXXX` || exit 1
+trap "rm -rf $tmp; exit" 0 1 2 3 15
+
+# Duplicate entry check file
+#
+rm -f $tmp/dup
+touch $tmp/dup
+
+# pv 816562 - try to work around $PCP_DOC_DIR confusion
+[ ! -x $docsDir -a -x /usr/pcp/doc/pcpweb/ ] && docsDir=/usr/pcp/doc/pcpweb/
+
+LOCALHOSTNAME=`hostname`
+
+# web server attribute names (global)
+#
+ATTRLIST="serverPort serverName docs access errors"
+
+# look for netscape stuff here
+#
+NSROOTPATH="${NSROOTPATH-/usr/ns-home:/var/netscape/suitespot:/var/netscape/fasttrack}"
+
+# the Netscape server types we know how to handle
+#
+NSTYPE="httpd https proxy"
+
+# look for old outbox
+#
+OUTBOXPATH="${OUTBOXPATH-/var/mc-httpd}"
+
+# look for old Netscape Proxy Servers here
+#
+NSPROXYPATH="${NSPROXYPATH-/var/ns-proxy}"
+
+# look for NCSA servers here
+#
+NCSAPATH="${NCSAPATH-/var/www}"
+
+# look for Zeus servers here
+#
+ZEUSPATH="${ZEUSPATH-/usr/local/zeus}"
+
+# look for Squid Object caches here
+#
+SQUIDPATH="${SQUIDPATH-/usr/local/squid}"
+
+# look for Apache servers here
+#
+APACHEPATH="${APACHEPATH-/etc/apache2:/etc/httpd}"
+
+# look for anonymous ftp here
+#
+FTPPATH="${FTPPATH:-$_logdir}"
+
+# look for password file here (to determine ~ftp)
+#
+PASSWDPATH="${PASSWDPATH-/etc/passwd}"
+
+# look for SYSLOG here
+#
+SYSLOGPATH="${SYSLOGPATH:-$_logdir/$_msgfil}"
+
+# look for xferlog here (for wu_ftp)
+# XFERLOG is default for wu_ftp
+XFERLOG="${XFERLOG:-$_logdir/xferlog}"
+# WUFTPLOG is used in sgi freeware wu_ftp
+WUFTPLOG="${WUFTPLOG-$_logdir/wu-ftpd.log}"
+
+_getLogFiles()
+{
+ $PCP_ECHO_PROG $PCP_ECHO_N "Full path to access log [$access] ""$PCP_ECHO_C"
+ read ans
+ if [ -n "$ans" ]
+ then
+ access="$ans"
+ if [ ! -f "$access" ]
+ then
+ echo "Warning: $access does not exist at this time."
+ fi
+ fi
+
+ $PCP_ECHO_PROG $PCP_ECHO_N "Full path to error log [$errors] ""$PCP_ECHO_C"
+ read ans
+ if [ -n "$ans" ]
+ then
+ errors="$ans"
+ if [ ! -f "$errors" ]
+ then
+ echo "Warning: $errors does not exist at this time."
+ fi
+ fi
+}
+
+# _addServer_check
+# 1: servername
+# 2: other args for log file
+# 3: server description
+_addServer_check()
+{
+ if grep "$1" $tmp/dup > /dev/null 2>&1
+ then
+ echo "${pfx}Error: already found a server with the name \"$1\""
+ if $do_auto
+ then
+ echo "$skipping"
+ else
+ $PCP_ECHO_PROG $PCP_ECHO_N "New name for server (or return to skip this server): ""$PCP_ECHO_C"
+ read ans
+ if [ -n "$ans" ]
+ then
+ if grep "$ans" $tmp/dup > /dev/null 2>&1
+ then
+ echo "${pfx}Error: new server name already exists"
+ echo "$skipping"
+ else
+ echo >> $logFile
+ echo "# $3." >> $logFile
+ echo "server $ans $2" >> $logFile
+ echo "$1" >> $tmp/dup
+ fi
+ else
+ echo "$skipping"
+ fi
+ fi
+ else
+ echo >> $logFile
+ echo "# $3." >> $logFile
+ echo "server $1 $2" >> $logFile
+ echo "$1" >> $tmp/dup
+ fi
+}
+
+_addServer()
+{
+ echo "Found $serverDesc at $serverPath"
+ if [ \( -f "$access" -o -c "$access" \) -a \( -f "$errors" -o -c "$errors" \) ]
+ then
+ found="true"
+ if [ -z "$serverPort" ]
+ then
+ echo "${pfx}identified as $serverName"
+ _addServer_check "$serverName" "on $accessRegex $access $errorRegex $errors" "$serverDesc"
+ else
+ echo "${pfx}identified as $serverName:$serverPort"
+ _addServer_check "$serverName:$serverPort" "on $accessRegex $access $errorRegex $errors" "$serverDesc"
+ fi
+ echo
+ else
+ echo "${pfx}Error: log files are not in the expected place:"
+ echo "${pfx} $access"
+ echo "${pfx} $errors"
+ if $do_auto
+ then
+ echo "$skipping"
+ else
+ echo
+ echo "Do you want to specify an alternate location for the log files"
+ $PCP_ECHO_PROG $PCP_ECHO_N "(otherwise this server will be ignored) [y] ""$PCP_ECHO_C"
+ read ans
+ if [ -z "$ans" -o "$ans" = "y" -o "$ans" = "Y" ]
+ then
+ _getLogFiles
+ if [ -z "$serverPort" ]
+ then
+ _addServer_check "$serverName" "on $accessRegex $access $errorRegex $errors" "$serverDesc"
+ else
+ _addServer_check "$serverName:$serverPort" "on $accessRegex $access $errorRegex $errors" "$serverDesc"
+ fi
+ else
+ echo "$skipping"
+ fi
+ fi
+ echo
+ fi
+}
+
+_installFiles()
+{
+
+ echo
+ echo "Found $serverDesc at $serverPath"
+ if [ "$docs" != "$noDocs" ]
+ then
+ if [ "$docs" = "$unknownDocs" ]
+ then
+ echo "${pfx}Error: unable to determine document root"
+ if $do_auto
+ then
+ docs=$unknownDocs
+ echo "$skipping"
+ else
+ echo
+ $PCP_ECHO_PROG $PCP_ECHO_N "Path to document root (return to skip HTML link for this server): ""$PCP_ECHO_C"
+ read ans
+ if [ -n "$ans" ]
+ then
+ if [ -d "$ans" ]
+ then
+ docs="$ans"
+ else
+ echo "\"$ans\" is not a directory."
+ echo "No link to HTML files will be created for this server."
+ fi
+ fi
+ fi
+ elif [ ! -d "$docs" ]
+ then
+ echo "${pfx}Error: document root cannot be found at:"
+ echo "${pfx} $docs"
+ if $do_auto
+ then
+ docs=$unknownDocs
+ echo "$skipping"
+ else
+ echo
+ echo "Path to document root (return to skip HTML link for this server)"
+ $PCP_ECHO_PROG $PCP_ECHO_N "$docs: ""$PCP_ECHO_C"
+ read ans
+ if [ -n "$ans" ]
+ then
+ if [ -d $ans ]
+ then
+ docs=$ans
+ else
+ echo "${pfx}Error: \"$ans\" is not a directory."
+ docs=$unknownDocs
+ echo "$skipping"
+ fi
+ else
+ docs=$unknownDocs
+ fi
+ fi
+ else
+ echo "${pfx}document root found at:"
+ echo "${pfx}$docs"
+ fi
+
+ if [ "$docs" != "$unknownDocs" ]
+ then
+ if [ ! -f $docs/$link/$file1 -o ! -f $docs/$link/$file2 -o ! -f $docs/$link/$file3 ]
+ then
+ if [ "$files" = "link" ]
+ then
+ $PCP_ECHO_PROG $PCP_ECHO_N "Do you want a link to some sample HTML files created in this directory [y] ""$PCP_ECHO_C"
+ elif [ "$files" = "copy" ]
+ then
+ $PCP_ECHO_PROG $PCP_ECHO_N "Do you want some sample HTML files installed in this directory [y] ""$PCP_ECHO_C"
+ fi
+
+ read ans
+ if [ -z "$ans" -o "$ans" = "y" -o "$ans" = "Y" ]
+ then
+ if [ "$files" = "link" ]
+ then
+ [ -L $docs/$link ] && rm -f $docs/$link
+ if [ -f $docs/$link ]
+ then
+ echo "${pfx}Error: $docs/$link already exists."
+ echo "$skipping"
+ else
+ ln -s $docsDir $docs/$link
+ fi
+ elif [ "$files" = "copy" ]
+ then
+ if [ ! -f $docs/$link -o -d $docs/$link ]
+ then
+ cp $docsDir/$file1 $docs/$link/$file1
+ cp $docsDir/$file2 $docs/$link/$file2
+ cp $docsDir/$file3 $docs/$link/$file3
+ else
+ echo "${pfx}Error: $docs/$link is not a directory."
+ echo "$skipping"
+ fi
+ fi
+
+ if [ -z "$http" ]
+ then
+ echo "$http/$link/$file1" >> $logFile
+ echo "$http/$link/$file2" >> $logFile
+ echo "$http/$link/$file3" >> $logFile
+ fi
+ fi
+ else
+ echo "${pfx}Note: the link to the sample HTML files already exists."
+ if [ -n "$http" ]
+ then
+ echo "$http/$link/$file1" >> $logFile
+ echo "$http/$link/$file2" >> $logFile
+ echo "$http/$link/$file3" >> $logFile
+ fi
+ fi
+ else
+ if [ "$docs" != "$unknownDocs" ]
+ then
+ echo "$skipping"
+ fi
+ fi
+ else
+ echo "${pfx}Error: no document root, cannot install files."
+ echo "$skipping"
+ fi
+ echo
+}
+
+_switchAction()
+{
+ if $do_verbose
+ then
+ echo "------------------------------------------------------------"
+ echo "access = $access"
+ echo "accessRegex = $accessRegex"
+ echo "errors = $errors"
+ echo "errorRegex = $errorRegex"
+ echo "serverPath = $serverPath"
+ echo "serverDesc = $serverDesc"
+ echo "serverName = $serverName"
+ echo "serverPort = $serverPort"
+ echo "docs = $docs"
+ echo "http = $http"
+ echo "files = $files"
+ echo "------------------------------------------------------------"
+ echo
+ fi
+
+ if $do_logs
+ then
+ _addServer
+ else
+ _installFiles
+ fi
+}
+
+_scan_config()
+{
+ serverPort=
+ serverName=
+ errors=
+ access=
+ docs=
+
+ eval `cat $* 2>/dev/null | $PCP_AWK_PROG '
+NF == 2 && tolower($1) == "port" { print "serverPort=" $2; next }
+NF == 2 && tolower($1) == "errorlog" { print "errors=" $2; next }
+NF == 2 && tolower($1) == "servername" { print "serverName=" $2; next }
+tolower($1) == "init" { for (i=1; i<=NF; i++) {
+ if (match($i, "^access=")) print $i
+ if (match($i, "^global=")) printf "access=%s ",substr($i,8,length($i)-7)
+ }
+ next
+ }
+tolower($0) ~ /fn="document-root"/ || tolower($0) ~ /fn=document-root/ {
+ for (i=1; i<=NF; i++) {
+ if (match($i, "^root="))
+ printf "docs=%s ",substr($i,6,length($i)-5)
+ }
+ next
+ }'`
+}
+
+_netscape_extract()
+{
+ here=`pwd`
+ echo >$tmp/ns
+ for root in `echo "$NSROOTPATH" | sed -e 's/:/ /g'`
+ do
+ for type in $NSTYPE
+ do
+ for dir in $root/$type-*
+ do
+ [ -L "$dir" ] && continue
+ if [ -d "$dir" ]
+ then
+ cd $dir
+ check=`pwd`
+ cd $here
+ match=`grep "^$check " $tmp/ns`
+ if [ ! -z "$match" ]
+ then
+ echo "$match $dir" | $PCP_AWK_PROG '
+ { if ($1 == $2)
+ printf "The server at %s appears to be a link to %s which is already monitored as %s\n", $3, $2, $1
+ else if ($1 == $3) {
+ printf "The server at %s was already detected,\n", $1
+ printf "using the link %s. ", $2
+ }
+ else {
+ printf "The server at %s was already detected,\n", $1
+ printf "using the link %s. The link %s,\n", $2, $3
+ printf "which is also to this server, will be ignored.\n"
+ }
+ }'
+ echo "$skipping"
+ continue
+ fi
+ echo "$check $dir" >>$tmp/ns
+ access=
+ errors=
+ docs=
+ serverName=
+ serverPort=
+
+ if [ ! -f $dir/config/obj.conf ]
+ then
+ echo "Found Netscape $type Server at $dir"
+ echo "${pfx}Error: unable to find configuration file:"
+ echo "${pfx} $dir/config/obj.conf"
+ echo "$skipping"
+ echo
+ continue
+ elif [ ! -f $dir/config/magnus.conf ]
+ then
+ echo "Found Netscape $type Server at $dir"
+ echo "${pfx}Error: unable to find configuration file:"
+ echo "${pfx} $dir/config/magnus.conf"
+ echo "$skipping"
+ echo
+ continue
+ fi
+
+ _scan_config $dir/config/obj.conf $dir/config/magnus.conf
+
+ # fix server name as Netscape often adds a trailing '.'
+ serverName=`echo $serverName | sed -e 's/\.$//'`
+
+ if [ -z "$serverName" -o -z "$serverPort" ]
+ then
+ echo "Found Netscape $type Server at $dir"
+ echo "${pfx}Error: unable to determine server name or port from:"
+ echo "${pfx} $dir/config/magnus.conf"
+ echo "$skipping"
+ echo
+ continue
+ fi
+
+ if [ -z "$access" ]
+ then
+ access=$dir/logs/access
+ echo "Found Netscape $type Server at $dir"
+ echo "${pfx}Warning: unable to determine access log name, assuming:"
+ echo "${pfx} $access"
+ echo
+ fi
+
+ if [ -z "$errors" ]
+ then
+ errors=$dir/logs/errors
+ echo "Found Netscape $type Server at $dir"
+ echo "${pfx}Warning: unable to determine error log name, assuming:"
+ echo "${pfx} $errors"
+ echo
+ fi
+
+ #
+ # figure out if this is a caching server or not
+ #
+ if [ -f $access ]
+ then
+ num_lines=`wc -l $access | $PCP_AWK_PROG '{print $1}'`
+ if [ $num_lines -gt 1 ]
+ then
+ num_fields=`tail -n 1 $access | cut -f3 -d\" | wc -w`
+ if [ $num_fields -eq 11 ]
+ then
+ accessRegex="NS_PROXY"
+ else
+ accessRegex="CERN"
+ fi
+ else
+ accessRegex="CERN"
+ fi
+ fi
+
+ errorRegex="CERN_err"
+ serverPath="$dir"
+ serverDesc="Netscape $type Server"
+ http="GET http://$serverName:$serverPort"
+ files="link"
+
+ _switchAction
+ fi
+ done
+ done
+ done
+}
+
+_zeus_extract()
+{
+ if [ -d $ZEUSPATH ]
+ then
+ if [ -f $ZEUSPATH/server.ini ]
+ then
+ rm -f $tmp/zeus
+ touch $tmp/zeus
+ $PCP_AWK_PROG < $ZEUSPATH/server.ini -v hostname=$LOCALHOSTNAME -v out=$tmp/zeus -v ini=$ZEUSPATH/server.ini -F'=' '
+BEGIN { mode = 0;
+ port = 0;
+ name = "";
+ access = "???";
+ errors = "???";
+ docs = "???";
+ host = hostname;
+ }
+
+/^port/ { if (mode == 0)
+ port=$2;
+ next
+ }
+$1 ~ /\[Admin/ { mode = 1; next }
+$1 ~ /\[Server/ { if (mode == 2) {
+ printf("%s %s %s %d %s %s\n", name, access, errors, port, host, docs) > out;
+ name=""; access="???"; errors="???"; docs="???";
+ host = hostname
+ }
+ else
+ mode = 2;
+
+ i = match($1, " .*]");
+ if (i == 0) {
+ mode = 1
+ }
+ else {
+ name = substr($1, RSTART+1, RLENGTH-2);
+ }
+ next
+ }
+/^logdir/ { if (mode == 2) {
+ access = sprintf("%s/transfer", $2);
+ errors = sprintf("%s/errors", $2);
+ }
+ next
+ }
+/^docroot/ { if (mode == 2)
+ docs = $2;
+ next
+ }
+/^ipname/ { if (mode == 2)
+ host = $2;
+ next
+ }
+END { if (mode == 2)
+ printf("%s %s %s %d %s %s\n", name, access, errors, port, host, docs) > out;
+ }'
+
+ if [ -f $tmp/zeus -a -s $tmp/zeus ]
+ then
+ accessRegex=CERN
+ errorRegex=CERN_err
+ serverPath=$ZEUSPATH
+ files="link"
+ lines=`wc -l $tmp/zeus | $PCP_AWK_PROG '{ print $1 }'`
+ count=1
+ while [ $count -le $lines ]
+ do
+ eval `$PCP_AWK_PROG < $tmp/zeus -v line=$count '
+NR == line { printf("serverName=%s\naccess=%s\nerrors=%s\nserverPort=%d\nhttp=%s\ndocs=%s\n", $1, $2, $3, $4, $5, $6); exit }'`
+
+ serverDesc="Zeus Server $serverName"
+ serverName="zeus-$serverName"
+ http="GET http://$http:$serverPort"
+
+ if [ "$access" = "???" ]
+ then
+ access=$ZEUSPATH/log/transfer
+ echo "Found $serverDesc at $serverPath"
+ echo "${pfx}Warning: unable to determine access log name, assuming:"
+ echo "${pfx} $access"
+ echo
+ fi
+ if [ "$errors" = "???" ]
+ then
+ errors=$ZEUSPATH/log/errors
+ echo "Found $serverDesc at $serverPath"
+ echo "${pfx}Warning: unable to determine error log name, assuming:"
+ echo "${pfx} $errors"
+ echo
+ fi
+ if [ "$docs" = "???" ]
+ then
+ docs=$ZEUSPATH/docroot
+ echo "Found $serverDesc at $serverPath"
+ echo "${pfx}Warning: unable to determine document root, assuming:"
+ echo "${pfx} $docs"
+ echo
+ fi
+
+ _switchAction
+ count=`expr $count + 1`
+ done
+ else
+ echo "Found Zeus Server/s at $ZEUSPATH"
+ echo "${pfx}Error: could not detect any servers in configuration file:"
+ echo "${pfx} $ZEUSPATH/server.ini"
+ echo "$skipping"
+ fi
+
+ else
+ echo "Found Zeus Server at $ZEUSPATH"
+ echo "${pfx}Error: unable to find configuration file:"
+ echo "${pfx} $ZEUSPATH/server.ini"
+ echo "$skipping"
+ fi
+ fi
+}
+
+_squid_extract()
+{
+ if [ -d $SQUIDPATH ]
+ then
+ if [ -f $SQUIDPATH/etc/squid.conf ]
+ then
+ rm -f $tmp/squid
+ touch $tmp/squid
+ $PCP_AWK_PROG < $SQUIDPATH/etc/squid.conf -v hostname=${LOCALHOSTNAME} -v out=$tmp/squid '
+BEGIN { port = 3128;
+ name = hostname;
+ access = "/usr/local/squid/logs/access.log";
+ errors = "/dev/null";
+ host = hostname;
+ }
+
+$1 == "emulate_httpd_log" { if ( $2 == "on" )
+ mode = 1;
+ }
+$1 == "cache_access_log" { access = $2;
+ }
+$1 == "http_port" { port = $2;
+ }
+$1 == "visible_hostname" { name = $2;
+ }
+END { if (mode == 0)
+ printf("SQUID %s %s %s %d %s\n", name, access, errors, port, host) > out;
+ else
+ printf("CERN %s %s %s %d %s\n", name, access, errors, port, host) > out;
+ }'
+
+ if [ -f $tmp/squid -a -s $tmp/squid ]
+ then
+ grep CERN $tmp/squid >/dev/null
+ if [ $? -eq 0 ]
+ then
+ accessRegex=CERN
+ else
+ accessRegex=SQUID
+ fi
+ errorRegex=CERN_err
+ serverPath=$SQUIDPATH
+ files="skip"
+ eval `$PCP_AWK_PROG < $tmp/squid '
+{ printf("serverName=%s\naccess=%s\nerrors=%s\nserverPort=%d\nhttp=%s\n", $2, $3, $4, $5, $6); exit }'`
+
+ serverDesc="Squid Server $serverName"
+ serverName="squid-$serverName"
+ http="GET http://$http:$serverPort"
+ docs=$noDocs
+
+ if [ "$access" = "???" ]
+ then
+ access=$SQUIDPATH/log/transfer
+ echo "Found $serverDesc at $serverPath"
+ echo "${pfx}Warning: unable to determine access log name, assuming:"
+ echo "${pfx} $access"
+ echo
+ fi
+ if [ "$errors" = "???" ]
+ then
+ errors=$SQUIDPATH/log/errors
+ echo "Found $serverDesc at $serverPath"
+ echo "${pfx}Warning: unable to determine error log name, assuming:"
+ echo "${pfx} $errors"
+ echo
+ fi
+
+ _switchAction
+ else
+ echo "Found Squid Server/s at $SQUIDPATH"
+ echo "${pfx}Error: could not detect any servers in configuration file:"
+ echo "${pfx} $SQUIDPATH/squid.conf"
+ echo "$skipping"
+ fi
+
+ else
+ echo "Found Squid Server at $SQUIDPATH"
+ echo "${pfx}Error: unable to find configuration file:"
+ echo "${pfx} $SQUIDPATH/squid.conf"
+ echo "$skipping"
+ fi
+ fi
+}
+
+_apache_extract()
+{
+ for apchroot in `echo "$APACHEPATH" | sed -e 's/:/ /g'`
+ do
+ $debug && echo "_apache_extract: apachroot=$apchroot"
+ if [ -d "$apchroot/sites-available" ]
+ then
+ config="$apchroot/sites-available/"
+ elif [ -d "$apchroot/vhosts.d" ]
+ then
+ config="$apchroot/vhosts.d/"
+ elif [ -d "$apchroot/conf" ]
+ then
+ config="$apchroot/conf/"
+ elif [ -f "$apchroot/httpd.conf" ]
+ then
+ config="$apchroot/httpd.conf"
+ else
+ continue
+ fi
+
+ for config in `echo ${config}*`
+ do
+ $debug && echo "_apache_extract: config=$config"
+ [ -f "$config" ] || continue
+
+ cat $config \
+ | sed -e's/#.*//' -e'/^$/d' \
+ | $PCP_AWK_PROG -v def=`hostname` '
+ BEGIN {
+ curnam=def;
+ names[def] = curnam;
+ ports[def] = 80;
+ }
+ $1 == "<VirtualHost" {
+ sub(">", "", $2);
+ n = split ($2, nm, ":");
+ if ( n == 1 ) {
+ curnam=$2;
+ port=ports[def];
+ } else {
+ if ( length (nm[1]) && nm[1] != "*" ) {
+ curnam = nm[1];
+ } else {
+ curnam = def;
+ }
+ if ( length (nm[2]) ) {
+ port = nm[2];
+ } else {
+ port = ports[def];
+ }
+ }
+ cn=sprintf("%s:%d", curnam, port);
+ names[cn] = curnam;
+ ports[cn] = port;
+ curnam = cn;
+ }
+ $1 == "ServerName" { names[curnam] = $2; }
+ $1 == "Port" { ports[curnam] = $2; }
+ $1 == "</VirtualHost>" { curnam=def; }
+ $1 == "ErrorLog" {
+ path = $2
+ sub (/\$\{APACHE_LOG_DIR\}/, "/var/log/apache2", path)
+ if ( match (path, "/") != 1 ) {
+ erlog[curnam] = sprintf ("%s/%s", "'$apchroot'", path);
+ } else {
+ erlog[curnam] = path;
+ }
+ }
+ $1 == "DocumentRoot" {
+ path = $2
+ sub (/\$\{APACHE_LOG_DIR\}/, "/var/log/apache2", path)
+ if ( match (path, "/") != 1 ) {
+ docs[curnam] = sprintf ("%s/%s", "'$apchroot'", path);
+ } else {
+ docs[curnam] = path;
+ }
+ }
+ $1 == "TransferLog" {
+ path = $2
+ sub (/\$\{APACHE_LOG_DIR\}/, "/var/log/apache2", path)
+ if ( match (path, "/") != 1 ) {
+ tlog[curnam] = sprintf ("%s/%s", "'$apchroot'", path);
+ } else {
+ tlog[curnam] = path;
+ }
+ }
+ $1 == "CustomLog" && ($3 == "common" || $3 == "combined") {
+ path = $2
+ sub (/\$\{APACHE_LOG_DIR\}/, "/var/log/apache2", path)
+ if ( match (path, "/") != 1 ) {
+ tlog[curnam] = sprintf ("%s/%s", "'$apchroot'", path);
+ } else {
+ tlog[curnam] = path;
+ }
+ }
+ END {
+ for ( n in names ) {
+ print names[n], ports[n], tlog[n], erlog[n], docs[n];
+ }
+ }'\
+ | while read serverName serverPort access errors docs ; do
+ $debug && echo "_apache_extract: serverName=$serverName serverPort=$serverPort access=$access errors=$errors docs=$docs"
+
+ accessRegex=CERN
+ errorRegex=CERN_err
+ serverPath="$apchroot"
+ serverDesc="Apache Server"
+ files="copy"
+
+ _switchAction
+ done
+ done
+ done
+}
+
+while [ $# -gt 0 ]
+do
+ case $1
+ in
+
+ -d) # debug
+ debug=true
+ ;;
+
+ -f) # install dummy HTML files in server document root
+ do_files=true
+ if [ $# -gt 1 ]
+ then
+ shift
+ logFile=$1
+ else
+ echo "-f requires the name of log file"
+ exit 1
+ fi
+ ;;
+
+ -l) # generate pmdaweblog configuration file
+ do_logs=true
+ if [ $# -gt 1 ]
+ then
+ shift
+ logFile=$1
+ else
+ echo "-l requires the name of log file"
+ exit 1
+ fi
+ ;;
+
+ -q) # do not prompt for misconfigured servers
+ do_auto=true
+ ;;
+
+ -v) # verbose
+ do_verbose=true
+ ;;
+
+ *) # USAGE
+ echo "Usage: server.sh [-dqv] [-f logFile] [-l logFile]"
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+if [ "$do_logs" = "true" -a "$do_files" = "true" ]
+then
+ echo "May only perform one of the two options at any one time"
+ exit 1
+fi
+
+if $do_files
+then
+ if [ ! -f $docsDir/$file1 -o ! -f $docsDir/$file2 -o ! -f $docsDir/$file3 ]
+ then
+ echo "Some or all of the sample HTML files ($file1, $file2, $file3)"
+ echo "are missing. Cannot continue!"
+ exit 1
+ fi
+fi
+
+_netscape_extract
+
+# Another common place for Netscape servers
+
+if [ -d $OUTBOXPATH ]
+then
+ access=$OUTBOXPATH/logs/access
+ accessRegex="CERN"
+ errors=$OUTBOXPATH/logs/errors
+ errorRegex="CERN_err"
+ serverPath=$OUTBOXPATH
+ serverDesc="Outbox Server"
+ serverName="outbox-$LOCALHOSTNAME"
+ serverPort=
+ docs="$OUTBOXPATH/html"
+ http="GET http://$LOCALHOSTNAME"
+ files="link"
+ _switchAction
+fi
+
+# Netscape Proxy Server
+
+if [ -d $NSPROXYPATH/logs ]
+then
+ access=$NSPROXYPATH/logs/access
+ accessRegex="CERN"
+ errors=$NSPROXYPATH/logs/errors
+ errorRegex="CERN_err"
+ serverPath=$NSPROXYPATH
+ serverDesc="Old Netscape proxy Server"
+ serverName="proxy-$LOCALHOSTNAME"
+ serverPort=
+ docs=$noDocs
+ http=""
+ files="skip"
+ _switchAction
+fi
+
+# Netscape SOCKS Proxy Server
+
+if [ -f $NSROOTPATH/proxy-server/logs/sockd ]
+then
+ access=$NSROOTPATH/proxy-server/logs/sockd
+ accessRegex="NS_SOCKS"
+ errors=/dev/null
+ errorRegex="NS_SOCKS_err"
+ serverPath=$NSROOTPATH/proxy-server
+ serverDesc="Netscape SOCKS Proxy Server"
+ serverName="socks-$LOCALHOSTNAME"
+ serverPort=
+ docs=$noDocs
+ http=""
+ files="skip"
+ _switchAction
+
+ if [ "$do_logs" = "true" ]
+ then
+ echo
+ $PCP_ECHO_PROG $PCP_ECHO_N "Would you like to log SOCKS ftp transactions [y] ""$PCP_ECHO_C"
+ read ans
+ if [ -z "$ans" -o "$ans" = "y" -o "$ans" = "Y" ]
+ then
+ access=$NSROOTPATH/proxy-server/logs/sockd
+ accessRegex="NS_FTP"
+ errors=/dev/null
+ errorRegex="NS_FTP_err"
+ serverPath=$NSROOTPATH/proxy-server
+ serverDesc="FTP through Netscape SOCKS Server"
+ serverName="ftp-socks-$LOCALHOSTNAME"
+ serverPort=
+ docs=$noDocs
+ http=""
+ files="skip"
+ _switchAction
+ fi
+ fi
+fi
+
+if [ -f $NSPROXYPATH/logs/sockd ]
+then
+ access=$NSPROXYPATH/logs/sockd
+ accessRegex="NS_SOCKS"
+ errors=/dev/null
+ errorRegex="NS_SOCKS_err"
+ serverPath=$NSPROXYPATH
+ serverDesc="Netscape SOCKS Proxy Server"
+ serverName="socks-$LOCALHOSTNAME"
+ serverPort=
+ docs=$noDocs
+ http=""
+ files="skip"
+ _switchAction
+
+ if [ "$do_logs" = "true" ]
+ then
+ echo
+ $PCP_ECHO_PROG $PCP_ECHO_N "Would you like to log SOCKS ftp transactions [y] ""$PCP_ECHO_C"
+ read ans
+ if [ -z "$ans" -o "$ans" = "y" -o "$ans" = "Y" ]
+ then
+ access=$NSPROXYPATH/logs/sockd
+ accessRegex="NS_FTP"
+ errors=/dev/null
+ errorRegex="NS_FTP_err"
+ serverPath=$NSPROXYPATH
+ serverDesc="FTP through Netscape SOCKS Server"
+ serverName="ftp-socks-$LOCALHOSTNAME"
+ serverPort=
+ docs=$noDocs
+ http=""
+ files="skip"
+ _switchAction
+ fi
+ fi
+fi
+
+# NCSA (or derived) Server
+
+if [ -d $NCSAPATH/server ]
+then
+ access=$NCSAPATH/server/logs/access_log
+ accessRegex="CERN"
+ errors=$NCSAPATH/server/logs/error_log
+ errorRegex="CERN_err"
+ serverPath=$NCSAPATH/server
+ serverDesc="NCSA (or derived) Server"
+ serverName="ncsa-$LOCALHOSTNAME"
+ serverPort=
+ docs="$NCSAPATH/htdocs"
+ http="GET http://$LOCALHOSTNAME"
+ files="link"
+ _switchAction
+fi
+
+# Zeus Server
+
+_zeus_extract
+
+# Squid Server
+
+_squid_extract
+
+# Apache Server
+
+_apache_extract
+
+# Oracle Webserver
+
+if [ -n "$ORACLE_HOME" ]
+then
+ if [ -d $ORACLE_HOME/ows ]
+ then
+ serverPath=$ORACLE_HOME/ows
+ for i in `ls $serverPath/log/sv*.log*`
+ do
+ serverPort=`basename $i | sed 's/sv//' | sed 's/\.log//'`
+ access=$i
+ accessRegex="CERN"
+ errors="$serverPath/ows/log/sv$serverPort.err"
+ errorRegex="CERN_err"
+ serverDesc="Oracle Webserver"
+ serverName="ows-$serverPort"
+ docs="$serverPath/doc"
+ http="GET http://${LOCALHOSTNAME}:$serverPort"
+ files="link"
+ _switchAction
+ done
+ fi
+fi
+
+# Harvest Cache
+
+if [ -n "$HARVEST_HOME" ]
+then
+ serverPath=$HARVEST_HOME
+ serverPort=80
+ access=$serverPath/cache.access.log
+ accessRegex="CERN"
+ errors="$serverPath/cache.log"
+ errorRegex="CERN_err"
+ serverDesc="Harvest Cache"
+ serverName="harvest-cache"
+ docs="$noDocs"
+ http=""
+ files="skip"
+ _switchAction
+elif [ -d /usr/local/harvest ]
+then
+ serverPath=/usr/local/harvest
+ serverPort=80
+ access=$serverPath/cache.access.log
+ accessRegex="CERN"
+ errors="$serverPath/cache.log"
+ errorRegex="CERN_err"
+ serverDesc="Harvest Cache"
+ serverName="harvest-cache"
+ docs="$noDocs"
+ http=""
+ files="skip"
+ _switchAction
+fi
+
+# FTP
+if [ -n "$QUIET_INSTALL" ]; then
+ ans=y
+else
+ echo
+ if [ "$do_logs" = "true" ]
+ then
+ $PCP_ECHO_PROG $PCP_ECHO_N "Do you also want to monitor ftp transactions [y] ""$PCP_ECHO_C"
+ else
+ $PCP_ECHO_PROG $PCP_ECHO_N "Would you like the sample HTML files installed for anonymous ftp [y] ""$PCP_ECHO_C"
+ fi
+ read ans
+fi
+
+if [ -z "$ans" -o "$ans" = "y" -o "$ans" = "Y" ]
+then
+ echo
+ if [ -f $PASSWDPATH ]
+ then
+ if [ -n "$QUIET_INSTALL" ] ; then
+ ans=y
+ else
+ $PCP_ECHO_PROG $PCP_ECHO_N "Do you want to monitor wu_ftp [n] ""$PCP_ECHO_C"
+ read ans
+ echo
+ fi
+ if [ "$ans" = "y" -o "$ans" = "Y" ]
+ then
+ wulog="$WUFTPLOG"
+ if [ -f "$WUFTPLOG" ]
+ then
+ wulog="$WUFTPLOG"
+ elif [ -f "$XFERLOG" ]
+ then
+ wulog="$XFERLOG"
+ else
+ if $do_auto
+ then
+ echo "${pfx}Error: log files are not in the expected place:"
+ echo "$pfx $XFERLOG"
+ echo "$pfx or $WUFTPLOG"
+ echo "$skipping"
+ wulog=""
+ fi
+ fi
+
+ access="$wulog"
+ accessRegex="WU_FTP"
+ errors="$SYSLOGPATH"
+ errorRegex="WU_FTP_err"
+ serverDesc="WU_FTP Server"
+ serverName="wu_ftp"
+ serverPath=$FTPPATH
+ serverPort=
+ else
+ access=$SYSLOGPATH
+ accessRegex="SYSLOG_FTP"
+ errors=$SYSLOGPATH
+ errorRegex="SYSLOG_FTP_err"
+ serverDesc="FTP Server"
+ serverName="ftpd"
+ serverPath=$FTPPATH
+ serverPort=
+ fi
+
+ if [ ! -z "$access" ]
+ then
+ docs=""
+ docs=`$PCP_AWK_PROG -F: '$1 == "ftp" { print $6 "/pub"; exit }' < ${PASSWDPATH}`
+ if [ -z "$docs" ]
+ then
+ echo "Found FTP Server at $FTPPATH"
+ echo "${pfx}Error: user ftp is not listed in the password file:"
+ echo "${pfx} $PASSWDPATH"
+ echo "$skipping"
+ else
+ http="GET ftp://$LOCALHOSTNAME/pub"
+ files="copy"
+ _switchAction
+ fi
+ fi
+ else
+ echo "Found FTP Server at $FTPPATH"
+ echo "${pfx}Error: unable to find password file:"
+ echo "${pfx} $PASSWDPATH"
+ echo "$skipping"
+ fi
+fi
+
+if $do_logs
+then
+ :
+else
+ [ -f "$logFile" ] && sort -u $logFile -o $logFile
+fi