#!/bin/bash
#
# $Id: loganalyzer,v 1.2 2002/05/09 15:20:47 syatskevich Exp $
#
#        :
#
#   -      
#
#   -      
#

SENDFROM="loganalyzer"
SENDMAIL="/usr/sbin/sendmail"

PSQL="psql -q"
PDUMP="pg_dump --data-only --attribute-inserts --no-acl --no-reconnect"

#    pg_dump  / 
# ( /etc/init.d/loganalyzer     
#      )
GREP="grep -v ^UPDATE.*pg_class.*SET"

MODDIR="/usr/lib/loganalyzer/modules"
LOGDIR="/var/log/loganalyzer"

#   loganalyzer' :-)))
LOG="$LOGDIR/loganalyzer.log"

print_help () {
	echo ":"
	echo "        loganalyzer save < >"
	echo "        loganalyzer load < >"
	echo "        loganalyzer [module <  >]"
	echo
	echo " :"

	for module in $MODDIR/* ; do
		if [ -x $module ]; then
			module=`basename $module`
			echo "        $module"
		fi
	done
}

if [ "x$1" = "x" ]; then
	print_help
	exit 0
fi

ID=`id -ru`
if [ "x$ID" != "x0" ]; then
	echo "    root"
	exit 1
fi

if [ ! -f "/var/lock/subsys/postgresql" ]; then
	echo "PostgreSQL-  .  $0 "
	exit 1
fi

if [ ! -r "/etc/sysconfig/loganalyzer" ]; then
	echo "   .  $0 "
	exit 1
fi

# $USER, $PASSWD, $DBASE
. /etc/sysconfig/loganalyzer

#  
save_dbase () {
	if [ "x$1" != "x" ]; then
			$PDUMP -U $USER "$DBASE" 2>/dev/null | $GREP | bzip2 -9 > "$1"
	else
		print_help
	fi
}

#   
load_dbase () {
	if [ "x$1" != "x" -a -f "$1" ]; then
		bzcat "$1" | $PSQL -U "$USER" -d "$DBASE"
	else
		print_help
	fi
}

#  
#
# $1 -  , $2 -   
parse_log () {
	if [ "x$1" != "x" -a -x "$MODDIR/$1" -a "x$2" != "x" -a -f "$2" ]; then
		MAILFILE=`mktemp /tmp/loganalyzer.XXXXXX`

		echo "To: Administrator <$USER>"            >> $MAILFILE
		echo "From: Log Analyzer <$SENDFROM>"       >> $MAILFILE
		echo "Subject:     $1" >> $MAILFILE
		echo                                        >> $MAILFILE

		PARSE_START_DATE=`date`

		#   
		if [ -r "/etc/sysconfig/loganalyzer.modules" ]; then
			. /etc/sysconfig/loganalyzer.modules
		fi

		export USER PASSWD DBASE

		if ! "$MODDIR/$1"  < "$2" >> "$MAILFILE" 2>&1 ; then
			ERR_LOG="$LOGDIR/parse-$1-log.err"

			cat "$2" >> "$ERR_LOG"

			echo                                              >> "$MAILFILE"
			echo ">>>>>>>  loganalyzer' >>>>>>>"    >> "$MAILFILE"
			echo "    $ERR_LOG" >> "$MAILFILE"
			echo ">>>>>>>>>>>>> loganalyzer >>>>>>>>>>>>>"    >> "$MAILFILE"

			$SENDMAIL -f "$SENDFROM" -oi "$USER" < "$MAILFILE"

			echo "$PARSE_START_DATE $1 $2 result=error $ERR_LOG" >> "$LOG"
		else
			echo "$PARSE_START_DATE $1 $2 result=ok" >> "$LOG"
		fi

		rm -f "$MAILFILE"
	else
		echo ">>>>>>>  loganalyzer' >>>>>>>"
		echo " $1      "
		echo "    $2"
		echo ">>>>>>>>>>>>> loganalyzer >>>>>>>>>>>>>"
		echo
		print_help
	fi
}

case "$1" in
	save)
		save_dbase "$2"
		;;

	load)
		load_dbase "$2"
		;;

	*)
		parse_log "$1" "$2"
		;;
esac
