Web Top – Displaying top with Python 3 Web Server and Carleslibs
So this is a super simple example on how quickly you can create nice solutions with my package carleslibs.
In this example I use Python 3 incorporated Web Server and carleslibs, to execute top and display in the browser.
Requisites:
Having Python3 and have installed carleslibs 1.0.1 or superior.
pip3 install carleslibs
Having this running in a Linux with top installed. All of them come with top, as long as I know.
This is the 84 lines code for WebTop:
from http.server import BaseHTTPRequestHandler, HTTPServer from carleslibs.subprocessutils import SubProcessUtils from carleslibs.datetimeutils import DateTimeUtils class Top(): def __init__(self, o_subprocess): self.o_subprocess = o_subprocess def get_top(self): a_domains_offline = [] s_command = "/usr/bin/top -n 1 -b" i_code, s_stdout, s_stderr = self.o_subprocess.execute_command_for_output(s_command, b_shell=True, b_convert_to_ascii=True) return i_code, s_stdout, s_stderr class WebServer(BaseHTTPRequestHandler): def do_GET(self): o_subprocess = SubProcessUtils() self.o_top = Top(o_subprocess) self.o_datetime = DateTimeUtils() self.i_max_domains_offline = 0 self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() WebTop.log(self.path) if self.path == "/favicon.ico": return s_html = "<html><body>" s_html = s_html + "<h1>Web Top</h1>" s_html = s_html + '<small>by Carles Mateo - <a href="https://blog.carlesmateo.com">blog.carlesmateo.com</a></small>' i_code, s_stdout, s_stderr = self.o_top.get_top() if i_code != 0: s_html = s_html + "Error Code: " + str(i_code) + "</br>" s_html = s_html + "Message: " + s_stderr + "</br>" else: s_html = s_html + "<pre>" s_html = s_html + s_stdout s_html = s_html + "</pre>" s_html = s_html + "</body>" s_html = s_html + "</html>" by_html = bytes(s_html, encoding="utf-8") self.wfile.write(by_html) class WebTop(): o_datetime = DateTimeUtils() @staticmethod def log(s_text): s_datetime = WebTop.o_datetime.get_datetime() print(s_datetime, s_text) if __name__ == "__main__": o_webserver = HTTPServer(("localhost", 80), WebServer) WebTop.log("Server started") try: o_webserver.serve_forever() except KeyboardInterrupt: pass o_webserver.server_close() WebTop.log("Server stopped")
Just run the code and go to localhost with your favorite browser.
If you get an error like this it means that another process is listening on port 80. Just use another like 8080, 8181, etc…
Traceback (most recent call last): File "/home/carles/Desktop/code/carles/json-realm-live/web_top.py", line 74, in <module> o_webserver = HTTPServer(("localhost", 80), WebServer) File "/usr/lib/python3.8/socketserver.py", line 452, in __init__ self.server_bind() File "/usr/lib/python3.8/http/server.py", line 138, in server_bind socketserver.TCPServer.server_bind(self) File "/usr/lib/python3.8/socketserver.py", line 466, in server_bind self.socket.bind(self.server_address) PermissionError: [Errno 13] Permission denied
And you will see the requests coming:
2021-10-09 10:47:46 Server started 127.0.0.1 - - [13/Oct/2021 10:47:48] "GET / HTTP/1.1" 200 - 2021-10-09 10:47:48 / 127.0.0.1 - - [13/Oct/2021 11:25:24] "GET / HTTP/1.1" 200 - 2021-10-09 11:25:24 /
So instead of using top, you can use ctop.py :)
Just replace the command by:
s_command = "ctop.py -b -n=1 --rows=30 --columns=200"
You can also create a Dockerfile very easily and run this in a Container.
Rules for writing a Comment