diff options
author | Micah Anderson <micah@riseup.net> | 2009-02-19 12:20:44 -0500 |
---|---|---|
committer | Micah Anderson <micah@riseup.net> | 2009-02-19 12:20:44 -0500 |
commit | 27a7859c42394a78c16b24f0d08ca28667bb1efa (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /src/ninjareport.in | |
parent | 386c4275946520bc590428e730a9d515155436a0 (diff) | |
download | backupninja-27a7859c42394a78c16b24f0d08ca28667bb1efa.tar.gz backupninja-27a7859c42394a78c16b24f0d08ca28667bb1efa.tar.bz2 |
creating a debian only branch out of what used to be a subversion repository
Diffstat (limited to 'src/ninjareport.in')
-rwxr-xr-x | src/ninjareport.in | 205 |
1 files changed, 0 insertions, 205 deletions
diff --git a/src/ninjareport.in b/src/ninjareport.in deleted file mode 100755 index b68efb8..0000000 --- a/src/ninjareport.in +++ /dev/null @@ -1,205 +0,0 @@ -#!@BASH@ -# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*- -# -# -# Ninjareport - generate a single simple report for a lot of hosts -# -# requires logtail -# -# Copyright (C) 2007 - riseup.net -- property is theft. - -# TODO: -# -# . check for logs that are never updating and warn -# . change constantly updating logs (maildir) to be more friendly -# . documentation -# . maybe make config option that lists all hosts that should report-in, and if -# one doesn't then warn -# . restrict rsync somehow? -# . abstract path for logtail -# . on the report master, the reportdirectory should be set where the reports will be going, note this - -mail=1 -display=0 - -process() { - -# look in the logfile for any lines like the following: -# Jan 20 01:02:46 Info: FINISHED: 2 actions run. 0 fatal. 0 error. 0 warning. -# -# note: some backups never finish, such as the maildir one, need to handle these -# perhaps by looking for FAILED messages? -# note2: what about logs that aren't being updated? this is a failure case and -# should be looked for -# note3: there are also these entries: -# Jan 20 14:00:01 Fatal: No backup actions configured in '/etc/backup.d', run ninjahelper! - -# The following has to be done without invoking a subshell (see BashFAQ #24) -logupdates=`maketemp ninjadata` - -/usr/sbin/logtail -f $host > $logupdates -grep FINISHED $logupdates | -( - fatal=0 - warning=0 - error=0 - - while read line - do - line_array=($line) - fatal=$(($fatal + ${line_array[8]})) - error=$(($error + ${line_array[10]})) - warning=$(($warning + ${line_array[12]})) - done - if (( $fatal || $warning || $error )); then - echo "`basename $host .log`: $fatal fatals found, $error errors found, $warning warnings found" >> $statusfile - echo "" >> $reportappend - echo "`basename $host .log` log entries since last ninjareport" >> $reportappend - echo "---------" >> $reportappend - cat $logupdates >> $reportappend - rm $logupdates - fi -) - -} - -generatereport() { - -reportfile=`maketemp ninjareport` - -# Generate a report, only if there are failures -if [ -s $statusfile ]; then - echo " backupninja mission failures - `date`" >> $reportfile - echo " --------------------------------------------------------------" >> $reportfile - echo "" >> $reportfile - cat $statusfile | column -t >> $reportfile - echo "" >> $reportfile - echo " log entries from failed reports" >> $reportfile - echo " -----------------------------------" >> $reportfile - cat $reportappend >> $reportfile -fi - -} - -usage() { - cat << EOF -This script generates a backupninja status report for all configured -systems. It requires that each status report is placed in a spot where -ninjareport can read it, reports are mailed to the reportemail -configured in @CFGDIR@/backupninja.conf. - -The following options are available: --h, --help This usage message --f, --conffile FILE Use FILE for the configuration instead - of @CFGDIR@/backupninja.conf --m, --mail <email> Mail the report to this address --o, --out Don't mail the report, just display it - -EOF -} - -##################################################### -## MAIN - -conffile="@CFGDIR@/backupninja.conf" - -## process command line options - -while [ $# -ge 1 ]; do - case $1 in - -h|--help) - usage - exit 0 - ;; - -f|--conffile) - if [ -f $2 ]; then - conffile=$2 - else - echo "-f|--conffile option must be followed by an existing filename" - fatal "-f|--conffile option must be followed by an existing filename" - usage - fi - # we shift here to avoid processing the file path - shift - ;; - -m|--mail) - reportemail=$2 - shift - ;; - -o|--out) - mail=0 - display=1 - ;; - *) - echo "Unknown option $1" - usage - exit - ;; - esac - shift -done - -## Load and confirm basic configuration values - -# bootstrap -if [ ! -r "$conffile" ]; then - echo "Configuration file $conffile not found." - fatal "Configuration file $conffile not found." -fi - -# find $libdirectory -libdirectory=`grep '^libdirectory' $conffile | awk '{print $3}'` -if [ -z "$libdirectory" ]; then - if [ -d "@libdir@" ]; then - libdirectory="@libdir@" - else - echo "Could not find entry 'libdirectory' in $conffile." - exit 1 - fi -else - if [ ! -d "$libdirectory" ]; then - echo "Lib directory $libdirectory not found." - exit 1 - fi -fi - -# include shared functions -. $libdirectory/tools - -setfile $conffile - -getconf reportdirectory -getconf reportemail - -## Process each configuration file - -hosts=`find $reportdirectory -follow -mindepth 1 -maxdepth 1 -type f ! -name '*.offset' | sort -n` - -if [ -z "$hosts" ]; then - echo "Fatal: No backupninja reports found in '$reportdirectory'!" - mail=0 -fi - -statusfile=`maketemp ninjastatus` -reportappend=`maketemp ninjaappend` - -for host in $hosts; do - [ -f "$host" ] || continue - # Check somehow that the file is a valid report file - process $host -done - -generatereport - -## mail the report to the report address or display it - -if [ -s $reportfile ]; then - if [ $mail == 1 ]; then - mail -s "backupninja mission failure report" $reportemail < $reportfile - fi -fi - -if [ $display == 1 ]; then - cat $reportfile -fi - |