Forum Programmation.python Référencer du code dans une BdD ?

Posté par  (Mastodon) . Licence CC By‑SA.
Étiquettes :
4
10
juil.
2020

Bonjour,

Je me développe un outil pour le boulot et à y être je me mets au python.
Pour donner un peu de contexte, il s'agit de gérer des opérations sur le terrain sur une liste de produits qui sont en exploitation (ordre d'idée, 80). Sans divulguer de secret industriel, disons que c'est de l'IoT urbain basé sur un Linux. Je me balade en rue avec un point d'accès WiFi mobile et mes objets se connectent dessus. À partir de là je veux :
- faire une liste de diagnostics pré-établis (par exemple espace disque restant, vérification de tel ou tel paramètre, de la version de l'appli principale)
- avoir sous la main à porté de clic des commande SSH qui sont lancées pour résoudre les pb (respectivement : nettoyage des logs, modification d'un paramètre, mise à jour de l'appli)

J'ai choisi Flask pour l'interface graphique, SQLAlchemy pour la gestion de la BdD et paramiko pour les commandes SSH.

Ma question pose sur la BdD.

Pour les produits c'est évident, je vois bien une table avec mes produits (numéro de série, date à laquelle je m'y suis connecté la dernière fois etc.). Je pars en rue avec une table déja remplie de produits dont je sais qu'ils sont posés, et au fur et à mesure que je m'y connecte, je "checke" le produit. Je peux suivre aisément ceux que j'ai vu et ceux qui me restent à faire.

Par contre pour les opérations, je verrais bien une table avec :

  • nom de l'opération (ex : "espace disque")
  • ref vers du code Python pour vérifier (ex en pseudo code : paramiko.connect("df -h /"))
  • ref vers du code Python pour effectuer l'opération (ex : paramiko.connect("rm -rf /")) (non je blague)

Y a t-il un moyen dans ma BdD de référencer une procédure de code ?

Pour finir j'aurai ma table (n,n) qui servira à référencer que tel jour telle heure j'ai effectué telle opération sur tel produit.

Merci

  • # Self debug

    Posté par  (Mastodon) . Évalué à 3.

    Bon évidemment en écrivant ce post je trouve déjà une première piste…

    Je peux toujours mettre dans la BdD du code python (grosse String), et je me doute qu'il doit bien exister une sorte de eval en python. Mais je ne suis pas sûr d'arriver à mettre des valeurs paramétrables comme l'IP du produit pour envoyer le commande SSH.

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: Self debug

      Posté par  (Mastodon) . Évalué à 2.

      ou alors moins con, je mets un nom de procédure dans la BdD et dans le code je fais un exec. Faudrait juste que je trouve a faire un exec("produit.<nom_de_procedure>")

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

      • [^] # Re: Self debug

        Posté par  . Évalué à 3.

        Salut,

        J'ai peu pratiqué, mais en flask normalement tu met des routes.

        Ce qui pourrait te permettre (je suis pas sûr d'avoir bien suivi la logique) d'avoir une route pour une opération par type d'intervention+dispositif et dispatcher tout ça dans du code sans reposer sur la BdD.

        Je ne suis pas bien sûr de faire avancer ton problème… Mais au cas où ;)

        Matricule 23415

    • [^] # Re: Self debug

      Posté par  (Mastodon) . Évalué à 2. Dernière modification le 13 juillet 2020 à 23:12.

      Python en un langage dynamique, tu peux patcher à tout moment le code de ton application, par exemple avec du currying (ajouter des méthodes dynamiquement à un objet)… en cours de fonctionnement !
      Il y a bien un eval en python…

      Autre piste: stocker les procédures python dans des grosses string (genre blob ou text dans la base de données), et utiliser un process.exec(python3 )… si tu mets un shebang à ton code dans la DB, tu peux créer un fichier temporaire avec le contenu de ton champs et l'executer directement avec process.exec - il doit y avoir un équivalent ssh dans paramiko. (ansible fait plus ou moins comme ça).

      Ansible est une bonne piste aussi: ça fait tout ça et bien plus !

      • Tu géres un fichier hosts avec les adresses de et IoT
      • Ansible fait un inventaire des ressources pour toi quand il se connecte
      • Tu peux analyser cet inventaire et voir si il y a des décisions à prendre
      • Tu crées une liste de rôles pour les tâches les plus courantes
      • Ton appli automatise les appels aux procédures selon les besoins

      En plus, tu peux utiliser la base SQLite directement comme liste de hosts !

      Courage !

  • # La bdd c'est bien mais c'est pas tout

    Posté par  . Évalué à 1.

    Tu pourrais livrer avec ton appli flask des fichiers executables, des scripts ansible, etc. en vrac dans le filesystem?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.