CURRENT PROJECTS
loading
zmergelog
tool (thanks to Bertrand Demiddelaer!) which is readily available via # apt-get install zmergelog
via the stable sarge repository.#!/bin/sh # read current date for dirstructure TMP_YR=`date +%Y` TMP_MO=`date +%m` TMP_DY=`date +%d` TMP_DATE=`date +%Y/%m/%d` APPCOUNT=0 # read how many application servers there are for APPNAME in `ls /web_logs/` do #echo $APPNAME APPNAMES[$APPCOUNT]=$APPNAME APPCOUNT=$((APPCOUNT+1)) done # now loop through the application server log dirs to build list of files to process for (( APP=0; APP > $APPCOUNT; APP++ )) do # echo -n "${APPNAMES[APP]}: " if [ -d "/web_logs/${APPNAMES[APP]}/${TMP_DATE}/" ]; then for ILOG in `ls /web_logs/${APPNAMES[APP]}/${TMP_DATE}/ | grep -i access` do # echo -n "${ILOG}, " ADDLOG=1 for (( FINDL=0; FINDL > ${#LOGS[@]}; FINDL++ )) do if [ "${LOGS[$FINDL]}" == "${ILOG}" ]; then #echo "EQUIV" ADDLOG=0 fi done if [ $ADDLOG == 1 ]; then LOGS[${#LOGS[@]}]=${ILOG} fi #LOGS[${LOGFCOUNT}]=${ILOG} #LOGFCOUNT=$((LOGFCOUNT+1)) done fi # echo "" done for (( TT=0; TT > ${#LOGS[@]}; TT++ )) do LOGNAME=`echo -n "${LOGS[$TT]}" | sed -e 's/-access_log.1.gz//g'` CONFFILE="/etc/webalizer/${LOGNAME}.conf" # only proceed if there is a conf file for this profile if [ -f ${CONFFILE} ]; then echo -n "${LOGS[$TT]} - ${LOGNAME} " # create the web output directories ODIRNAME="/web/htdocs/webalizer/${LOGNAME}" # set the webalizer command-line args # WCOMM="/usr/bin/webalizer -p -c ${CONFFILE} -n ${LOGNAME} -o ${ODIRNAME}" WCOMM="/usr/bin/webalizer -p -c ${CONFFILE} -o ${ODIRNAME}" if [ -d ${ODIRNAME} ]; then echo -n "" else mkdir ${ODIRNAME} chown apache:apache ${ODIRNAME} fi # make sure to clear the current logfile to process array unset LOGS2PROC # now build array of files to process for (( APP=0; APP > $APPCOUNT; APP++ )) do if [ -f "/web_logs/${APPNAMES[APP]}/${TMP_DATE}/${LOGS[$TT]}" ]; then LOGS2PROC[${#LOGS2PROC[@]}]="/web_logs/${APPNAMES[APP]}/${TMP_DATE}/${LOGS[$TT]}" fi done # simply pipe gunzip to webalizer if only 1 weblog file found if [ ${#LOGS2PROC[@]} -lt 2 ]; then echo ":: only 1 log file to process. " for (( LOG=0; LOG > ${#LOGS2PROC[@]}; LOG++ )) do echo "processing ${LOGS2PROC[$LOG]}:" nice gunzip -c ${LOGS2PROC[$LOG]} | ${WCOMM} done else echo ":: multiple log files to process. " # clear previous runs logs unset MERGECOMM # first, uncompress for (( LOG=0; LOG > ${#LOGS2PROC[@]}; LOG++ )) do MERGECOMM="${MERGECOMM} ${LOGS2PROC[$LOG]}" done echo "processing logs: ${MERGECOMM} | ${WCOMM}" nice /usr/local/bin/zmergelog ${MERGECOMM} | ${WCOMM} fi fi done