From d4ef4d39f3ee20b402e9958824d06e67cd2af6f5 Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Mon, 14 Jan 2002 12:57:20 +0000 Subject: Several changes to localwebstats: - Exit on error. - Have all functions equally expect options LOGROOT, WEBROOT and WEBSITE (in that order). - Don't exit on empty LOGDATARESOLVED. - Add hooks for functions pre_init, pre_update, post_init and post_update. - Remove last traces of logfiles, logfilesgz, logfilesresolved and logfilesresolvedgz functions. - Corrections to webdirs function. --- localwebstats | 72 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 42 insertions(+), 30 deletions(-) diff --git a/localwebstats b/localwebstats index 85dd17b..fae1e35 100755 --- a/localwebstats +++ b/localwebstats @@ -2,8 +2,8 @@ # /etc/cron.daily/localstats: Webstats maintenance script # Written by Jonas Smedegaard -# halt on errors -#set -e +# halt on errors (NB! this is a bashism...) +set -e function usage() { echo "Usage: $(basename $0) init|update|prelogrotate|postlogrotate|ignore [...]" @@ -53,21 +53,21 @@ fi WEBROOT=/var/www LOGROOT=/var/log/apache -function statsdir() { echo $1/VIRTUAL/stats.$(dnsdomainname)/www/$2; } -function webdirs() { find $LOGROOT -type d -mindepth 1 -maxdepth 1 | grep '\.*\.' | sed 's!$LOGROOT!!'; } -#function logdir() { echo $LOGROOT/$WEBSITE; } +# $1=LOGROOT, $2=WEBROOT and $3 is WEBSITE +function statsdir() { echo $2/VIRTUAL/stats.$(dnsdomainname)/www/$3; } +function webdirs() { find $1 -type d -mindepth 1 -maxdepth 1 | grep '\.*\.' | sed 's!$1!!'; } #function logfiles() { $(ls -r $LOGDIR/*-access*.gz) $(ls -r $LOGDIR/access*.??.gz) $(ls -r $LOGDIR/access*.?.gz) $(ls -r $LOGDIR/access*.?); } -function logfilesresolvedgz() { ls $1/$2/????.??.00.gz; } -function logfilesresolved() { ls $1/$2/????.??.00; } -function logfilesgz() { ls $1/$2/????.??.??.gz | grep -v '\.00\.gz$'; } -function logfiles() { ls $1/$2/????.??.?? | grep -v '\.00$'; } -function logcontentresolved() { for file in `logfilesresolvedgz $1 $2`; do zcat $file; done; for file in `logfilesresolved $1 $2`; do cat $file; done; } -function logcontent() { for file in `logfilesgz $1 $2`; do zcat $file; done; for file in `logfiles $1 $2`; do cat $file; done; } -function host() { cat $1/VIRTUAL/$2/hostname || exit1 "Unable to get hostname for virtual host."; } -function domain() { cat $1/VIRTUAL/$2/domainname || exit1 "Unable to get domainname for virtual host."; } -function analog_cfg() { echo /etc/analog_$2.conf; } -function rmagic_cfg() { echo /etc/rmagic/rmagic_$2.conf; } -function webalizer_cfg() { echo /etc/webalizer_$2.conf; } +function logcontentresolved() { for file in $(ls $1/$3/????.??.00.gz); do zcat $file; done; for file in $(ls $1/$3/????.??.00); do cat $file; done; } +function logcontent() { for file in $(ls $1/$3/????.??.??.gz | grep -v '\.00\.gz$'); do zcat $file; done; for file in $(ls $1/$3/????.??.?? | grep -v '\.00$'); do cat $file; done; } +function host() { cat $2/VIRTUAL/$3/hostname || exit1 "Unable to get hostname for virtual host."; } +function domain() { cat $2/VIRTUAL/$3/domainname || exit1 "Unable to get domainname for virtual host."; } +function analog_cfg() { echo /etc/analog_$3.conf; } +function rmagic_cfg() { echo /etc/rmagic/rmagic_$3.conf; } +function webalizer_cfg() { echo /etc/webalizer_$3.conf; } +function pre_init() { true; } +function post_init() { true; } +function pre_update() { true; } +function post_update() { true; } # The above can be overridden in /etc/local/www @@ -99,20 +99,26 @@ fi # Generate stats for websites from stdin or all default sites WEBSITES=$@ if [ "$WEBSITES" = "" ]; then - WEBSITES=$(webdirs) + WEBSITES=$(webdirs $LOGROOT $WEBROOT $WEBSITE) fi for WEBSITE in $WEBSITES; do - STATSDIR=$(statsdir $WEBROOT $WEBSITE) || exit1 "Unable to resolve STATSDIR." + STATSDIR=$(statsdir $LOGROOT $WEBROOT $WEBSITE) || exit1 "Unable to resolve STATSDIR." # FIXME test -d $STATSDIR/.. || exit1 "Directory above STATSDIR doesn't exist." - ANALOG_CFG=$(analog_cfg $WEBROOT $WEBSITE) || exit1 "Unable to resolve ANALOG_CFG." - RMAGIC_CFG=$(rmagic_cfg $WEBROOT $WEBSITE) || exit1 "Unable to resolve RMAGIC_CFG." - WEBALIZER_CFG=$(webalizer_cfg $WEBROOT $WEBSITE) || exit1 "Unable to resolve WEBALIZER_CFG." + ANALOG_CFG=$(analog_cfg $LOGROOT $WEBROOT $WEBSITE) || exit1 "Unable to resolve ANALOG_CFG." + RMAGIC_CFG=$(rmagic_cfg $LOGROOT $WEBROOT $WEBSITE) || exit1 "Unable to resolve RMAGIC_CFG." + WEBALIZER_CFG=$(webalizer_cfg $LOGROOT $WEBROOT $WEBSITE) || exit1 "Unable to resolve WEBALIZER_CFG." - HOST=$(host $WEBROOT $WEBSITE) || exit1 "Unable to get hostname for virtual host." - DOMAIN=$(domain $WEBROOT $WEBSITE) || exit1 "Unable to get domainname for virtual host." - LOGFILESRESOLVEDGZ=$(logfilesresolvedgz $LOGROOT $WEBSITE) + if [ $stamp = "init" ]; then + pre_init $LOGROOT $WEBROOT $WEBSITE || exit1 "Error executing PRE_INIT." + fi + if [ $stamp = "update" ]; then + pre_update $LOGROOT $WEBROOT $WEBSITE || exit1 "Error executing PRE_UPDATE." + fi + + HOST=$(host $LOGROOT $WEBROOT $WEBSITE) || exit1 "Unable to get hostname for virtual host." + DOMAIN=$(domain $LOGROOT $WEBROOT $WEBSITE) || exit1 "Unable to get domainname for virtual host." ANALOG_OPTIONS="-G +g/etc/analog.conf +g$ANALOG_CFG +A -a" RMAGIC_OPTIONS="" @@ -147,7 +153,7 @@ for WEBSITE in $WEBSITES; do touch $LOGDATARESOLVED $LOGDATA $LOGDATATMP || exit1 "Couldn't touch LOGDATA files." if [ $stamp = "init" ]; then - logcontentresolved $LOGROOT $WEBSITE >> $LOGDATARESOLVED + logcontentresolved $LOGROOT $WEBROOT $WEBSITE >> $LOGDATARESOLVED if [ -x $ANALOG_BIN ]; then [ $DEBUG ] && echo "$WEBSITE: Create/update analog config" echo "\ @@ -206,7 +212,7 @@ HideReferrer $DOMAIN/ [ -s $WEBALIZER_CFG.local ] && cat $WEBALIZER_CFG.local >> $WEBALIZER_CFG mkdir $STATSDIR/webalizer [ $DEBUG ] && echo "$WEBSITE: Create initial Webalizer stats" - cat $LOGDATARESOLVED | $WEBALIZER_BIN $WEBALIZER_OPTIONS -N 0 - + cat $LOGDATARESOLVED | $WEBALIZER_BIN $WEBALIZER_OPTIONS -N 0 - || true fi if [ -x $AWSTATS_BIN ]; then [ $DEBUG ] && echo "$WEBSITE: Create/update AWStats config" @@ -246,15 +252,15 @@ ShowFlagLinks=0 if [ -x $JDRESOLVE_BIN ]; then [ $DEBUG ] && echo "$WEBSITE: DNS-resolve new logdata using jdresolve" # DB access doesn't work currently (no output...) -# logcontent $LOGROOT $WEBSITE | $JDRESOLVE_BIN $JDRESOLVE_OPTIONS - >> $LOGDATA +# logcontent $LOGROOT $WEBROOT $WEBSITE | $JDRESOLVE_BIN $JDRESOLVE_OPTIONS - >> $LOGDATA # jdresolve $JDRESOLVE_MERGE_OPTIONS $LOGDATA - logcontent $LOGROOT $WEBSITE | $JDRESOLVE_BIN $JDRESOLVE_OPTIONS - >> $LOGDATA + logcontent $LOGROOT $WEBROOT $WEBSITE | $JDRESOLVE_BIN $JDRESOLVE_OPTIONS - >> $LOGDATA elif [ -x $LOGRESOLVE_BIN ]; then [ $DEBUG ] && echo "$WEBSITE: DNS-resolve new logdata using logresolve" - logcontent $LOGROOT $WEBSITE | $LOGRESOLVE_BIN >> $LOGDATA + logcontent $LOGROOT $WEBROOT $WEBSITE | $LOGRESOLVE_BIN >> $LOGDATA else [ $DEBUG ] && echo "$WEBSITE: Merging new logdata without DNS-resolving (no resolver found)" - logcontent $LOGROOT $WEBSITE >> $LOGDATA + logcontent $LOGROOT $WEBROOT $WEBSITE >> $LOGDATA fi if [ -s $LOGDATA ]; then @@ -279,4 +285,10 @@ ShowFlagLinks=0 fi gzip -f9 $LOGDATA fi + if [ $stamp = "init" ]; then + post_init $LOGROOT $WEBROOT $WEBSITE || exit1 "Error executing POST_INIT." + fi + if [ $stamp = "update" ]; then + post_update $LOGROOT $WEBROOT $WEBSITE || exit1 "Error executing POST_UPDATE." + fi done -- cgit v1.2.3