Système de notification de la console au télégramme

Il y avait souvent des situations dans le travail passé où il y a une tâche exigeante qui prend beaucoup de temps, mais il est souhaitable de répondre rapidement à la fin, que dois-je faire? Bien sûr, écrivez un programme ...


La première version utilisait simplement notify-send, mais le temps a montré quelques inconvénients pour le processus. Comme les opérations étaient très exigeantes pour la machine, la machine devenait instable à ce moment et je voulais m'éloigner et boire du café. Mais revenez une fois le processus terminé. C'est pourquoi l'idée d'un programme est apparue, qui a été enchaînée dans un pipeline de console ou enveloppée comme un programme sudo et à la fin, elle vous a envoyé une notification pour le chat. Ainsi, vous verrez une notification à la fois sur le bureau et sur le téléphone.


Pour ceux qui ne veulent pas lire, mais veulent essayer. (Linux uniquement)


  1. Nous nous inscrivons avec le bot et obtenons le jeton avec la commande / config
  2. Téléchargez le client
  3. Lancez!
    wget https://ice2heart.com/snitch chmod +x snitch SNITCH_USER_ID=<here_is_your_uuid> ./snitch sleep 10 

Serveur


L'idée était simple, nous avons besoin d'un serveur simple qui recevra le message et le transmettra à l'utilisateur.


Et comme je ne voulais pas me soucier de l'enregistrement, du stockage et de la gestion des comptes, j'ai décidé de faire en sorte que cela me paraisse simple (et maintenant il semble, mais je ne suis pas sûr que ce soit bien).


À l'aide d'un bot, une personne reçoit un uuid v4 unique, avec lequel elle se rend ensuite sur le serveur. L'autorisation est du côté du chat, mais je ne stocke que quelques ID internes à uuid.


Par conséquent, en prenant node.js comme serveur et en ajoutant un peu de koa, nedb, node-telegram-bot-api, j'ai rassemblé la partie serveur, l'architecture impliquait initialement plus de passerelles dans les chats, mais il n'y avait pas de cas et donc il n'y avait qu'un seul télégramme.


De plus, je ne voulais pas mettre l'application js directement sur Internet, donc en utilisant la magie de docker, j'ai ajouté un serveur proxy caddy. Pourquoi est-il? Parce que j'aime le format des fichiers de configuration.


Le serveur s'est avéré simple, mais suffisant pour fonctionner.


Par conséquent, nous avons obtenu un fichier docker-compose si simple, nous avons également besoin d'une clé pour le bot, que nous avons placée dans le fichier .env afin de ne pas enregistrer nos clés dans github, ce qui n'est pas bon.


Donc, pour le lancement, nous avons besoin de docker, de docker-compose et d'une clé pour les chariots de bot, pour obtenir le vôtre, vous devez vous tourner vers botfather .
Après cela, docker-compose up et notre serveur est prêt à fonctionner.


Client


Pour le client, j'ai décidé de me lancer pour la simple raison qu'il va vers 1 fichier binaire, qui peut ensuite être facilement distribué.


Il y avait deux idées principales sur le client.


  1. Nous intégrons dans le pipeline, collectons le journal (non implémenté), envoyons un message pour fermer le pipeline.
  2. Nous enveloppons l'application, par exemple sudo, à la fin nous envoyons un journal et un message avec un code retour.

Pendant l'implémentation, il n'y avait pas de moyen facile de trouver le code retour du programme précédent dans le pipeline, cela réduit malheureusement la joie d'utiliser le programme dans le pipeline.
Pour la configuration, j'ai choisi des variables d'environnement, car elles facilitent la copie des paramètres d'une machine à l'autre, et elles sont facilement remplaçables.


En conséquence, l'installation devient aussi simple que possible.


  1. Téléchargez le binaire
  2. Nous nous inscrivons dans PATH
  3. Nous écrivons la variable SNITCH_USER_ID dans la configuration du shell avec votre uuid
  4. Terminé, vous êtes super!

Vous pouvez maintenant exécuter de longues commandes sous la forme de snitch make et à la fin, nous recevrons un message indiquant que l'application est terminée et nous saurons même si elle a réussi ou non.


Pour construire, j'ai fait un petit script, qui s'appelait simplement r. Il collectera l'application go et la passera par upx. Et à la sortie, nous obtenons un beau binaire lié statiquement.


Vous pouvez trouver le code source ici.


Et quand tout est prêt, vous pouvez vous tourner vers le bot avec la commande / config
Et il va créer un enregistrement sur notre utilisateur et retourner uuid.
Vous pouvez également toujours être supprimé de la base de données, pour cela il y a une commande / supprimer


Ainsi, nous avons obtenu une application assez simple mais efficace qui nous informera de la tâche terminée, facilement et naturellement, même lorsque nous buvons du café.

Source: https://habr.com/ru/post/fr425707/


All Articles