#!/bin/sh
# multicron-*	Multifacet cron script. 
#		This script is responcible for many core LRP functions.
#		Log rotation, remote time sync, host ping check, etc.
#		It depends on the settings in /etc/lrp.conf.

periodic () {
	checkfreespace
	pingcheck
}

daily () {
	updatetime
	rotatelogs
}

weekly () {
	rotatelogs
}


monthly () {
	rotatelogs
}


##############################################################################
# Processing Core   It is recommended you don't add functions directly
# to his file. Keep them external and source them.
##############################################################################

main () {

prog=`basename $0`

	case $prog in
		*-p )	periodic;;
		*-d )	daily	;;
		*-w )	weekly	;;
		*-m )	monthly	;;
		* ) echo "Usage: Call (prog) as (prog)-p, -d, -w, or -m"; exit 1  ;;
	esac
}

rotatelogs () {

	case $prog in
		*-d ) LOGFILES=$lrp_LOGS_DAILY  ;;
		*-w ) LOGFILES=$lrp_LOGS_WEEKLY  ;;
		*-m ) LOGFILES=$lrp_LOGS_MONTHLY ;;
		* )   return 1 ;;
	esac

	cd /var/log
	for LOG in $LOGFILES; do
		if [ -f $LOG ]; then
			savelog -g adm -m 640 -u root -c ${lrp_LOGS_DEPTH:-4} $LOG >/dev/null
		fi
	done

	svi sysklogd reload
}

checkfreespace () {

	mailspacelow () {
	
     		{	echo "level: $cklevel   freeKB: $bfree   free%: $pfree"
			echo "date: $(date)"
			echo "src : $HOSTNAME"
		} | mailadmin "Freespace Low!"
	}
	
	updatefree () {
		IFS="$SP$TAB%"
		set -- $(df | sed -n 2p)
		IFS=$OIFS
	
		bfree=$4
		pfree=$((100 - $5))
	}
	
	ckfree () {
	
		[ $bfree -le ${lrp_SC_MINKB:--1} ] && return 1
		[ $pfree -le ${lrp_SC_MINPER:-101} ] && return 1
		return 0
	}
	
	cleanlevel () {
		
		eval F="\$lrp_SC_DEL_L$cklevel"
		for f in $F; do
			[ ! -f "$f" ] && continue	#Bug in expansion?
			: > $f
		done 
	}


	[ "$lrp_SPACECHECK" != "YES" ] && return 0
	
	cklevel=0
	while [ $cklevel -lt 5 ]; do
		updatefree
		ckfree && break
		cklevel=$(($cklevel + 1))
		cleanlevel
	done
	
	[ $cklevel -ge ${lrp_SC_MAIL_LEVEL:-1} ] && mailspacelow
}


pingcheck () {

[ "$lrp_PING_HOSTS" = "" ] && return 0

MIN=3
SLEEP=10
MAX=$(( $MIN * 60 / $SLEEP ))

	for h in $lrp_PING_HOSTS; do
	rc=1
	x=0
		while [ $rc -ne 0 ]; do
			qt ping -c 1 "$h"
			rc=$?
			x=$(($x + 1))
			if [ $x -ge $MAX ] && [ $rc -ne 0 ]; then
				{	echo "host: $h"
					echo "date: $(date)"
					echo "src : $HOSTNAME"
				} | mailadmin "Ping Failure!"
				break
			fi
			[ $rc -ne 0 ] && sleep $SLEEP
	        done
	done    

}

updatetime () {

	[ "$lrp_DATE_SERVER" != "" ] && qt rdate $lrp_DATE_SERVER

}

mailadmin () {
	if [ "$lrp_MAIL_ADMIN" = "" ]; then
		cat >/dev/null
	else
		subject="$HOSTNAME alert: $1"
		mail -s "$subject" "$lrp_MAIL_ADMIN"
	fi
}


qt () { "$@" >/dev/null 2>&1 ; }

OIFS="$IFS"
TAB='	'
SP=' '

[ ! -f /etc/lrp.conf ] && exit 1
. /etc/lrp.conf

main
