Messages de notification
En lisant le billet “Irssi et les messages de notification…”, j’ai eu une idée. Et si je me faisais un système de notifications pour toutes sortes d’informations venant d’un serveur en ligne?
C’est le même principe que Growl avec les applications locales. D’ailleurs, Growl peut recevoir des messages d’applications distantes, mais ce n’est pas dans ce sens que je vais le faire.
Présentation
J’utilise principalement Ubuntu et MacOSX, et ils ont tous les 2 un afficheur de notifications sous forme de bulles qui apparaissent par dessus les applications:
- libnotify pour Ubuntu
- Growl pour MacOSX
On peut afficher le message qu’on veut à l’aide d’une ligne de commande.
Je vais créer mon système de notifications en 2 étapes:
- Création d’un fichier de log sur une machine distante
- Récupération en continu des nouvelles entrées du log
Enregistrer les modifications
Je veux centraliser les messages dans un seul fichier, sur mon serveur en ligne, par exemple /home/neolao/notifications.txt
. Chaque ligne de ce fichier est une notification. Je décide que le premier mot sera le type et la suite sera le message.
Donc, très simple, si je veux ajouter une nouvelle notification, je fais:
echo "meteo Il fait beau"
Ce qui va d’abord m’intéresser, c’est d’avoir les nouveaux messages qu’on m’envoie sur finch ou irssi. Ca se résume à détecter les modifications du dossier d’archives de ces logiciels.
J’installe donc un utilitaire qui va m’indiquer la modification d’un fichier récursivement dans un dossier que je lui spécifie. La commande est inotifywait
qui est dans le paquet inotify-tools. Voici mon script:
#!/bin/bash
inotifywait -rmq --format '%w %f' -e modify /home/neolao/.purple/logs | while read dir file
do
echo "finch" `tail -n1 $dir$file` >> /home/neolao/notificatons.txt
done
inotifywait
me permet de connaître le fichier qui a été modifié. Ensuite, j’écris la dernière ligne de ce fichier dans mes notificatons en préfixant avec le type (ici finch
).
Pour irssi, j’ai utilisé fnotify qui remplit un fichier quand je reçois des messages privés et quand on écrit mon nom. Il suffit de modifier un petit peu le script pour qu’il ajoute ce que je veux dans mon fichier /home/neolao/notifications.txt
.
Afficher les nouvelles notifications
Maintenant que la machine distante remplit bien le fichier /home/neolao/notifications.txt
, il faut que je crée un script sur chacune de mes machines locales.
Notification sur Ubuntu
Sur Ubuntu, j’ai installé le paquet libnotify-bin
pour avoir la commande notify-send
. Et voici le script que je lance :
#!/bin/bash
ssh mylogin@hostname "tail -f notifications.txt" | while read type message
do
notify-send -t 5000 -i info -u low "$type" "$message"
done
Notification sur MacOSX
Et le script pour Growl :
#!/bin/bash
ssh mylogin@hostname "tail -f notifications.txt" | while read type message
do
/usr/local/bin/growlnotify -t "$type" -m "$message"
done
Conclusion
C’est plutôt efficace. J’essaie d’imaginer les notifications que je pourrai avoir besoin et aussi mes filtres. Je pourrai rendre accessible mes notifications par une page web (secrète bien sûr) pour une consultation sur mobile, voire envoyer des mails récapitulatifs sur 15 minutes.
D’ailleurs, avec des API, il y a moyen d’afficher des informations venant de sites web, ma machine distante servant à centraliser tout le bazar qu’une seule fois.
Voilà, c’était un trip rapide :)
Commentaires