Utiliser l'API pour obtenir les logs en temps réel

Bonjour à tous,
je voudrais essayer de créer un script Python qui récupère en temps réel les logs de Yunohost et les passe via Serial à un Arduino connecté qui s’occupera d’un petit affichage sur le boitier de mon serveur.
Ainsi, par exemple, je peux suivre directement sur le boitier serveur la progression d’une mise à jour/installation (je pense à Bitwarden qui est particulièrement long et je ne reste jamais sur la webadmin aussi longtemps).

J’essaie donc de comprendre comment fonctionne cette API, j’ai vu qu’il y avait un bout de code sur un websocket dans la webadmin, je suppose que c’est par là qu’elle reçoit les logs qui sont affichés dessus (et c’est exactement ces logs-là que je veux !)

J’ai essayé de me connecter à ce websocket avec un script Python en local sur le serveur pour tester, et, comme je m’y attendais, il est nécessaire de s’authentifier avec le mot de passe admin, mais je ne comprends pas comment faire…

Je voudrais trouver un moyen, si possible, de contourner cette authentification puisque le script tourne seulement en local et que j’ai la manie de changer de code assez souvent (en allant rechercher le mot de passe admin dans le LDAP s’il n’est pas crypté ?). Sinon comment faire pour simplement se connecter à l’API quand le code est fourni dans le script ?

Il n’est peut-être même pas nécessaire de se connecter au WebSocket utilisé par la webadmin pour récuperer les logs via un script local… J’avoue que je sèche.

Quelqu’un aurait-il un indice sur comment procéder ?
Merci pour toute réponse :slight_smile:

1 Like

Petit bump :slight_smile:

Ébééééé à mon avis c’est complexe, perso je sais pas trop comment tout le schmiblik du websocket fonctionne (je ne sais pas si quelqu’un dans le projet sait)

Naivement je m’dis que si deux clients sont connectés au websocket (depuis la webadmin, et l’autre depuis le script), alors un seul recoit le message … mais pas sur.

Si tu veux vraiment suivre cette voie, tu peux à mon avis tenter de t’authentifier comme fait ici

L’object “webapi” et similaire à “requests” donc ca donne quelque chose comme:

        requests.post(
            "/login",
            {"password": password, "profile": "default"},
            headers={"X-Requested-With": ""})

(et ensuite il faut te débrouiller pour récupérer le cookie qui va bien (“session.id” et “session.token”) et les rebalancer à la requête suivante - et/ou gérer ça avec une session “propre”)

Sinon, l’autre approche c’est d’utiliser SSH pour lire les fichiers de log -cli et -api dans /var/log/yunohost

Yup,
merci pour la réponse :grinning_face_with_smiling_eyes:

Je pense que je vais d’abord commencer par jouer avec les logs locaux (j’avais jamais fait gaffe qu’ils étaient aussi détaillés dans un seul fichier, je les pensais séparés en plein de petits, ce qui est le cas dans /var/log/yunohost/categories/opération) pour éviter de me farcir toute l’authentification avec un code à changer très (trop) souvent à chaque fois que je change le mot de passe administrateur.

J’essaierai de faire un truc fonctionnel, et si ça marche je le mettrai dans un repo Github, c’est pas grand-chose mais ça pourrait être utile à certains (et puis comme j’utilise Git pour la majorité de mes projets…)