IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Monitorer des données distantes


Sujet :

Python

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2011
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 72
    Par défaut Monitorer des données distantes
    Bonjour à vous tous,

    Avant tout de chose je ne sais pas si j'ai posté dans la bonne rubrique, mais c'est justement car je ne sais pas par ou commencer.
    J'ai des dizaines d'instruments scientifiques dans pleins de pays différents qui envoient leurs données sur un unique serveur.
    Je cherche à créer une page web qui me donnerait le status pour chacun des instruments, par exemple avec une icone verte si la donnée du jour a bien été uploadé sur le serveur, une icone rouge si aucune réception depuis plusieurs jours, et orange si pas de reception depuis 24h (quelque chose du genre).
    Je programme un peu en python (pas un expert mais je peux me débrouiller), par contre je n'ai aucune idée de comment je peux mettre en place ce genre de systeme de monitoring (avec une page simple en html, un script python ou autre qui va sonder les emplacements sur le serveur, si il y a besoin de faire un fichier ascii pour stocker le status et une date d'arrivée de fichier ou autre)...
    Avez vous une idée à me donner concernant une méthode simple ?
    Que ce soit avec python ou autre langage, toutes les réponses seront de toutes façon bonnes à prendre vu que je n'ai aucune idée

    En vous remerciant !
    Jonathan

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Tu n'es pas dans le bon forum. Ce que tu cherches à faire ne se fait pas en Python mais en php. Pour une raison très simple: le php est le langage que sait lire le serveur html.

    En fait le principe n'est pas super compliqué. Il nécessite d'abord un serveur html afin de répondre au client qui ouvre un navigateur sur ta page. Le serveur va alors afficher ladite page. Concernant les serveurs il y en a pas mal mais étant habitué de Linux, je ne peux que te conseiller Apache qui est un des plus connu sur cet OS.
    Ensuite il faut que la page HTML soit générée par le serveur parce qu'elle doit afficher des valeurs au moment où elle est appelée (ces valeurs seront prises dans tes fichiers de log). Elle ne peut donc pas être fixe. Or pour que le serveur génère la page, il lui faut un langage de prog.
    C'est ce qu'on nomme généralement l'architecture 3 tiers.

    Et le langage généralement associé à Apache est "php". Ce n'est pas le seul (il y a aussi Java, JSP, ASP) mais PHP a l'avantage de pouvoir s'intégrer dans une page HTML. Ainsi une page html/php peut contenir des infos fixes (le titre, un petit texte), puis peut basculer sur un code php qui y intègrera des éléments calculés puis rebasculer sur du texte fixe puis rebasculer sur un autre code php et etc
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <html><head>...</head>
    <body><h1>Mes capteurs</h1>
    <?php
    Ici un code php qui va racupérer et afficher des valeurs
    ?>
    <P>.... (un autre texte fixe)...</P>
    <?php
    Ici un autre code php qui va racupérer et afficher d'autres valeurs
    ?>
    <P>fin de la page</P>
    </body></html>
    Ainsi créer la page se fait assez rapidement.

    Ensuite éventuellement tu peux utiliser d'autres outils dédiés aux calculs des informations élaborées à partir des informations connues (si besoin). En théorie, php pourrait convenir pour ça (c'est un langage de prog donc il peut générer des infos) mais son inconvénient principal est qu'il est super long. On peut l'utiliser pour récupérer des infos et les afficher en html mais quand on commence à vouloir générer des infos...
    Donc là on peut se tourner vers d'autres langages comme Python. Ainsi le déroulement d'une requête est la suivante
    • le client demande la page au serveur
    • le serveur demande à php de générer la page
    • php appelle l'outil externe (python par exemple)
    • l'outil externe fait les calculs et produit (ou enregistre) le résultat
    • php récupère ce résultat et le met en HTML
    • le serveur affiche la page HTML

    C'est ce qu'on nomme l'architecture n-tiers (ou multi-tiers).

    Si t'es sous Windows, il existe un package nommé "WAMP" (Windows, Apache, MySQL, PHP). Il intègre donc un serveur apache, un parseur de code PHP et un serveur bdd MySQL (ce qui te permettra par exemple d'y stocker tes données à monitorer). Un package analogue existe aussi pour Linux (LAMP) mais généralement les habitués de Linux préfèrent installer les divers outils de façon indépendante plutôt que de passer par un package qui ne possède pas forcément les dernières versions.

    Maintenant le choix de passer par un serveur n'est utile que si tu as besoin de te connecter à ta page depuis n'importe quel poste distant. Si maintenant tu restes sur un seul poste et que tu veux juste faire une application locale qui affiches tes indicateurs colorés sur ledit poste, alors Python est parfaitement adéquat pour ça. Il te faut juste alors programmer une GUI (Graphic User Interface, nom riche pour "fenêtre avec des boutons et menus") afin d'afficher tes couleurs. Et python possède en interne une librairie minimaliste pour GUI (tkinter) donc à partir de là, ne reste qu'à télécharger un tuto tk.
    Et si tu veux faire des trucs plus beaux, plus ergonomiques, avec des fenêtres boen dessinées, alors tu peux télécharger et installer des librairies plus riches telles que Qt ou Gtk mais là alors évidemment ça nécessite plus de temps pour les prendre en main...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 693
    Par défaut
    Salut,

    Citation Envoyé par yonafunu Voir le message
    Que ce soit avec python ou autre langage, toutes les réponses seront de toutes façon bonnes à prendre vu que je n'ai aucune idée
    Quelque soit le langage, il faut commencer par apprendre à programmer dans ce langage puis apprendre à réaliser un serveur Web avec ce langage là.
    Et pour apprendre, il faut ouvrir un tuto. après avoir choisi celui qui semblait le plus intelligible pour vous. Dans le Swinnen (qu'on aime bien ici) vous avez tout un chapitre là dessus.


    Citation Envoyé par Sve@r Voir le message
    Tu n'es pas dans le bon forum. Ce que tu cherches à faire ne se fait pas en Python mais en php. Pour une raison très simple: le php est le langage que sait lire le serveur html.
    Tu as fumé la moquette ou quoi?
    Un serveur Web sait juste répondre à des requêtes HTTP et il ne transmet que des séquences de bytes qui pourront avoir différents formats: HTML, JSON, TXT,... C'est le navigateur Web qui lira tout çà pour afficher la page qu'on voit.

    On peut construire des pages HTML à la volée avec Python.
    Et le faire à la mode PHP/JSP avec Python Server Pages est tellement désuet qu'il est difficile de trouver une bibliothèque qui permette de faire çà. On préfère (depuis plus d'une dizaine d'années) utiliser un serveur Web du genre flask, django,... et un moteur de template (Jinja,...) pour fabriquer ses pages HTML à la volée (et du JavaScript pour ajouter de l'interactivité côté navigateur).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 41
    Par défaut
    Hello,
    Pour ce genre de monitoring, je te conseille de regarder nagios (ou incinga). D'après ce que j'ai compris, c'est exactement ce que tu décris : des dispositifs qui envoient des mesures, et un serveur qui donne une cartographie colorée suivant des seuils d'alerte.
    On peut très bien développer de zéro (module wsgi, flask, django), et personnellement je trouve python plus efficace que php, mais c'est beaucoup de travail. Un système style nagios fonctionne à base de plugins que tu peux facilement écrire (en python, of course...) et qui injecteront les mesures dans le serveur de monitoring.
    Pas évident à installer et paramétrer la première fois, mais très fiable et facile d'utilisation une fois que ça marche.
    N'hésite pas à demander si tu as des problèmes avec ça.
    Bon courage

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Si j'ai bien compris, on appelle une page html dans un navigateur web (et donc sous n'importe quel OS: Windows, Linux, OS X, iOS, Android, ...), et il doit s'afficher l'état des mises à jour du serveur au moment où on appelle cette page.

    A mon avis, cela peut se faire de 2 façons:

    1- script côté serveur

    => Dans ce cas, au moment où la page est appelée, le script côté serveur s'exécute, cherche les infos, fabrique la page html à jour et la renvoie au navigateur du demandeur. La solution la plus naturelle est d'utiliser PHP. Il y a peut-être aussi d'autres solutions que je connais moins: javascript côté serveur (node.js?).

    2- script côté client

    => Dans ce cas, c'est la même page html qui est appelée, et cette page contient un script qui est exécuté dans le navigateur-client et permet d'afficher les infos à jour. La solution la plus naturelle est d'utiliser javascript.

    Si on veut absolument coder en Python, cela amène des obligations supplémentaires: côté serveur, les hébergeurs mettant à disposition un interpréteur Python ne sont pas si nombreux que ça (et c'est dommage!!!), mais si c'est le cas, c'est possible. Avec Python en CGI, par exemple, on appelle un script Python du serveur, et celui-ci s'exécute, cherche les infos et fabrique une page html à jour, qu'il renvoie au navigateur client. Et côté client, on peut utiliser des astuces comme "brython" (et d'autres) qui permet de fabriquer à la volée et d'exécuter du code javascript à partir d'un code Python...

    J'exclus, bien entendu, un programme purement Python côté client, puisque cela rendrait difficile un simple appel des infos par une machine qui n'aurait pas Python d'installé (ou pas à la bonne version) comme un smartphone ou une tablette (ce qui n'est pas demandé, mais qui me semblerait normal).

    En ce qui me concerne, si j'avais ce problème à résoudre, je le ferais en PHP, ce qui permettrait, par exemple, de conserver facilement un historique des mises à jour dans une base de données mysql sur le serveur. Cela permettrait de sortir une synthèse périodique pour le pilotage.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Tu as fumé la moquette ou quoi?
    Un serveur Web sait juste répondre à des requêtes HTTP et il ne transmet que des séquences de bytes qui pourront avoir différents formats: HTML, JSON, TXT,... C'est le navigateur Web qui lira tout çà pour afficher la page qu'on voit.
    Rien de ce que j'ai écrit n'est contredit par ce que tu dis ici. Je l'ai peut-être mal traduit (à 23h42 c'est excusable) mais ce que j'ai écrit est la réalité. Parce qu'en plus de répondre à des requêtes et renvoyer comme tu dis des octets, le serveur Apache sait aussi appeller l'interpréteur php si un code php est demandé dans la page HTML et récupérer les octets que le code php aura généré pour l'intégrer dans ladite page avant de la renvoyer au client. Or il me semble que c'est ce que demande le PO quand il parle de page web qui récupère le statut de ses sondes et qui affiche des couleurs associées.

    Citation Envoyé par wiztricks Voir le message
    On peut construire des pages HTML à la volée avec Python.
    Ah ça je ne savais pas (enfin mis à part de passer par cgi/bin quoi)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 693
    Par défaut
    Salut,

    Citation Envoyé par Sve@r Voir le message
    le serveur Apache sait aussi appeller l'interpréteur php si un code php est demandé dans la page HTML et récupérer les octets que le code php
    Il ne sait appeler du PHP que si on lui donne une URL qui se termine par .php (ou .jsp ou .psp) et modulo qu'on ait installé le module correspondant qui fait le boulot d'activation de l'interpréteur PHP et qu'on l'ait configuré pour.

    Citation Envoyé par Sve@r Voir le message
    Ah ça je ne savais pas (enfin mis à part de passer par cgi/bin quoi)...
    C'est une techno. que l'on n'a jamais vraiment utilisée avec Python car les applications Web (RubyOnRails, Django,...) apparues en 2004/2005 se basent sur d'autres architectures (pas que pour fabriquer dynamiquement les pages).
    A l'époque, Python n'avait pas le succès qu'il a aujourd'hui sur le Web et faire avec Python ce qu'on savait déjà faire avec PHP ou Java n'avait aucun intérêt.
    C'est RubyOnRails, JavaScript, des machines et un internet plus rapide qui ont secoué tout çà....
    Et offert à Python l'opportunité de proposer quelque chose de "neuf" (avec à l'époque Django, Pyramid,... et depuis des framework bien plus léger comme flask).

    On connecte çà à apache avec un mod_wsgi (et non un mod_python qui fait du CGI). WSGI = Web Server Gateway Interface une spécification très Pythonique.

    Cela étant, pour revenir à la demande initiale, nagios est peut être une piste à explorer (plutôt que d'apprendre à construire tout çà sauf si vous voulez en faire votre métier).


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 41
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est une techno. que l'on n'a jamais vraiment utilisée avec Python
    Hello,
    Personnellement, je n'ai jamais procédé autrement.
    Tellement facile avec la POO, que je n'ai jamais vu l'intérêt des autres méthodes plus populaires(zope à une époque, et maintenant django).
    Par ailleurs, je confirme que le module à utiliser est mod_wsgi (mod_python est à mon avis obsolète)
    Sachant que de toutes façon, javascript est incontournable si l'on veut une page web évoluée.

  9. #9
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    en solution à moindre coût/faite maison/cracra des montagnes on peut se contenter d'avoir un script python qui génère régulièrement (planificateur de tâche, crontab, temporisation etc.) un fichier html... qu'on ouvre dans son navigateur
    il suffit de s'assurer qu'on a dans la page un <meta http-equiv="refresh" content="10"/> et on a un rechargement du fichier toutes les 10s.

    au delà si on veut plus de granularité et/ou d’interactivité, c'est effectivement plutôt du coté de Javascript et des XHR qu'il va falloir regarder

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2011
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 72
    Par défaut
    Merci à vous tous pour cette discussion.
    Pour le coup j'ai procédé comme suit :

    - depuis un script python je me connecte en ssh (librairie paramiko) au serveur, je récupère les infos sur les fichiers (taille, date de création etc) . J'envoie tout ça en meme temps dans un fichier temporaire
    - Puis je fais ma tambouille pour comparer les dates des fichiers avec la date actuelle.
    - puis j'ai fichier php/html qui récupere la difference de date entre la création de mes fichiers et de la date actuelle. Je change la couleur de la case en fonction de mes conditions.
    - C'est actualisé toutes les heures avec un crontab

    C'est un début mais ça donne ça.
    Nom : Capture d’écran 2019-05-12 à 11.22.29.png
Affichages : 158
Taille : 235,4 Ko

    Merci à vous en tout cas

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yonafunu Voir le message
    C'est un début mais ça donne ça.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/10/2011, 18h14
  2. Réponses: 3
    Dernier message: 18/04/2011, 13h43
  3. [WCF/.NET 4] Sauvegarder des données distantes
    Par baptx dans le forum Services Web
    Réponses: 2
    Dernier message: 18/04/2011, 10h04
  4. Réponses: 2
    Dernier message: 20/11/2006, 21h42
  5. Access à des bases de données distantes
    Par creale10 dans le forum Access
    Réponses: 5
    Dernier message: 09/06/2006, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo