diff options
| -rwxr-xr-x | backupninja | 50 | 
1 files changed, 38 insertions, 12 deletions
diff --git a/backupninja b/backupninja index 962ff89..e9587a3 100755 --- a/backupninja +++ b/backupninja @@ -240,6 +240,13 @@ EOF  	fatal   "Fatal, halting errors (always shown)"  } +## +## this function handles the running of a backup action +## +## these globals are modified: +## fatals, errors, warnings, actions_run, errormsg +## +  function process_action() {  	local file="$1"  	local suffix="$2" @@ -268,16 +275,24 @@ function process_action() {  		IFS=$' \t\n'  	fi +	let "actions_run += 1"  	echo_debug_msg=1 +  	# call the handler:  	ret=`( . $scriptdir/$suffix $file )`  	retcode="$?" -	warnings=`echo $ret | grep -e "^Warning: " | wc -l` -	errors=`echo $ret | grep -e "^Error: \|^Fatal: " | wc -l` -	if [ $errors != 0 ]; then + +	_warnings=`echo $ret | grep "Warning: " | wc -l` +	_errors=`echo $ret | grep "Error: " | wc -l` +	_fatals=`echo $ret | grep "Fatal: " | wc -l` + +	if [ $_fatals != 0 ]; then  		msg "*failed* -- $file" +		errormsg="$errormsg\n== failures from $file ==\n\n$ret\n" +	elif [ $_errors != 0 ]; then +		msg "*error* -- $file"  		errormsg="$errormsg\n== errors from $file ==\n\n$ret\n" -	elif [ $warnings != 0 ]; then +	elif [ $_warnings != 0 ]; then  		msg "*warning* -- $file"  		errormsg="$errormsg\n== warnings from $file ==\n\n$ret\n"  	elif [ $retcode == 0 ]; then @@ -285,7 +300,11 @@ function process_action() {  	else  		msg "unknown -- $file"  	fi -	echo_debug_msg=0 + +	echo_debug_msg=0	 +	let "fatals += _fatals" +	let "errors += _errors" +	let "warnings += _warnings"  }  ##################################################### @@ -356,12 +375,15 @@ fi  ## Process each configuration file -info "====== starting at "`date`" ======" -  # by default, don't make files which are world or group readable.  umask 077 +# these globals are set by process_action() +fatals=0  errors=0 +warnings=0 +actions_run=0 +errormsg=""  for file in $configdirectory/*; do  	[ -f $file ] || continue; @@ -384,7 +406,9 @@ done  ## mail the messages to the report address -if [ "$reportemail" == "" ]; then doit=0 +if [ $actions_run == 0 ]; then doit=0 +elif [ "$reportemail" == "" ]; then doit=0 +elif [ $fatals != 0 ]; then doit=1  elif [ $errors != 0 ]; then doit=1  elif [ "$reportsuccess" == "yes" ]; then doit=1  elif [ "$reportwarning" == "yes" -a $warnings != 0 ]; then doit=1 @@ -392,15 +416,17 @@ else doit=0  fi  if [ $doit == 1 ]; then +	debug "send report to $reportemail"  	hostname=`hostname` +	[ $warnings == 0 ] || subject="WARNING" +	[ $errors == 0 ] || subject="ERROR" +	[ $fatals == 0 ] || subject="FAILED" +	  	{  		for ((i=0; i < ${#messages[@]} ; i++)); do  	 		echo ${messages[$i]}  		done  		echo -e "$errormsg" -	} | mail $reportemail -s "backupninja: $hostname" +	} | mail $reportemail -s "backupninja: $hostname $subject"  fi -info "====== finished at "`date`" ======" - -############################################################  | 
