You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by da...@apache.org on 2017/11/27 15:39:18 UTC

svn commit: r1816466 - /spamassassin/site/updates/checkSAupdateMirrors.sh

Author: davej
Date: Mon Nov 27 15:39:18 2017
New Revision: 1816466

URL: http://svn.apache.org/viewvc?rev=1816466&view=rev
Log:
Enhanced the mirror check script to do individual mirrors when there are multiple A records.

Modified:
    spamassassin/site/updates/checkSAupdateMirrors.sh

Modified: spamassassin/site/updates/checkSAupdateMirrors.sh
URL: http://svn.apache.org/viewvc/spamassassin/site/updates/checkSAupdateMirrors.sh?rev=1816466&r1=1816465&r2=1816466&view=diff
==============================================================================
--- spamassassin/site/updates/checkSAupdateMirrors.sh (original)
+++ spamassassin/site/updates/checkSAupdateMirrors.sh Mon Nov 27 15:39:18 2017
@@ -12,6 +12,7 @@
 # TIMEOUT longer than this seconds to fetch the page treat as an error
 
 PROGDIR=`dirname $0`
+[[ "$PROGDIR" = "." ]] && PROGDIR=`pwd`
 PROGNAME=`basename $0 .sh`
 HOST=`hostname -f`
 
@@ -19,12 +20,18 @@ TMP="/tmp/$PROGNAME"
 LOG="$TMP/${PROGNAME}.log"
 
 NOTIFY="sysadmins@spamassassin.apache.org"
-ERRORS=0
+#NOTIFY="davej@apache.org"
 
 MIRRORS="http://spamassassin.apache.org/updates/MIRRORED.BY"
+MIRRORDIR="/var/www/automc.spamassassin.org/updates"
+MIRRORFILE="MIRROR.CHECK"
 TESTSTRING="Apache SpamAssassin Project updates"
 TIMEOUT=10
 RETRIES=3
+NOW=`date +%s`
+OLD=$((NOW-5400)) # 90 minutes ago
+ERRORS=0
+STALE=0
 
 mkdir -p $TMP
 
@@ -33,25 +40,51 @@ mkdir -p $TMP
 while read URL; do
   TRY=0
   DOMAIN=`echo $URL | awk -F '/' '{print $3}'`
-  while [[ "$TRY" -lt "$RETRIES" ]]; do
-    ((TRY++))
-    /usr/bin/curl -m $TIMEOUT -s -S $URL > $TMP/${DOMAIN}.out 2>&1
-    [[ $? -ne 0 ]] && [[ "$TRY" -lt "$RETRIES" ]] && continue
-    /bin/grep -q "$TESTSTRING" $TMP/${DOMAIN}.out
-    if [[ $? -ne 0 ]]; then
-      echo -e "\n$URL: DOWN" >> $LOG
-      ((ERRORS++))
-      continue
-    else
-      echo -e "\n$URL: UP" >> $LOG
-      break
-    fi
-  done
-
+  dig +short $DOMAIN | grep -v "\.$" > $TMP/${DOMAIN}.txt
+  while read IP; do
+    URLIP="http://$IP/"
+    while [[ "$TRY" -lt "$RETRIES" ]]; do
+      ((TRY++))
+      /usr/bin/curl -m $TIMEOUT -s -S -H "Host: $DOMAIN" $URLIP > $TMP/${DOMAIN}.out 2>&1
+      [[ $? -ne 0 ]] && [[ "$TRY" -lt "$RETRIES" ]] && continue
+      /bin/grep -q "$TESTSTRING" $TMP/${DOMAIN}.out
+      if [[ $? -ne 0 ]]; then
+        echo -e "\n$URL ($IP): DOWN" >> $LOG
+        ((ERRORS++))
+        continue
+      else
+        /usr/bin/curl -f -m $TIMEOUT -s -S -H "Host: $DOMAIN" ${URLIP}${MIRRORFILE} > $TMP/${DOMAIN}.check 2>&1
+        RC=$?
+        if [[ "$RC" -eq 0 ]] || [[ "$RC" -eq 22 ]]; then
+          THEN=`cat $TMP/${DOMAIN}.check`
+          if [[ "$THEN" -lt "$OLD" ]] || [[ "$RC" -eq 22 ]]; then
+            if [[ -z "$THEN" ]]; then
+              echo -e "\n$URL ($IP): UP (STALE)" >> $LOG
+            else
+              echo -e "\n$URL ($IP): UP (STALE since $THEN)" >> $LOG
+            fi
+            ((STALE++))
+          else
+            echo -e "\n$URL ($IP): UP (CURRENT)" >> $LOG
+          fi
+        else
+          echo -e "\n$URL ($IP): UP" >> $LOG
+        fi
+        break
+      fi
+    done
+  done < $TMP/${DOMAIN}.txt
 done < $TMP/mirrors.txt
 
-S="s"
-[[ "$ERRORS" -eq 1 ]] && S=""
-[[ "$ERRORS" -ne 0 ]] && mail -s "${PROGNAME} on ${HOST} - $ERRORS mirror${S} DOWN" < $LOG $NOTIFY
+echo "$NOW" > $MIRRORDIR/$MIRRORFILE
+
+S1="s"
+S2="s"
+[[ "$ERRORS" -eq 1 ]] && S1=""
+[[ "$STALE" -eq 1 ]] && S2=""
+logger -p local0.notice -t ${PROGNAME}.sh "$ERRORS mirror${S1} DOWN, $STALE mirror${S2} STALE"
+if [[ "$ERRORS" -ne 0 ]] || [[ "$STALE" -ne 0 ]]; then
+  mail -s "${PROGNAME}.sh on ${HOST} - $ERRORS mirror${S1} DOWN, $STALE mirror${S2} STALE" < $LOG $NOTIFY
+fi
 
 exit 0