#!/bin/ksh
#===============================================================================
#       file:           log/ziplog
#       author:         Ivan Szkiba <szkiba@hu.bonus.com>
#                       1997. 01. 02.
#                       (modified: Balage)
#       description:    Makes the zip + move for previously rotated files, not only for 1-1 file, but multiple ones if present in different times, to be more robust
#       NOTE:           If you add/remove a log file here, please check log/rotatelog, too! (that makes the renaming of log files at midnight)
#
#       usage:          ziplog
#
#===============================================================================

# setup environment

. $HOME/etc/setenv.sh

# environment variables

ENVVARS="HOME LOGS_DATED LOG_FACILITY ASROOT"

export ENVVARS

HOST=`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()
{
	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
}


# move and zip files from a given folder matching a pattern to logs.dated/ given folder
# $1: names of files
# $2: directory to move From
# $3: day/week/forever subfolder in logs.dated to move To 
move_zip()
{
	for name in $1; do
		for f in $( ls "$2"/"$HOST".*.${name} 2>/dev/null); do
			if [ -f "${f}" ] ; then
				# log
				log info "Zip and move file: $f"
				(gzip "${f}" ;  mv -f "${f}".gz $LOGS_DATED/"$3"/ 2>>$ERR)&
			fi
		done
	done
}


#
# do_zip		move and zip files
#
do_zip()
{
	>$ERR

	# move and compress files

	# From $LOG -> day
	NAMES="debug.log"
	move_zip "$NAMES" $LOG "day" 
   
	# From TOMCAT_LOGS -> day
	# special: not a specific name, but {the usual}.localhost.<otherday>.<something>_log
	for f in $( ls "$TOMCAT_LOGS"/"$HOST".*.localhost*  2>/dev/null); do
		if [ -f "${f}" ] ; then
			# log
			log info "Zip and move file: $f"
			(gzip "${f}" ;  mv -f "${f}".gz $LOGS_DATED/day/ 2>>$ERR)&
		fi
	done

	# From $LOG -> week
	NAMES="info.log error.log monitor.log capture.log viewerinfo.log epws.log mcs.log taskd.log javataskd.log dicom.log sendman.log hl7messages.log hl7outgoing.log checkStudy.log queryGuard.log"
	move_zip "$NAMES" $LOG week

	# From APACHE_LOGS -> week
	NAMES="mod_jk.log access_heartbeat_log"	
	move_zip "$NAMES" $APACHE_LOGS week

	# From TOMCAT_LOGS -> week
	NAMES="catalina.out"      
	move_zip "$NAMES" $TOMCAT_LOGS week

	# From $LOG -> forever
	NAMES="oper_info.log oper_error.log streamer.log rc.log streaminfo.log"
	move_zip "$NAMES" $LOG forever

	# From $APACHE_LOGS -> forever
	NAMES="access_log error_log jserv.log mod_jserv.log ssl_engine_log ssl_request_log"
	move_zip "$NAMES" $APACHE_LOGS forever

	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

# do zip
do_zip

# log
log info "Finished"

exit 0
