From a8cebf5ec7d95b5341bee0db67f683ae8b472537 Mon Sep 17 00:00:00 2001
From: Per Cederqvist <ceder@lysator.liu.se>
Date: Tue, 7 Aug 2007 20:13:50 +0000
Subject: [PATCH] Replace the "partno" argument with "diskno partno" to match
 the current lysrdiff.  Also adjust for new status files with double dashes. 
 List both failed and stale backups, if there is space for it.

---
 check_lysrdiff | 79 +++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 59 insertions(+), 20 deletions(-)

diff --git a/check_lysrdiff b/check_lysrdiff
index 8a5f1a6..00d8ae4 100755
--- a/check_lysrdiff
+++ b/check_lysrdiff
@@ -8,14 +8,14 @@ activity=26
 stale=40
 
 usage () {
-  echo $0: usage: $0 '[ opt ] partno' >&2
+  echo $0: usage: $0 '[ opt ] diskno partno' >&2
   echo options: >&2
   echo '  --activty N  Warn if no backup completed in the last N hours.' >&2
   echo '  --stale N    Critical if oldest backup is more than N hours old.' >&2
   exit 3
 }
 
-while [ $# -gt 1 ]
+while [ $# -gt 2 ]
 do
   case "x$1" in
     x--activity)
@@ -33,23 +33,25 @@ do
   esac
 done  
 
-if [ $# != 1 ]
+if [ $# != 2 ]
 then
   usage
 fi
 
-partno=$1
-BASE=/lysrdiff/$partno/perm
+disk=$1
+part=$2
+BASE=/lysrdiff/$disk/perm/$part
 
 if [ ! -f $BASE/lysrdiff.id ]
 then
-    echo CRITICAL - $BASE: no such file
+    echo CRITICAL - $BASE/lysrdiff.id: no such file
     exit 2
 fi
 
-if [ "`cat $BASE/lysrdiff.id`" != "$partno perm" ]
+if [ "`cat $BASE/lysrdiff.id`" != "$disk perm $part" ]
 then
-    echo CRITICAL - found `cat $BASE/lysrdiff.id` instead of $lysrdiff >&2
+    echo CRITICAL - found `cat $BASE/lysrdiff.id` instead of $disk perm $part \
+	>&2
     exit 2
 fi
 
@@ -57,14 +59,14 @@ acttime=`date '+%Y-%m-%d %H:%M:%S' -d "$activity hours ago"`
 staletime=`date '+%Y-%m-%d %H:%M:%S' -d "$stale hours ago"`
 
 statecache=/tmp/lysrdiff-nagios-state
-state=$statecache-$partno
+state=$statecache-$disk-$part
 
 find $BASE/lysrdiff/state -type f \
 	-printf "%TY-%Tm-%Td %TH:%TM:%TS %P\n" \
-      | sort > $statecache.$partno.$$
-mv -f $statecache.$partno.$$ $state || {
+      | sort > $statecache.$disk.$part.$$
+mv -f $statecache.$disk.$part.$$ $state || {
   echo UNKNOWN - mv failed
-  rm $statecache.$partno.$$
+  rm $statecache.$disk.$part.$$
   exit 3
 }
 rm -f $state-stale $state-active || {
@@ -75,21 +77,21 @@ rm -f $state-stale $state-active || {
 
 echo $staletime MARKER \
 | sort $state - \
-| grep -- '-start$\|MARKER' \
+| grep -- '--start$\|MARKER' \
 | sed -e '/MARKER$/,$d' \
 > $state-stale
 
 echo $acttime MARKER \
 | sort $state - \
-| grep -- '-end$\|MARKER' \
+| grep -- '--end$\|MARKER' \
 | sed -e '0,/MARKER$/d' \
 > $state-active
 
-FAILED=`grep -c -- '-fail$' $state`
+FAILED=`grep -c -- '--fail$' $state`
 STALE=`wc -l < $state-stale`
 ACTIVITY=`wc -l < $state-active`
 
-if [ $FAILED -gt 0 ]
+if [ $FAILED -gt 10 ]
 then
   echo -n "CRITICAL - $FAILED failed backups"
   if [ $STALE -gt 0 ]
@@ -97,7 +99,7 @@ then
       echo -n " (also $STALE stale)"
   fi
   echo -n ": "
-  sed -n 's/-fail$//p' $state \
+  sed -n 's/--fail$//p' $state \
     |awk 'BEGIN { sz = 0 }
 	  NR > 1 && sz < 198 { printf ", "; sz += 2 }
 	  sz < 200 { printf "%s", $3; sz += length($3) }
@@ -105,14 +107,51 @@ then
     |sed s'/, \([^,]*\)$/ and \1/'
   echo '. | activity='$ACTIVITY stale=$STALE failed=$FAILED
   rm $state $state-stale $state-active
+  exit 2
+fi
 
+if [ $STALE -gt 10 ]
+then
+  echo -n "CRITICAL - $STALE stale backups"
+  if [ $FAILED -gt 0 ]
+  then
+      echo -n " (also $FAILED failed)"
+  fi
+  ( sed -n 's/--fail$//p' $state; sed 's/--start$//' $state-stale; ) \
+    |awk 'BEGIN { sz = 0 }
+	  NR > 1 && sz < 198 { printf ", "; sz += 2 }
+	  sz < 200 { printf "%s", $3; sz += length($3) }
+	  END { if (sz >= 200) printf ", others" } ' \
+    |sed s'/, \([^,]*\)$/ and \1/'
+  echo '. | activity='$ACTIVITY stale=$STALE failed=$FAILED
+  rm $state $state-stale $state-active
   exit 2
 fi
 
+if [ $FAILED -gt 0 ]
+then
+  echo -n "WARNING - $FAILED failed backups"
+  if [ $STALE -gt 0 ]
+  then
+      echo -n " (also $STALE stale)"
+  fi
+  echo -n ": "
+  sed -n 's/--fail$//p' $state \
+    |awk 'BEGIN { sz = 0 }
+	  NR > 1 && sz < 198 { printf ", "; sz += 2 }
+	  sz < 200 { printf "%s", $3; sz += length($3) }
+	  END { if (sz >= 200) printf ", others" } ' \
+    |sed s'/, \([^,]*\)$/ and \1/'
+  echo '. | activity='$ACTIVITY stale=$STALE failed=$FAILED
+  rm $state $state-stale $state-active
+
+  exit 1
+fi
+
 if [ $STALE -gt 0 ]
 then
-  echo -n "CRITICAL - $STALE stale backups: "
-  sed 's/-start$//' $state-stale \
+  echo -n "WARNING - $STALE stale backups: "
+  sed 's/--start$//' $state-stale \
     |awk 'BEGIN { sz = 0 }
 	  NR > 1 && sz < 198 { printf ", "; sz += 2 }
 	  sz < 200 { printf "%s", $3; sz += length($3) }
@@ -120,7 +159,7 @@ then
     |sed s'/, \([^,]*\)$/ and \1/'
   echo '. | activity='$ACTIVITY stale=$STALE failed=0
   rm $state $state-stale $state-active
-  exit 2
+  exit 1
 fi
 
 if [ $ACTIVITY = 0 ]
-- 
GitLab