diff options
Diffstat (limited to 'src/pmdas/weblog/server.sh')
-rwxr-xr-x | src/pmdas/weblog/server.sh | 1228 |
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 |