#!/bin/sh
#set -x
# Script de controle qu'un mirroir Subversion est bien � jour.
# N�cessite le que subversion soit install� sur le serveur de supervision executant le script
# Script �crit par Olivier Palanque
#
# Pourait etre am�lior� en modifiant ajoutant un param�tre user/password commun au 2 repository contr�l�.
#

PROGNAME=${0##*/} 
VERSION="1.1"
# Binaire
SVN=/usr/bin/svn
GREP=/bin/grep
CUT=/usr/bin/cut
HEAD=/usr/bin/head
TAIL=/usr/bin/tail

# Variables
MASTER_SVN=""
MASTER_USER=""
MASTER_PASS=""
MIRROR_SVN=""
MIRROR_USER=""
MIRROR_PASS=""
REV_MASTER=""
REV_MIRROR=""

# Code retour NAGIOS
OK="0"
WARNING="1"
CRITICAL="2"
UNKNOWN="3"

SHORTOPTS="U:u:P:p:S:s:HhVv"
LONGOPTS="user-source:,user-sync:,password-source:,password-sync:,serveur-source:,serveur-sync:,help,version"

usage(){
  echo " Usage: $PROGNAME [options]"
  echo " Options:"
  echo "   -h -H --help             :  Affiche l'aide"
  echo "   -U <ARG>                 :  Sp�cifie l'utilisateur du repository source"
  echo "    --user-source=<ARG>     :  Equivalent � -U"
  echo "   -P <ARG>                 :  Sp�cifie le mot de passe l'utilisateur source"
  echo "   --password-source=<ARG>  :  Equivalent � -P"
  echo "   -S <ARG>                 :  Sp�cifie l'url du repository source"
  echo "   --url-source=<ARG>       :  Equivalent � -S"
  echo "   -u <ARG>                 :  Sp�cifie l'utilisateur du repository mirroir"
  echo "   --user-sync=<ARG         :  Equivalent � -u"
  echo "   -p <ARG>                 :  Sp�cifie le mot de passe l'utilisateur mirroir"
  echo "   --password-sync=<ARG>    :  Equivalent � -p"
  echo "   -s <ARG>                 :  Sp�cifie l'url du repository mirroir"
  echo "   --url-sync=<ARG>         :  Equivalent � -s"
  echo "   -v -V --version          :  Affiche la version du script"
} 


ARGS=$(getopt -s bash -q --options $SHORTOPTS  --longoptions $LONGOPTS --name $PROGNAME -- "$@") 
if [ $? != 0 ]
then
	 echo "Erreur dans les param�tres"
	 usage
	 exit 3
fi


eval set -- "$ARGS" 
while true; do
   case $1 in
      -h|-H|--help)
         usage
         exit 3
         ;;
      -v|-V|--version)
         echo "Version du script $PROGNAME : v$VERSION"
	 exit 3
         ;;
      -U|--user-source)
         MASTER_USER="$2"
 	 shift 1
         ;;
      -P|--password-source)
         MASTER_PASS="$2"
         shift 1
	 ;; 
      -S|--url-source)
         MASTER_SVN="$2"
         shift 1
         ;;
      -u|--user-sync)
         MIRROR_USER="$2"
	 shift 1
         ;;
      -p|--password-sync)
         MIRROR_PASS="$2"
	 shift 1
         ;;
      -s|--url-sync)
	 MIRROR_SVN="$2"
	 shift 1
         ;;
      --)
         shift
         break
         ;;
      *)
         usage()
         break
         ;;
   esac
   shift 
done 
   
MASTER_REV=$($SVN info $MASTER_SVN --username=$MASTER_USER --password=$MASTER_PASS --no-auth-cache --non-interactive --trust-server-cert | $TAIL -n 6)
if [ $? != 0 ]
then
         echo "Erreur dans les parametres MASTER"
         usage
         exit 3
fi

MASTER_REV=$(echo "$MASTER_REV" | $HEAD -n 1 | $CUT -f2 -d ' ')

MIRROR_REV=$($SVN info $MIRROR_SVN --username=$MIRROR_USER --password=$MIRROR_PASS --no-auth-cache --non-interactive --trust-server-cert | $TAIL -n 6)
if [ $? != 0 ]
then
         echo "Erreur dans les parametres MIRROR"
         usage
         exit 3
fi
MIRROR_REV=$(echo $MIRROR_REV | $HEAD -n 1 | $CUT -f2 -d ' ')

DIFF=$(echo "$MASTER_REV - $MIRROR_REV" | bc )
if [ "$?" != "0" ]
then
echo "Erreur dans le retour des revision"
exit 3
fi



if [ "$DIFF" -eq "0" ]
then 
echo "Syncho OK | Master=$MASTER_REV ,Mirror=$MIRROR_REV"
exit 0
fi

if [ "$DIFF" -eq "1" ]
then
echo "WARNING - Diff = 1 Rev  | Master=$MASTER_REV , Mirror=$MIRROR_REV"
exit 1
fi

if [ "$DIFF" -gt "1" ]
then
echo "CRITICAL - Retard de la synchro depuis $MIRROR_SVN | Master=$MASTER_REV , Mirror=$MIRROR_REV"
exit 2
fi
