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.
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.
Cliquez sur la commande pour voir le résultat sur le navigateur.
# coding: UTF-8
import BaseHTTPServer, shutil, os
from cStringIO import StringIO
class MyHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
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
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.
if f:
f = StringIO()
machine = os.popen("hostname").readlines()[0]
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):
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