#!/bin/ksh
#===============================================================================
#       file:           /usr/bonus/etc/ziplog
#       author:         Ivan Szkiba <szkiba@hu.bonus.com>
#                       1997. 01. 02.
#       description:    Rename and compress apache log files.
#
#	usage:		ziplog 
#
#===============================================================================

# setup environment

. $HOME/etc/setenv.sh

# environment variables

ENVVARS="HOME LOGS_DATED LOG_FACILITY ASROOT"

export ENVVARS

HOST=`/bin/hostname -s`
DIRS="$LOGS_DATED $LOGS_DATED/day $LOGS_DATED/week $LOGS_DATED/forever"

export DIRS HOST

ERR=/tmp/ziplog.err.$$

export ERR

#
# log			create log entry
#
#	$1	- type of log (error | info)
#	$2	- message
log()
{
   /usr/bin/logger -i -p ${LOG_FACILITY}.$1 -t "ziplog" $2
}

#
# check_env		check environment
#
check_env()
{
   let err=0
   for var in $ENVVARS ; do
      eval value=$`echo $var`
      if [ -z "$value" ] ; then
         echo "Variable $var must be set !" 1>&2
         log error "Variable $var must be set !"
         let err=err+1
      fi
   done
   [ $err -ne 0 ] && exit 1
}

#
# check_dir		check & create directories if need
#
check_dir()
{
   let err=0
   for dir in $DIRS; do
      [ ! -d $dir ] && mkdir $dir
      if [ ! -d $dir ] ; then
         echo "Can't make directory $dir !" 1>&2
         log error "Can't make directory $dir !"
         let err=err+1
      fi
   done
   [ $err -ne 0 ] && exit 1
   return 0
}

#
# getpar		get parameters
#
getpar()
{
   # set base file name

   TIME=`date +%Y-%m-%d.%H:%M`
   DAY_BASE="$LOGS_DATED/day/${HOST}.${TIME}"
   WEEK_BASE="$LOGS_DATED/week/${HOST}.${TIME}"
   FOREVER_BASE="$LOGS_DATED/forever/${HOST}.${TIME}"

   # set output files

   FOREVER_FILES=""
   WEEK_FILES=""
   DAY_FILES=""

   if [ $# -ne 0 ] ; then
      FOREVER_FILES="$*"
      NEEDHUP=""
   else
      FOREVER_FILES="$APACHE_LOGS/access_log $APACHE_LOGS/error_log"
      FOREVER_FILES="$FOREVER_FILES $APACHE_LOGS/jserv.log $APACHE_LOGS/mod_jserv.log"
      FOREVER_FILES="$FOREVER_FILES $APACHE_LOGS/ssl_engine_log $APACHE_LOGS/ssl_request_log"
      FOREVER_FILES="$FOREVER_FILES $LOG/oper_info.log $LOG/oper_error.log"
      WEEK_FILES="$LOG/info.log $LOG/error.log"
      [ -f "$LOG/debug.log" ] && DAY_FILES="$LOG/debug.log"
      NEEDHUP="yes"
   fi

   FILES="$FOREVER_FILES $WEEK_FILES $DAY_FILES"   
   export FILES FOREVER_FILES WEEK_FILES DAY_FILES FOREVER_BASE WEEK_BASE DAY_BASE NEED_HUP
}

#
# do_zip		move and zip files
#
do_zip()
{
   # log
   log info "Zip file(s): $FILES"
 
   >$ERR

   # rename files

   for f in $FILES; do
      if [ -f $f ] ; then
         mv -f $f ${f}.$$ 2>>$ERR
      fi
   done

   # send HUP signal to apache
   if [ -n "$NEEDHUP" ] ; then
      $ASROOT hup.asr syslog
      $ASROOT hup.asr apache
   fi

   # move and compress files

   for f in $FOREVER_FILES; do
      if [ -f ${f}.$$ ] ; then
         OUT="${FOREVER_BASE}.`/bin/basename $f`.gz"
         (/usr/bin/gzip ${f}.$$ ;  mv -f ${f}.$$.gz $OUT 2>>$ERR)&
      fi
   done

   for f in $WEEK_FILES; do
      if [ -f ${f}.$$ ] ; then
         OUT="${WEEK_BASE}.`/bin/basename $f`.gz"
         (/usr/bin/gzip ${f}.$$ ;  mv -f ${f}.$$.gz $OUT 2>>$ERR)&
      fi
   done

   for f in $DAY_FILES; do
      if [ -f ${f}.$$ ] ; then
         OUT="${DAY_BASE}.`/bin/basename $f`.gz"
         (/usr/bin/gzip ${f}.$$ ;  mv -f ${f}.$$.gz $OUT 2>>$ERR)&
      fi
   done

   wait
   
   # log errors
   if [ -s $ERR ] ; then
      log error <$ERR
      cat $ERR 1>&2
   fi
   rm -f $ERR

   return 0
}

# ==============================================================================
#				M A I N
# ==============================================================================

   # log
   log info "Started"

   # check environment
   check_env
   
   # check directories
   check_dir

   # read parameters
   getpar $*

   # do zip
   do_zip

   # log
   log info "Finished"

   exit 0
