[project @ peter@palfrader.org-20090303201249-z9se72s4eumz3du1]
[mirror/dsa-nagios.git] / dsa-nagios-nrpe-config / dsa-update-apt-status
index 5433d18..3e3acef 100755 (executable)
@@ -2,7 +2,15 @@
 
 UPDATE_RUNS=3
 STATUS=/var/cache/dsa/nagios/apt
+SLEEP_MAX=$(( 15 * 60 ))
+MAX_AGE=$(( 23 * 60 * 60 ))
 
+# we want to run if any of the following things is true
+#  - we have never run before
+#  - var/lib/dpkg/status has been touched since the last run
+#  - var/cache/apt/pkgcache.bin has been touched since the last run
+#  - our last run ended with 'apt-get update failed'
+#  - our last run has been more than MAX_AGE (23hrs) ago
 run_required() {
        local run=0
        local norun=1
@@ -11,25 +19,28 @@ run_required() {
        [ /var/lib/dpkg/status -nt "$STATUS" ] && return $run
        [ /var/cache/apt/pkgcache.bin -nt "$STATUS" ] && return $run
        grep "apt-get update failed" "$STATUS" > /dev/null && return $run
-}
 
-sleep_max=7200
+       local last_mod
+       last_mod=`stat -c "%Y" "$STATUS"`
+       now=`date +%s`
+       age=$(( $now - $last_mod ))
+       [ "$age" -gt "$MAX_AGE" ] && return $run
 
-if [ "$1" == "hourly" ] ; then
-       # on the hourly run, only update when the system changed since the last run
-       run_required || exit
-       sleep_max=900
-fi
+       return $norun
+}
+
+# do stuff only when required
+run_required || exit
 
 # sleep if called non-interactively
 if [ -z "$TERM" -o "$TERM" = "dumb" ]; then
-       sleep $(( $RANDOM % $sleep_max ))
+       sleep $(( $RANDOM % $SLEEP_MAX ))
 fi
 
 # run apt-get update, retry a few times if it fails
 count=0
 while [ "$count" -lt "$UPDATE_RUNS" ]; do
-       apt-get update -qq
+       apt-get update -qq >/dev/null >&2
        if [ "$?" = "0" ]; then break; fi
        sleep $(( $RANDOM % 600 ))
        count="$(( $count + 1 ))"
@@ -43,7 +54,8 @@ fi
 # run the apt check itself
 tmp=`tempfile`
 trap "rm -f '$tmp'" exit
-/usr/share/dsa/apt-status-check --noupdate --timeout=600 > "$tmp"
+#/usr/share/dsa/apt-status-check --noupdate --timeout=600 > "$tmp"
+/usr/lib/nagios/plugins/dsa-check-packages > "$tmp"
 result="$?"
 case "$result" in
   0)