[LINUX] Script Python qui peut vérifier l'état du serveur à partir du navigateur

La description

Surveillez l'état du serveur à partir du navigateur. Je l'ai fait avec une petite amélioration, en me référant au livre d'introduction à Python. Ce n'est pas un gros problème, mais je l'ai tellement fait que je vais le garder.

écran

Lorsqu'il est exécuté sur le serveur, il écoute sur le port 8000. Un menu s'affiche lorsqu'il est ouvert dans un navigateur.

無題.png

Cliquez sur la commande pour voir le résultat sur le navigateur.

無題2.png

Code source

# coding: UTF-8

import BaseHTTPServer, shutil, os
from cStringIO import StringIO

class  MyHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):

Chemin HTTP et commande en ligne de commande du service fourni

    cmds = { '/free': 'free',
            '/cpuinfo' : 'cat /proc/cpuinfo',
            '/netstat' : 'netstat -anp',
            '/netstat-nlt' : 'netstat -nlt',
            '/uptime' : 'uptime',
            '/vmstat' : 'vmstat',
            '/df' : 'df -h',
            '/sar' : 'sar',
            '/hostname' : 'hostname',
            '/date' : 'date',
            '/ps' : 'ps aux',
            '/iostat' : 'iostat',
            '/pstree' : 'pstree',
            '/ifconfig' : 'ifconfig',
            '/who' : 'who'}

    def do_GET(self):

#Service to GET demande

Appelez la méthode head pour spécifier la réponse et le type de contenu.

        f = self.send_head()

#Si l'objet fichier est renvoyé, la vérification de la réponse réussit et 200 est OK, alors créez le corps.

Cette fois, c'est GET, donc n'utilisez pas f ci-dessus et écrasez-le comme suit.

        if f:
            f = StringIO()

Obtenez le nom de la machine

            machine = os.popen("hostname").readlines()[0]

/ Ensuite, créez simplement un index et retournez

            if self.path == "/":
                heading = "Select a command to run on %s" % (machine)
                body = self.getMenu()

Si la commande # est spécifiée, la commande est effectivement exécutée et renvoyée. else: heading = "Execution of ``%s'' on %s" % ( self.cmds[self.path], machine ) cmd = self.cmds[self.path] body = 'Main Menu

%s
\n' % os.popen(cmd).read()

            f.write("<html><head><title>%s</title></head>\n" % (heading) )
            f.write("<body><h1>%s</h1>\n" % (heading))
            f.write(body)
            f.write("</body></html>\n")
            f.seek(0)
            self.copyfile(f, self.wfile)
            f.close()
        return f

    def do_HEAD(self):

HEAD Demande de service

        f = self.send_head()
        if f:
            f.close()

    def send_head(self):
        path = self.path
        if not path in ["/"] + self.cmds.keys():
            head = 'Command "%s" not found. Try one of these:<ul>' % path
            msg = head + self.getMenu()
            self.send_error(404, msg)
            return None
        self.send_response(200)
        self.send_header("Content-type", "text/html; charset=UTF-8")
        self.end_headers()
        f = StringIO()
        f.write("A test %s\n" % self.path)
        f.seek(0)
        return f

    def getMenu(self):
        keys = self.cmds.keys()
        keys.sort()
        msg = []
        for k in keys:
            msg.append('<li><a href="%s">%s => %s</a></li>' % (k,k, self.cmds[k]))

        msg.append("</ul>")
        return "\n".join(msg)

    def copyfile(self, source, outputfile):
        shutil.copyfileobj(source, outputfile)

def main(HandlerClass = MyHTTPRequestHandler, ServerClass = BaseHTTPServer.HTTPServer):
    BaseHTTPServer.test(HandlerClass, ServerClass)

if __name__ == '__main__':
    main()

Recommended Posts

Script Python qui peut vérifier l'état du serveur à partir du navigateur
Script Python qui compare le contenu de deux répertoires
Feuille de route d'apprentissage qui vous permet de développer et de publier des services à partir de zéro avec Python
Script Python qui va de la recherche Google à l'enregistrement de la page de résultats de recherche à la fois
Comment vérifier la taille de la mémoire d'une variable en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Un script qui renvoie 0, 1 attaché au premier Python prime
[python] Une note que j'ai commencé à comprendre le comportement de matplotlib.pyplot
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
[Python] Un programme qui calcule le nombre de chaussettes jumelées
Notez que l'environnement Python de Pineapple peut être modifié avec pyenv
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
D'un livre qui apprend de manière intéressante la façon de penser du programmeur (Python)
Configurer un serveur SMTP factice avec Python et vérifier le fonctionnement de l'envoi depuis Action Mailer
Introduction de "scikit-mobility", une bibliothèque qui vous permet d'analyser facilement les données de flux humain avec Python (Partie 1)
Envoyer un message de Slack à un serveur Python
Comment ouvrir un navigateur Web à partir de python
"Kit Python" qui appelle des scripts Python depuis Swift
Vérifiez l'état des données à l'aide de pandas_profiling
Créez un plugin qui vous permet de rechercher les onglets Sublime Text 3 en Python
Script Python pour obtenir une liste d'exemples d'entrée pour le concours AtCoder
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
J'ai créé un script pour vérifier si l'anglais est entré dans la position spécifiée du fichier JSON en Python.
Un moyen simple de vérifier la source des modules Python
L'histoire du lancement d'un serveur Minecraft depuis Discord
Le mur lors du passage du service Django de Python 2.7 à la série Python 3
[Python] Un programme qui compte le nombre de vallées
Modèle de script python pour lire le contenu du fichier
Récupérer le code retour d'un script Python depuis bat
[Python] Un programme qui compare les positions des kangourous.
Note Python: Le mystère de l'attribution d'une variable à une variable
Script Python qui explore le flux RSS du statut Azure et le publie sur Hipchat
Créez un script python pour vérifier si le lien à l'URL spécifiée est valide
[Introduction à Python] Utilisation basique de la bibliothèque scipy que vous devez absolument connaître
Un script qui peut effectuer des tests de résistance en fonction du nombre de cœurs CPU
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Comment trouver le premier élément qui correspond aux critères de la liste Python
Présentation du livre "Créer une IA rentable avec Python" qui vous permet d'apprendre l'apprentissage automatique dans le cours le plus court
Commande de raccourci Jedi-vim qui vous permet de faire référence à la source de la définition et à la destination de la définition en Python
Une bibliothèque qui surveille la vie et la mort d'autres machines en envoyant un ping à partir de Python
Comment démarrer un serveur WEB simple qui peut exécuter des cgi de php et python
Un script Python qui enregistre une image de presse-papiers (GTK) dans un fichier.
Comment exécuter un programme Python à partir d'un script shell
Différent du type d'importation de python. Signification de depuis A import B
Lancez un serveur WEB simple qui peut vérifier l'en-tête
Vérifiez l'état de la mémoire du serveur avec la commande gratuite Linux
Je veux démarrer beaucoup de processus à partir de python
Création d'un script Python prenant en charge l'API e-Stat (ver.2)
[OCI] Script Python pour obtenir l'adresse IP d'une instance de calcul dans Cloud Shell
J'ai fait une fonction pour vérifier le modèle de DCGAN
Vérifiez l'état de fonctionnement du serveur avec la commande Linux top
[Python] Programmation pour trouver le nombre de a dans une chaîne de caractères qui se répète un nombre spécifié de fois.
Comment compter rapidement la fréquence d'apparition des caractères à partir d'une chaîne de caractères en Python?
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
Procédure de la construction de l'environnement au test de fonctionnement de testinfra, un outil de test d'environnement de serveur réalisé par Python
Créer un environnement Python et transférer des données vers le serveur
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10