#!/bin/bash

# Script written by Tim Ellis
#
# Purpose: Setup Oracle environment, run a script, notify those who care.

# get loginForScript/scriptToRun
loginForScript=$1
hostToScript=$2
scriptToRun=$3

# sanity check
if [ "xxx$loginForScript" = "xxx" ] ; then
	echo "Usage: $0 <loginForScript> <service> <scriptname>"
	exit 1
fi
if [ "xxx$hostToScript" = "xxx" ] ; then
	echo "Usage: $0 <loginForScript> <service> <scriptname>"
	exit 1
fi
if [ "xxx$scriptToRun" = "xxx" ] ; then
	echo "Usage: $0 <loginForScript> <service> <scriptname>"
	exit 1
fi

baseScriptName=`basename $scriptToRun`
logFile=Logs/$hostToScript:$baseScriptName.log

# do some log rotation
mv $logFile.4 $logFile.5 2> /dev/null
mv $logFile.3 $logFile.4 2> /dev/null
mv $logFile.2 $logFile.3 2> /dev/null
mv $logFile.1 $logFile.2 2> /dev/null
mv $logFile   $logFile.1 2> /dev/null

export ORACLE_HOME=$HOME/ORACLE_HOME
export TNS_ADMIN=/export/home/oracle/orahome/network/admin
export NLS_DATE_FORMAT='mm/dd/yy hh:mi:ss am'

# this mailer can do -s subject
MAIL_PROGRAM=/usr/ucb/mail
ADMINS_WHO_CARE="database.admin@random.company.org.uk"

# envs for all machines, probably based on envs setup above
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib:/usr/ccs/lib:/usr/ucb/lib
export LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib:/usr/ccs/lib:/usr/ucb/lib:/usr/openwin/lib

export PATH=$ORACLE_HOME/bin:/usr/ccs/bin:/usr/bin:/usr/local/bin:/usr/sbin:/usr/ucb

# create the script to create/run the analyze script
sed "s/HOSTTOSCRIPT/$hostToScript/" $scriptToRun > /tmp/doSQLScript::$hostToScript:$baseScriptName
# run the script to create/run the analyze script
sqlplus "$loginForScript@$hostToScript" @/tmp/doSQLScript::$hostToScript:$baseScriptName > $logFile 2>&1

# do some rudimentary error checking
errorString="(ERRORS IN RUN)"
possibleErrorStrings="ora-
err";
grepResult=`egrep -i -e "$possibleErrorStrings" $logFile`
if [ "xxx$grepResult" = "xxx" ] ; then
        errorString="(No problems found)"
	grepResult=""
	allEnvs=`env | sort`;
fi

totalOutput=`cat $logFile`

# send mail to the admins who care
$MAIL_PROGRAM -s "[doSQLScript] For $hostToScript $scriptToRun -- $errorString" $ADMINS_WHO_CARE <<EOLETTER
The script on $HOSTNAME just ran. Check the logfile at:
  machine: $HOSTNAME
  logname: $logFile
---------- grepResult -----------
$grepResult
---------- totalOutput -----------
$totalOutput
---------- Environment -----------
$allEnvs
EOLETTER

