From c81b7f986867db292d62a1757123723b5ef66518 Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Wed, 12 Dec 2001 19:52:40 +0000 Subject: Initial revision --- localwebstats | 181 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100755 localwebstats (limited to 'localwebstats') diff --git a/localwebstats b/localwebstats new file mode 100755 index 0000000..7de9106 --- /dev/null +++ b/localwebstats @@ -0,0 +1,181 @@ +#!/bin/bash +# /etc/cron.daily/localstats: Webstats maintenance script +# Written by Jonas Smedegaard + +# halt on errors +#set -e + +function usage() { + echo "Usage: `basename $0` update|prelogrotate|postlogrotate|reset [...]" + echo " If no website is given, all are attempted" + echo " Tip: Automagically runs when symlinked to /etc/cron.{daily,weekly,monthly}/" + exit 1 +} + +# automagically configure when run from cron dirs +case `dirname $0` in + /etc/cron.daily) + stamp=ignore + ;; + /etc/cron.weekly) + stamp=update + ;; + /etc/cron.monthly) + stamp=ignore + ;; + *) + stamp=$1 + shift || usage + ;; +esac + +case "$stamp" in + update|prelogrotate|postlogrotate|reset|ignore) + ;; + *) + usage + ;; +esac + +if [ "$stamp" == "ignore" ]; then + if [ $DEBUG ]; then + echo "Asked to ignore - exiting silently..." + fi + exit 0 +fi + +WEBROOT=/var/www +LOGROOT=/var/log/apache +WEBALIZER_OPTIONS="-q" + +function webdir() { echo $1/VIRTUAL/$2; } +function webdirs() { echo `find /var/log/apache -type d -print`; } +#function webdirs() { for dir in $(find ${LOGROOT} -type d -print); do echo $dir; done; } +#function logdir() { echo ${LOGROOT}/${WEBSITE}; } +#function logfiles() { $(ls -r $LOGDIR/*-access*.gz) $(ls -r $LOGDIR/access*.??.gz) $(ls -r $LOGDIR/access*.?.gz) $(ls -r $LOGDIR/access*.?); } +function logfiles() { ls $1/$2/????.??.??; } +function logfilesgz() { ls $1/$2/????.??.??.gz; } +function host() { cat $1/VIRTUAL/$2/hostname || exit 1; } +function domain() { cat $1/VIRTUAL/$2/domainname || exit 1; } + +# The above can be overridden in /etc/local/www + +. /etc/local/www || exit 1 + +# variables too boring to be configurable +JDRESOLVE_DB="/var/cache/jdresolve/hosts.db" +#JDRESOLVE_OPTIONS="-r -t 5 --database=${JDRESOLVE_DB} --dbfirst --expiredb=48" +JDRESOLVE_OPTIONS="-r --database=${JDRESOLVE_DB} --dbfirst --expiredb=48" +JDRESOLVE_MERGE_OPTIONS="--mergedb --database=${JDRESOLVE_DB}" + +test -d ${WEBROOT} -a -d ${LOGROOT} || exit 1 + +WEBSITES=$@ +if [ "$WEBSITES" == "" ]; then + WEBSITES=$(webdirs) +fi + +for WEBSITE in $WEBSITES; do + WEBDIR=$(webdir $WEBROOT ${WEBSITE}) || exit 1 + + test -d ${WEBDIR} || exit 1 + + HOST=$(host ${WEBROOT} ${WEBSITE}) || exit 1 + DOMAIN=$(domain ${WEBROOT} ${WEBSITE}) || exit 1 + LOGFILES=$(logfiles ${LOGROOT} ${WEBSITE}) || exit 1 + LOGFILESGZ=$(logfilesgz ${LOGROOT} ${WEBSITE}) || exit 1 + + + if [ -x /usr/bin/jdresolve ]; then + touch ${JDRESOLVE_DB} || exit 1 + fi + + WEBALIZER_OPTIONS="-c /etc/webalizer.conf -c $WEBDIR/webalizer.conf -o $WEBDIR/stats/webalizer -f" + ANALOG_OPTIONS="-G +g/etc/analog.conf +g$WEBDIR/analog.conf -a" + AWSTATS_OPTIONS="-update" + FQDN_ESC=`echo "$HOST.$DOMAIN" | sed -e 's/\./\\\./g'` # needed for awstats config + + if [ ${DEBUG} ]; then + echo "Making stats for ${WEBSITE} in ${WEBDIR}:" + JDRESOLVE_OPTIONS="${JDRESOLVE_OPTIONS} -p" + ANALOG_OPTIONS="${ANALOG_OPTIONS} +q" + WEBALIZER_OPTIONS="${WEBALIZER_OPTIONS} -T" + AWSTATS_OPTIONS="${AWSTATS_OPTIONS} -showsteps" + else + JDRESOLVE_OPTIONS="${JDRESOLVE_DB} -n" + ANALOG_OPTIONS="${ANALOG_OPTIONS} -q" + WEBALIZER_OPTIONS="${WEBALIZER_OPTIONS} -Q" + AWSTATS_OPTIONS="${AWSTATS_OPTIONS}" + fi + + if [ $stamp == "reset" ]; then + rm -rf $WEBDIR/stats + mkdir $WEBDIR/stats + fi + + LOGDATA="${WEBDIR}/stats/rawlog.txt" + if [ -x /usr/bin/jdresolve ]; then + zcat ${LOGFILESGZ} | jdresolve ${JDRESOLVE_OPTIONS} - > ${LOGDATA} + cat ${LOGFILES} | jdresolve ${JDRESOLVE_OPTIONS} - >> ${LOGDATA} + jdresolve ${JDRESOLVE_MERGE_OPTIONS} ${LOGDATA} + elif [ -x /usr/sbin/logresolve ]; then + zcat ${LOGFILESGZ} | logresolve > ${LOGDATA} + cat ${LOGFILES} | logresolve >> ${LOGDATA} + else + zcat ${LOGFILESGZ} > ${LOGDATA} + cat ${LOGFILES} >> ${LOGDATA} + fi + + if [ -x /usr/bin/analog ]; then + if [ $stamp == "reset" ]; then + test ! -f $WEBDIR/analog.conf && echo "\ +HOSTNAME $HOST.$DOMAIN +"\ + >$WEBDIR/analog.conf + mkdir ${WEBDIR}/stats/analog + cat ${LOGDATA} | analog ${ANALOG_OPTIONS} -C"LOGFILE none" -C"LOGFILE stdin" > $WEBDIR/stats/analog/index.html + fi +# cat ${LOGDATA} | analog ${ANALOG_OPTIONS} -C"LOGFILE none" -C"LOGFILE stdin" > $WEBDIR/stats/analog/index.html + fi + if [ -x /usr/bin/webalizer ]; then + + if [ $stamp == "reset" ]; then + test ! -f $WEBDIR/webalizer.conf && echo "\ +HostName $HOST.$DOMAIN +HideSite *$DOMAIN +HideReferrer $DOMAIN/ +"\ + > $WEBDIR/webalizer.conf + mkdir $WEBDIR/stats/webalizer + cat ${LOGDATA} | webalizer $WEBALIZER_OPTIONS -N 0 - + fi +# cat ${LOGDATA} | webalizer $WEBALIZER_OPTIONS -N 0 - + fi + if [ -x /usr/lib/cgi-bin/awstats.pl ]; then + if [ $stamp == "reset" ]; then + test ! -f /etc/awstats/awstats.$WEBSITE.conf && echo "\ +LogFile=\"/var/www/VIRTUAL/$WEBSITE/stats/rawlog.txt\" +LogFormat=4 +DNSLookup=0 +DirData=\"/var/cache/awstats\" +DirIcons=\"/awstats-icon\" +SiteDomain=\"$FQDN_ESC\" +HostAliases=\"$FQDN_ESC localhost 127\.0\.0\.1\" +Lang=\"dk\" +DirLang=\"/usr/share/awstats/lang\" +DefaultFile=\"index.html\" +ShowFlagLinks=0 +AllowToUpdateStatsFromBrowser=0 +ShowLinksOnUrl=0 +DirCgi=\"http://cgi.jones.dk/cgi-bin\" +DirIcons=\"http://stats.jones.dk/awstats-icon\" +"\ + >/etc/awstats/awstats.$WEBSITE.conf + mkdir $WEBDIR/stats/awstats + /usr/lib/cgi-bin/awstats.pl -config=${WEBSITE} $AWSTATS_OPTIONS -output > $WEBDIR/stats/awstats/index.html + fi + /usr/lib/cgi-bin/awstats.pl -config=${WEBSITE} $AWSTATS_OPTIONS -output > $WEBDIR/stats/awstats/index.html + fi + test -L $WEBDIR/www/stats || ln -s $WEBDIR/stats $WEBDIR/www/stats + test -L $WEBDIR/stats/stats && rm $WEBDIR/stats/stats +done -- cgit v1.2.3