#!/usr/bin/sh

# Das Script wurde ausgeheckt von: Jens Elkner (elkner@irb.cs.uni-magdeburg.de)
# und ist als einfaches FrontEnd zu gwfstats gedacht.

# Beim Aufruf braucht nur noch der JahrMonat (z.B. 9701) bzw.
# x und das Jahr (z.B. x 96) angegeben werden.
# Alle anderen Paramter kommen von diesem Script bzw. werden durch dieses
# Script generiert.

# Der 1. Parameter muß www, ftp, referer, agent oder all lauten und erstellt 
# die entsprechenden Statistiken.
#
# Falls Jahresstatistik erstellt werden soll, spielt es keine Rolle, welcher
# Monat als 2. Parameter angegeben wird, hauptsache es steht irgendwas da
#
# Falls Monatliche Statistik erstellt werden soll, kann der 3. Parameter (Jahr)
# wegfallen.

WHAT=$1
YEARMONTH=$2
YEAR=$3

LOGBASE=/local/logs
SCRIPTDIR=/local/www/etc
HTMLBASE=/local/www/htdocs/stats
FULL=c.html
LITE=l.html
GRAF=g.html
REF=r.html
AGENT=a.html
PROXY=p.html

HTTPDSERVER="IRB.CS.Uni-Magdeburg.De"
ALLMONTH="01 02 03 04 05 06 07 08 09 10 11 12"

FULLSTDPARAMS="-a 40 -c 40 -d 40 -f 40 -L"
LITESTDPARAMS="-a 10 -c 10 -d 10 -f 10 -A -C -D -F -L"


# ==============================================================================
SetLogFiles() {
# $1 Name des Logfiles (z.B. access_log, referrer_log, xferlog, ...)
# $2 BasisDirectory für die Statistik-Dateien
# $3 wo Log Dateien liegen
# $4 falls vorherige Statisktik-Dateien einbezogen werden sollen, dann gwfstats
    NAME=$1
    STATDIR=$2
    LOGDIR=$3    
    if [ -z "$NAME" ]; then
	    echo "Sorry, don't know, which files!"
	    exit
    fi
    if [ "$4" = "use_old" ]; then
	USE_STATS="y"
    else
        USE_STATS=""
    fi
    if [ ! -d $STATDIR ]; then
	mkdir $STATDIR
    fi
    LOGFILES=""
    OLDSTATFILES=""
    if [ -z "$YEARMONTH" ]; then
	    echo "Sorry, don't know, which month!"
	    echo "Usage: $0 YearMonth   (e.g. $0 9701)   or"
	    echo "       $0 current     or"
	    echo "       $0 x Year"
	    exit
    fi
    if [ "$YEARMONTH" = "current" ]; then
	    LOGFILES=${LOGDIR}/$NAME
	    if [ ! -f "$LOGFILES" ]; then
		echo $LOGFILES does not exist.
	        exit
	    fi
	    TMP=`/usr/bin/date "+%y%m"`
	    STATDIR=${STATDIR}/$TMP
	    return
    fi
    if [ -z "$YEAR" ]; then
	LOGFILES=${LOGDIR}/SAVE/${NAME}.${YEARMONTH}.gz
	if [ ! -f "$LOGFILES" ]; then
	    echo $LOGFILES does not exist.
	    exit
	fi	
	STATDIR=${STATDIR}/${YEARMONTH}
    else
	if [ "$NAME" = "agent_log" ]; then
	    FILE=$AGENT
	elif [ "$NAME" = "proxy_log" ]; then
	    FILE=$PROXY
	elif [ "$NAME" = "access_log" -o "$NAME" = "xferlog" ]; then
	    FILE=$FULL
	elif [ "$NAME" = "referer_log" ]; then
	    FILE=$REF
	fi
	for MM in $ALLMONTH
	do
	    if [ -n "$USE_STATS" -a -r ${STATDIR}/${YEAR}${MM}/$FILE ]; then
		if [ -z "$OLDSTATFILES" ]; then
		    OLDSTATFILES="-i ${STATDIR}/${YEAR}${MM}/$FILE"
		else
		    OLDSTATFILES="$OLDSTATFILES,${STATDIR}/${YEAR}${MM}/$FILE"
		fi
	    elif [ -r ${LOGDIR}/SAVE/${NAME}.${YEAR}${MM}.gz ]; then
		LOGFILES="$LOGFILES ${LOGDIR}/SAVE/${NAME}.${YEAR}${MM}.gz"
	    fi
	done
	STATDIR=${STATDIR}/total${YEAR}
    fi
}

TimeStamp() {
    /usr/ucb/echo -n "$1"
    date -u
}

# =============================================================================
# WWW Statistiken von access_log mit gwfstats
if [ "$WHAT" = "www" -o "$WHAT" = "all" ]; then
    PATTERN='-u #^/((Excite)|(hypermail)|(icons)|(proxy)|(rn)|(se)|(sw-eng)|(stats)|(theo)|(linux))$#/$1/# -O u' 
    SetLogFiles access_log ${HTMLBASE}/WWW ${LOGBASE}/WWW use_old
    TimeStamp "Generating Full WWW stats (${HTMLBASE}/WWW) : "
    ${SCRIPTDIR}/gwfstats.pl $FULLSTDPARAMS \
	-N "Web Log Report for $HTTPDSERVER" -t common \
	-I '(index.html|index.shtml|index.cgi|INDEX.html)' \
	$OLDSTATFILES -g $GRAF -p $STATDIR -o $FULL \
	$PATTERN \
	$LOGFILES

    TimeStamp "Generating Lite WWW stats (${HTMLBASE}/WWW) : "
    ${SCRIPTDIR}/gwfstats.pl $LITESTDPARAMS \
	-N "Lite Web Log Report for $HTTPDSERVER" -t common \
	-I '([Ii]ndex.s*html|[Ww]elcome.html)' \
	-i ${STATDIR}/$FULL -p $STATDIR -o $LITE \
	$PATTERN

    PATTERN='-r ^/~elkner -u #^/~elkner$#/#@@#^/~elkner/(.*)#/$1#@@#^/(TOOLS)|(JDK)|(Mbone)|(audio)|(cgi)|(images)|(nasa)|(private)|(proxy)|(save)|(stats)|(tiff)|(webtools))$#/$1/# -O ru' 
    SetLogFiles access_log ${HTMLBASE}/elkner ${LOGBASE}/WWW use_old
    TimeStamp "Generating Full WWW stats (${HTMLBASE}/elkner) : "
    ${SCRIPTDIR}/gwfstats.pl $FULLSTDPARAMS \
	-N "Web Log Report for ~elkner at $HTTPDSERVER" -t common \
	-I '(index.html|index.shtml|index.cgi|INDEX.html)' \
	$OLDSTATFILES -g $GRAF -p $STATDIR -o $FULL \
	$PATTERN \
	$LOGFILES

    TimeStamp "Generating Lite WWW stats (${HTMLBASE}/elkner) : "
    ${SCRIPTDIR}/gwfstats.pl $LITESTDPARAMS \
	-N "Lite Web Log Report for ~elkner at $HTTPDSERVER" -t common \
	-I '([Ii]ndex.html|[Ww]elcome.html)' \
	-i ${STATDIR}/$FULL -p $STATDIR -o $LITE
fi

# Statistiken von referer_log mit refstats
if [ "$WHAT" = "referer" -o "$WHAT" = "all" ]; then
    PATTERN='-U #^http://(.*)\.tu-magdeburg.de/#http://$1\.uni-magdeburg.de/#i@@#^http://wotan.cs.uni-magdeburg.de/#http://irb.cs.uni-magdeburg.de/#i@@#^http://(petrus|news|olsn)\.cs\.#http://java.cs.#@@#^http://(eva|sunpool)\.cs\.#http://www.cs.# -x ^[Ff][Ii][Ll][Ee]:'
    SetLogFiles referer_log ${HTMLBASE}/WWW ${LOGBASE}/WWW
    TimeStamp "Generating Refstats (${HTMLBASE}/WWW) : "
    ${SCRIPTDIR}/refstats.pl -N $HTTPDSERVER \
	-o ${STATDIR}/$REF -m 5\
	-X '(.*.gif)|(.*.jpg)|(.*.xbm)|(.*.pl)' \
	$PATTERN \
	$LOGFILES

    SetLogFiles referer_log ${HTMLBASE}/elkner ${LOGBASE}/WWW 
    TimeStamp "Generating Refstats (${HTMLBASE}/elkner) : "
    ${SCRIPTDIR}/refstats.pl -N "~elkner on $HTTPDSERVER" \
	-o ${STATDIR}/$REF -m 5 \
	-X '(.*.gif)|(.*.jpg)|(.*.xbm)|(.*.pl)' \
	$PATTERN \
	-r '^/~elkner' \
	$LOGFILES
fi

# Statistiken von agent_log mit browsercounter
if [ "$WHAT" = "agent" -o "$WHAT" = "all" ]; then
    SetLogFiles agent_log ${HTMLBASE}/WWW ${LOGBASE}/WWW use_old
    TimeStamp "Generating Agent Stats (${HTMLBASE}/WWW) : "
    ${SCRIPTDIR}/browsercounter.pl \
	-N $HTTPDSERVER \
	$OLDSTATFILES -p $STATDIR -o $AGENT $LOGFILES
fi

# Statistiken von agent_log und  proxy_log mit proxycounter
if [ "$WHAT" = "proxy" -o "$WHAT" = "all" ]; then
    SetLogFiles agent_log ${HTMLBASE}/WWW ${LOGBASE}/WWW
    if [ -z "$YEAR" ]; then 
	AGENTLOGFILES=`echo $LOGFILES | sed -e 's/\ /,/g'`
	if [ -n "AGENTLOGFILES" ]; then
		AGENTLOGFILES="-a $AGENTLOGFILES"
    	fi
    fi
    SetLogFiles proxy_log ${HTMLBASE}/WWW ${LOGBASE}/WWW use_old
    TimeStamp "Generating Agent Stats (${HTMLBASE}/WWW) : "
    ${SCRIPTDIR}/proxycounter.pl \
	-N $HTTPDSERVER \
	$OLDSTATFILES $AGENTLOGFILES -p $STATDIR -o $PROXY $LOGFILES
fi

# FTP Statistiken von xferlog mit gwfstats
if [ "$WHAT" = "ftp" -o "$WHAT" = "all" ]; then
    # complete
    if [ -z "$YEAR" ]; then
       PATTERN='-r ^/((d.01)|(d.02)|(pub))/ -u #^/((d.01)|(d.02)|(pub))/#/# -O ru'
    else
       PATTERN=""
    fi
    SetLogFiles xferlog ${HTMLBASE}/FTP ${LOGBASE}/FTP use_old
    TimeStamp "Generating Full FTP Stats (${HTMLBASE}/FTP) : "
    ${SCRIPTDIR}/gwfstats.pl $FULLSTDPARAMS \
	-N "FTP Log Report for $HTTPDSERVER" -t ftp  \
	$OLDSTATFILES -g $GRAF -p $STATDIR -o $FULL \
	$PATTERN \
	$LOGFILES 

    TimeStamp "Generating Lite FTP Stats (${HTMLBASE}/FTP) : "
    ${SCRIPTDIR}/gwfstats.pl $LITESTDPARAMS \
	-N "Lite FTP Log Report for $HTTPDSERVER" -t ftp \
	-i ${STATDIR}/$FULL -p $STATDIR -o $LITE

    # Gnu mirror
    if [ -z "$YEAR" ]; then
       PATTERN='-r ^/((d.01)|(d.02)|(pub))/gnu/ -u #^/((d.01)|(d.02)|(pub))/gnu/#/# -O ru'
    else
       PATTERN=""
    fi
    SetLogFiles xferlog ${HTMLBASE}/FTP/gnu ${LOGBASE}/FTP use_old
    TimeStamp "Generating Full FTP Stats (${HTMLBASE}/FTP/gnu) : "
    ${SCRIPTDIR}/gwfstats.pl $FULLSTDPARAMS \
	-N "FTP Log Report for $HTTPDSERVER" -t ftp  \
	$OLDSTATFILES -g $GRAF -p $STATDIR -o $FULL \
	$PATTERN \
	$LOGFILES 


    TimeStamp "Generating Lite FTP Stats (${HTMLBASE}/FTP/gnu) : "
    ${SCRIPTDIR}/gwfstats.pl $LITESTDPARAMS \
	-N "Lite FTP Log Report for $HTTPDSERVER" -t ftp \
	-i ${STATDIR}/$FULL -p $STATDIR -o $LITE

    # Java mirror
    if [ -z "$YEAR" ]; then
       PATTERN='-r ^/((d.01)|(d.02)|(pub))/Java/ -u #^/((d.01)|(d.02)|(pub))/Java/#/# -O ru'
    else
       PATTERN=""
    fi
    SetLogFiles xferlog ${HTMLBASE}/FTP/Java ${LOGBASE}/FTP use_old
    TimeStamp "Generating Full FTP Stats (${HTMLBASE}/FTP/Java) : "
    ${SCRIPTDIR}/gwfstats.pl $FULLSTDPARAMS \
	-N "FTP Log Report for $HTTPDSERVER" -t ftp  \
	$OLDSTATFILES -g $GRAF -p $STATDIR -o $FULL \
	$PATTERN \
	$LOGFILES 


    TimeStamp "Generating Lite FTP Stats (${HTMLBASE}/FTP/Java) : "
    ${SCRIPTDIR}/gwfstats.pl $LITESTDPARAMS \
	-N "Lite FTP Log Report for $HTTPDSERVER" -t ftp \
	-i ${STATDIR}/$FULL -p $STATDIR -o $LITE

    # Linux mirror
    if [ -z "$YEAR" ]; then
       PATTERN='-r ^/((d.01)|(d.02)|(pub))/linux/ -u #^/((d.01)|(d.02)|(pub))/linux/#/# -O ru'
    else
       PATTERN=""
    fi
    SetLogFiles xferlog ${HTMLBASE}/FTP/linux ${LOGBASE}/FTP use_old
    TimeStamp "Generating Full FTP Stats (${HTMLBASE}/FTP/linux) : "
    ${SCRIPTDIR}/gwfstats.pl $FULLSTDPARAMS \
	-N "FTP Log Report for $HTTPDSERVER" -t ftp  \
	$OLDSTATFILES -g $GRAF -p $STATDIR -o $FULL \
	$PATTERN \
	$LOGFILES 


    TimeStamp "Generating Lite FTP Stats (${HTMLBASE}/FTP/linux) : "
    ${SCRIPTDIR}/gwfstats.pl $LITESTDPARAMS \
	-N "Lite FTP Log Report for $HTTPDSERVER" -t ftp \
	-i ${STATDIR}/$FULL -p $STATDIR -o $LITE

fi
TimeStamp     "$0 done at: "

