"Después del juego es antes del juego"
Sepp Herberger

martes, 19 de noviembre de 2019

Avisos multicanal desde monit.

Aunque ya he usado monit para avisar de determinados eventos, hay veces que necesito una notificación inmediata. En concreto quería monitorizar punto wifi que sospechosamente perdía la conexión más de lo habitual.

Para ello decidí no limitarme a mandar un "alert" cuando se pierde el ping, sino que lanzo un script que hará más ruido:
check host punto-wifi with address 192.168.0.1
       if failed icmp type echo count 3 with timeout 5 seconds then exec "/usr/local/bin/aviso-wifi"
1. Avisos multicanal.

El script aviso-wifi usa distintos tipos de aviso por diferentes cauces:
# cat /usr/local/bin/aviso-wifi 
#!/bin/bash

MENSAJE="Otra vez desconectado $(date)!"

#Log del sistema
echo $MENSAJE >> /var/log/wifilog.log

#Correo
mailsend -to destinatario@gmail.com \
      -from emisor@gmail.com \
      -ssl -smtp smtp.gmail.com -port 465 \
      -sub "Aviso" \
      -M "$MENSAJE" \
      +cc +bc -q -auth -user "emisor@gmail.com" -pass "mipassword"

#Mensaje push al móvil android
PUSHKEY="APcdkK"
curl --data "key=$PUSHKEY&title=Aviso&msg=$MENSAJE" https://api.simplepush.io/send

#Mensaje SMS al móvil android
MOVIL="+34855123456"

curl -X POST https://textbelt.com/text \
       --data-urlencode phone="$MOVIL" \
       --data-urlencode message="$MENSAJE" \
       -d key=textbelt

exit 0
Los distintos métodos usados son:
  • Guarda un registro en /var/log/wifilog.log.
  • Envía un correo mediante gmail usando mailsend, que tendríamos que instalar previamente.
  • Envía un mensaje push a nuestro móvil mediante la aplicación simplepush.io, que saltará de forma inmediata. Es tan sencillo como instalar esta aplicación en el móvil y poner en el script la PUSHKEY que nos aparece al abrirla, que identifica nuestro móvil de forma única como destinatario.
    Como pequeño inconveniente tenemos que los mensajes son gratuitos los 7 primeros días, luego hay que comprar la aplicación (cuesta unos merkels) para poder recibir mensajes. Se pueden establecer alarmas sonoras distintas en función de diversos tipos de mensajes push.
  • Por último, por volver a los 90, mandamos un SMS a nuestro móvil (+34855123456, es un número ficticio, pon el tuyo empezando por +34). Este servicio de textbelt permte mandar un único SMS al día gratis, pero si nos resulta útil podemos comprar paquetes SMS prepago.

Tanto simplepush.io como textbelt son dos de los muchos servicios push y SMS que hay. Yo he puesto estos porque los encontré pronto y me resultaron fáciles de usar mediante sencillas peticiones web con el comando curl.

Por supuesto, se podría ampliar el script con otros medios de aviso, por ejemplo mensajes telegram o cualquier otro sistema que se pueda hacer mediante scripts.

2. Avisos sonoros.

Un escalón mas es hacer sonar un aviso por los altavoces del PC del aula donde se detecta el evento, para que si es especialmente grave el usuario tome medidas. El script sería:
# cat /usr/local/bin/aviso-audio 
#!/bin/bash

#Subimos el volumen al máximo en el alsamixer
amixer set Master unmute
amixer set Master 100%

#Si hay un usuario logado, conectamos con su pulseaudio para subir el volumen al máximo
user=$(who | grep "(:0)" | head -1 | cut -f1 -d" "); 
if  [ -n "$user" ]
then
  su $user -c "DISPLAY=:0 pactl set-sink-volume 0 150%"
  su $user -c "DISPLAY=:0 pactl set-sink-mute 0 0"
fi

#Si esta instalado placasiatic es una siatic y podemos encender por comando la barra de sonido.
test -f /usr/sbin/placasiatic && placasiatic sonido up

if  [ -n "$user" ]
then
  while true
  do
     ffplay /root/scripts/locucion.mp3 -nodisp -nostats -hide_banner 
     su $user -c "DISPLAY=:0 zenity --info  --width 400 --height 100  --title='Desconexion de sistema' --text='Avise al administrador informatico de forma urgente.'"
  done
else
   ffplay /root/scripts/locucion.mp3 -nodisp -nostats -hide_banner -loop 0
fi


exit 0
Comentamos:
  • Con amixer quitamos el mute (silencio) y subimos al 100% del volumen del canal de audio Master.
  • Si hay un usuario con sesión iniciada, conectamos con su instancia pulseaudio para subir al máximo el volumen allí mediante pactl y hacer unmute.
  • Si estamos en una Siatic encendemos la barra de sonido mediante el relé. Esto garantiza que si el usuario ha apagado la barra la encendemos de nuevo usando la utilidad placasiatic. Por supuesto, si los altavoces del PC son convencionales y están apagados físicamente en su interruptor, no saldrá nada de sonido. Es algo que puede pasar y para lo cual no tenemos solución.
  • Por último, se reproduce una locución en bucle infinito codificado en mp3 mediante ffplay. Si hay usuario con sesión iniciada se muestra además un mensaje de texto en su escritorio mediante zenity.
  • La locución se puede generar fácilmente con texttomp3.
Para ejecutar este script desde el del apartado anterior es suficiente con añadir:
nohup /usr/local/bin/aviso-audio >/dev/null 2>&1 &


Cuando lo extraordinario empieza a ser habitual es señal de que se está haciendo bien: SpaceX ha lanzado una nueva carga de satélites Starlink.


Se lanzan 60 microsatélites Starlink (que mientras se van desplegando en las próximas semanas se podrán ver como un tren por el cielo nocturno una vez más), la etapa inicial del Falcon reutilizado por cuarta vez aterriza en la plataforma barcaza Of Course I Still Love You y la cofia se reutiliza por primera vez y se recupera mediante un barco.

Y todavía hay gente que afirma que todo lo relacionado con Elon Musk es humo.

No hay comentarios:

Publicar un comentario