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).
#!/bin/bash#set -x# Recibe dos variables# $1 : URL del stream# $2 : Nombre del Stream# $2 : Dirección de correo en la que recibir las noificacionesTESTNODE1="google.es"
TESTNODE2="yahoo.es"
SMSSCRIPT="/etc/scripts/creaEvento.php"
MAILRECIPIENT="mail@domain.com"
MAILSUBJECT="Stream de ${NOMBRE}, ${URL}, caido"
if ( [ "$#" -lt "1" ] || [ "$#" -gt "3" ] ); then
echo "Usage: $0 StreamURL StreamID [ContactEmail]"
exit 1
elseURL=$1
NOMBRE=$2
FECHA=`date "+%A %d de %B de %Y"`
if [ "$3" != "" ]; then
MAILRECIPIENT=$3
fifiMAILBODY="Buenas, solo queria informarles de que el stream: ${URL} no esta disponible ahora mismo ${FECHA}
Por favor echenle un vistazo para que podamos disfrutar de la radio usando nuestras radios WIFIUn saludo"RECMAILBODY="Buenas,
Les informo de que el stream ${URL} ha vuelto a funcionar.Muchas gracias por todo y un saludo"STILLMAILBODY="Buenas,
Les informo de que el stream ${URL} continua caido ahora mismo: ${FECHA}.Gracias y un saludo"CACHE="/var/cache/EstadoStream/${NOMBRE}"
OUTFILE="/tmp/VLC.out.XXX"
LOGFILE="/tmp/VLC.log.XXX"
MAILFILE="/tmp/VLC.mail.XXX"
TEMP1=`mktemp ${OUTFILE} || exit $?`
TEMP2=`mktemp ${LOGFILE} || exit $?`
TEMP3=`mktemp ${MAILFILE} || exit $?`
#Fichero de caché, si tenemos un 1 significa que el estado anterior es UP and Running.#Si tenemos un 0 significa que el estado anteriro es DOWNtouch ${CACHE}
BEFORE=`cat ${CACHE}`
cvlc --http-caching 5000 "${URL}" --sout="#transcode {acodec=mp3,ab=128}:duplicate{dst=std{access=file,mux=ts,dst=${TEMP1}}}" &>${TEMP2} &
ID=$!
trap "rm -f ${TEMP1} ${TEMP2} ${TEMP3};kill -1 ${ID} 2>&-" 0
sleep 15skill -9 $ID
EXITO=`grep "access_mms access: connection successful" ${TEMP2} |wc -l`
if [ "$EXITO" -gt "0" ]; then
echo "Stream: ${URL} arriba"
if [ "$BEFORE" -eq 0 ]; then
echo "Stream: ${URL} Recuperado"
SAL=`${SMSSCRIPT} "${NOMBRE} está recuperado" "$URL" "$NOMBRE está recuperado: $URL"`
echo ${RECMAILBODY} > ${TEMP3}
mail -s "Stream recuperado" "${MAILRECIPIENT}" < ${TEMP3}
fiecho 1 > ${CACHE}
exit 0
elsePING1=`ping -c 5 ${TESTNODE1} |grep "%" |cut -d',' -f3|cut -d'%' -f 1`
PING2=`ping -c 5 ${TESTNODE2} |grep "%" |cut -d',' -f3|cut -d'%' -f 1`
if ( [ "$PING1" -lt "50" ] || [ "$PING2" -lt "50" ] ); then
if [ "$BEFORE" -eq 0 ]; then
echo "Stream: ${URL} continua caido"
echo ${STILLMAILBODY} > ${TEMP3}
mail -s "Stream continua caido" "${MAILRECIPIENT}" < ${TEMP3}
elseecho "Stream: ${URL} Caido"
SAL=`${SMSSCRIPT} "${NOMBRE} está caido" "$URL" "$NOMBRE está caido: $URL"`
echo ${MAILBODY} > ${TEMP3}
mail -s "${MAILSUBJECT}" "${MAILRECIPIENT}" < ${TEMP3}
cat ${TEMP2}
fiecho 0 > ${CACHE}
exit 1
elseecho "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"
exit 2
fifi

