Benachrichtigungssystem von der Konsole zum Telegramm

In der Vergangenheit gab es oft Situationen, in denen eine anspruchsvolle Aufgabe lange dauert, aber es ist wünschenswert, am Ende schnell zu reagieren. Was soll ich tun? Natürlich schreibe ein Programm ...


Die erste Version verwendete einfach Benachrichtigen-Senden, aber die Zeit zeigte einige Unannehmlichkeiten für den Prozess. Da die Operationen an der Maschine sehr anspruchsvoll waren, wurde die Maschine in diesem Moment instabil und ich wollte wegziehen und Kaffee trinken. Aber komm zurück, wenn der Prozess abgeschlossen ist. Aus diesem Grund entstand die Idee eines Programms, das in eine Konsolenpipeline verkettet oder als Sudo-Programm verpackt wurde und Ihnen am Ende eine Benachrichtigung an den Chat schickte. Auf diese Weise wird eine Benachrichtigung sowohl auf dem Desktop als auch auf dem Telefon angezeigt.


Für diejenigen, die nicht lesen wollen, sondern versuchen wollen. (Nur Linux)


  1. Wir registrieren uns beim Bot und erhalten das Token mit dem Befehl / config
  2. Laden Sie den Client herunter
  3. Starten Sie!
    wget https://ice2heart.com/snitch chmod +x snitch SNITCH_USER_ID=<here_is_your_uuid> ./snitch sleep 10 

Server


Die Idee war einfach, wir brauchen einen einfachen Server, der die Nachricht empfängt und an den Benutzer weiterleitet.


Und da ich mich nicht mit dem Registrieren, Speichern und Verwalten von Konten beschäftigen wollte, habe ich beschlossen, es mir einfach erscheinen zu lassen (und jetzt scheint es, aber ich bin mir nicht sicher, ob dies gut ist).


Mit einem Bot erhält eine Person eine eindeutige UUID v4, mit der sie dann zum Server geht. Die Autorisierung erfolgt auf der Seite des Chat-Clients, aber ich speichere nur ein paar uuid-interne IDs.


Aus diesem Grund habe ich den Serverteil zusammengestellt, indem ich node.js als Server genommen und ein wenig Koa, Nedb, Node-Telegramm-Bot-API hinzugefügt habe. Die Architektur implizierte zunächst mehr Gateways in den Chats, aber es gab keine Fälle und daher gab es nur ein Telegramm.


Außerdem wollte ich die js-Anwendung nicht direkt ins Internet stellen, also habe ich mithilfe der Magie von Docker einen Caddy-Proxy-Server hinzugefügt. Warum ist er? Weil mir das Format der Konfigurationsdateien gefällt.


Der Server erwies sich als einfach, aber für den Betrieb ausreichend.


Daher haben wir eine so einfache Docker-Compose-Datei, dass wir auch einen Bot-Schlüssel benötigen, den wir in die .env-Datei einfügen, um unsere Schlüssel nicht in Github zu speichern, was nicht gut ist.


Für den Start benötigen wir Docker, Docker-Compose und einen Schlüssel für Bot-Carts. Um Ihren zu erhalten, müssen Sie sich an Botfather wenden .
Danach erstellen Sie Docker-Compose und unser Server ist betriebsbereit.


Kunde


Für den Client habe ich mich aus dem einfachen Grund für 1 Binärdatei entschieden, die dann einfach verteilt werden kann.


Es gab zwei Hauptideen über den Kunden.


  1. Wir integrieren in die Pipeline, sammeln das Protokoll (nicht implementiert) und senden eine Nachricht, um die Pipeline zu schließen.
  2. Wir verpacken die Anwendung, zum Beispiel sudo, und senden am Ende ein Protokoll und eine Nachricht mit einem Rückkehrcode.

Während der Implementierung gab es keine einfache Möglichkeit, den Rückkehrcode des vorherigen Programms in der Pipeline herauszufinden. Dies verringert leider die Freude an der Verwendung des Programms in der Pipeline.
Für die Konfiguration habe ich Umgebungsvariablen ausgewählt, da sie das Kopieren von Einstellungen von Maschine zu Maschine vereinfachen und sie leicht ersetzen können.


Dadurch wird die Installation so einfach wie möglich.


  1. Laden Sie die Binärdatei herunter
  2. Wir registrieren uns in PATH
  3. Wir schreiben die Variable SNITCH_USER_ID in die Shell-Konfiguration mit Ihrer UUID
  4. Fertig, du bist großartig!

Jetzt können Sie lange Befehle in Form von snitch make ausführen. Nach Abschluss erhalten wir eine Nachricht, dass die Anwendung abgeschlossen wurde, und wir werden sogar wissen, ob sie erfolgreich ist oder nicht.


Zum Erstellen habe ich ein kleines Skript erstellt, das einfach r heißt. Es wird die go-Anwendung sammeln und durch upx weiterleiten. Und am Ausgang erhalten wir eine schöne statisch verknüpfte Binärdatei.


Den Quellcode finden Sie hier.


Und wenn alles fertig ist, können Sie sich mit dem Befehl / config an den Bot wenden
Und er wird einen Datensatz über unseren Benutzer erstellen und uuid zurückgeben.
Sie können auch jederzeit aus der Datenbank gelöscht werden, dazu gibt es einen Befehl / Löschen


So haben wir eine ziemlich einfache, aber effektive Anwendung erhalten, die uns leicht und natürlich über eine erledigte Aufgabe informiert, selbst wenn wir Kaffee trinken.

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


All Articles