Como monitorizar un Stream mms

De Kafre.org

He mejorado un poco el script. Ahora, se le pasan 3 parametros:

  • URL del stream
  • Nombre del stream (se usa para llevar contral del estado previo)
  • Direccion de email a la que enviar la notificación

El script ahora guarda el estado del stream en el directorio: CACHE="/var/cache/EstadoStream/${NOMBRE}". 0 si está caido y 1 si está arriba

Cuando se encuentra un cambio de estado notifica de manera diferente. Cuando el estado persiste en DOWN, el correo es de recordatorio. La notificación por SMS la he dejado solo para los cambios de estado, no me gusta estar recibiendo SMS cada 20 minutos como esta mañana.

También, cuando detecta que está caido, hace una comprobación de ping a dos nodo, si alguno de los pings a esos nodos es exitoso en al menos el 50% considera que la conexion a internet está arriba. (podría pasar que el stream no estubiera caido, solo que la conexion a internet estuviera caida y por lo tanto el correo se generaría y cuando se recuperara la conexión se enviaría una notificacón falsa"

Por cierto que la primera vez que se ejecuta para un stream dado (2º parámetro falla, pero no tengo ganas de cambiarlo ahora).


  1. #!/bin/bash
  2. #set -x
  3. # Recibe dos variables
  4. #       $1 : URL del stream
  5. #       $2 : Nombre del Stream
  6. #       $2 : Dirección de correo en la que recibir las noificaciones
  7.  
  8. TESTNODE1="google.es"
  9. TESTNODE2="yahoo.es"
  10. SMSSCRIPT="/etc/scripts/creaEvento.php"
  11. MAILRECIPIENT="mail@domain.com"
  12.  
  13. MAILSUBJECT="Stream de ${NOMBRE}, ${URL}, caido"
  14.  
  15. if ( [ "$#" -lt "1" ] || [ "$#" -gt "3" ] ); then
  16.         echo "Usage: $0 StreamURL StreamID [ContactEmail]"
  17.         exit 1
  18. else
  19.         URL=$1
  20.         NOMBRE=$2
  21.         FECHA=`date "+%A %d de %B de %Y"`
  22.         if [ "$3" != "" ]; then
  23.                 MAILRECIPIENT=$3
  24.         fi
  25.  
  26. fi
  27.  
  28. MAILBODY="Buenas, solo queria informarles de que el stream: ${URL} no esta disponible ahora mismo ${FECHA}
  29. Por favor echenle un vistazo para que podamos disfrutar de la radio usando nuestras radios WIFI
  30.  
  31.  
  32. Un saludo"
  33.  
  34. RECMAILBODY="Buenas,
  35. Les informo de que el stream  ${URL} ha vuelto a funcionar.
  36.  
  37. Muchas gracias por todo y un saludo"
  38.  
  39. STILLMAILBODY="Buenas,
  40. Les informo de que el stream ${URL} continua caido ahora mismo: ${FECHA}.
  41.  
  42. Gracias y un saludo"
  43.  
  44.  
  45. CACHE="/var/cache/EstadoStream/${NOMBRE}"
  46. OUTFILE="/tmp/VLC.out.XXX"
  47. LOGFILE="/tmp/VLC.log.XXX"
  48. MAILFILE="/tmp/VLC.mail.XXX"
  49.  
  50. TEMP1=`mktemp ${OUTFILE} || exit $?`
  51. TEMP2=`mktemp ${LOGFILE} || exit $?`
  52. TEMP3=`mktemp ${MAILFILE} || exit $?`
  53.  
  54. #Fichero de caché, si tenemos un 1 significa que el estado anterior es UP and Running.
  55. #Si tenemos un 0 significa que el estado anteriro es DOWN
  56. touch ${CACHE}
  57. BEFORE=`cat ${CACHE}`
  58.  
  59. cvlc --http-caching 5000  "${URL}"  --sout="#transcode {acodec=mp3,ab=128}:duplicate{dst=std{access=file,mux=ts,dst=${TEMP1}}}" &>${TEMP2} &
  60. ID=$!
  61.  
  62. trap "rm -f ${TEMP1} ${TEMP2} ${TEMP3};kill -1 ${ID} 2>&-" 0
  63.  
  64.  
  65. sleep 15s
  66. kill -9 $ID
  67.  
  68. EXITO=`grep "access_mms access: connection successful" ${TEMP2} |wc -l`
  69. if [ "$EXITO" -gt "0" ]; then
  70.         echo "Stream: ${URL}  arriba"
  71.         if [ "$BEFORE" -eq 0 ]; then
  72.                 echo "Stream: ${URL} Recuperado"
  73.                 SAL=`${SMSSCRIPT} "${NOMBRE} está recuperado" "$URL" "$NOMBRE está recuperado: $URL"`
  74.                 echo ${RECMAILBODY} > ${TEMP3}
  75.                 mail -s "Stream recuperado" "${MAILRECIPIENT}" < ${TEMP3}
  76.         fi
  77.         echo 1 > ${CACHE}
  78.         exit 0
  79. else
  80.         PING1=`ping -c 5 ${TESTNODE1} |grep "%" |cut -d',' -f3|cut -d'%' -f 1`
  81.         PING2=`ping -c 5 ${TESTNODE2} |grep "%" |cut -d',' -f3|cut -d'%' -f 1`
  82.         if ( [ "$PING1" -lt "50" ] || [ "$PING2" -lt "50" ] ); then
  83.                 if [ "$BEFORE" -eq 0 ]; then
  84.                         echo "Stream: ${URL}  continua caido"
  85.                         echo ${STILLMAILBODY} > ${TEMP3}
  86.                         mail -s "Stream continua caido" "${MAILRECIPIENT}" < ${TEMP3}
  87.  
  88.                 else
  89.                         echo "Stream: ${URL}  Caido"
  90.                         SAL=`${SMSSCRIPT} "${NOMBRE} está caido" "$URL" "$NOMBRE está caido: $URL"`
  91.                         echo ${MAILBODY} > ${TEMP3}
  92.                         mail -s "${MAILSUBJECT}" "${MAILRECIPIENT}" < ${TEMP3}
  93.                         cat ${TEMP2}
  94.                 fi
  95.                 echo 0 > ${CACHE}
  96.                 exit 1
  97.         else
  98.         echo "Internet debe estar o caido o chungo porque el Ping a los test nodes: ${TESTNODE1} ${TESTNODE2} pierde mas del 50% de paquetes para ambos nodos"
  99.         exit 2
  100.         fi
  101. fi
Herramientas personales