#!/usr/bin/env python3 """ Playground demo service — stdlib HTTP status page on port 9090. Registered behind doot's auth layer at /playground/. Start: python3 playground/web/server.py """ import http.server import json import os import platform import socket import time from datetime import datetime, timezone START_TIME = time.monotonic() PORT = int(os.environ.get("PLAYGROUND_PORT", "9090")) STATUS_HTML = """\ Playground — System Status

Playground

doot service gateway demo — authenticated via doot session

statusok
hostname{hostname}
python{python}
platform{platform}
uptime{uptime}
server time{now}
pid{pid}
port{port}
""" def _uptime() -> str: elapsed = int(time.monotonic() - START_TIME) h, rem = divmod(elapsed, 3600) m, s = divmod(rem, 60) return f"{h}h {m}m {s}s" class Handler(http.server.BaseHTTPRequestHandler): def log_message(self, fmt, *args): # quieter logs print(f"{self.address_string()} {fmt % args}") def do_GET(self): if self.path in ("/health", "/health/"): body = json.dumps({"status": "ok", "uptime": _uptime()}).encode() self._respond(200, "application/json", body) return html = STATUS_HTML.format( hostname=socket.gethostname(), python=platform.python_version(), platform=platform.system() + " " + platform.release(), uptime=_uptime(), now=datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S UTC"), pid=os.getpid(), port=PORT, ).encode() self._respond(200, "text/html; charset=utf-8", html) def _respond(self, code, content_type, body): self.send_response(code) self.send_header("Content-Type", content_type) self.send_header("Content-Length", str(len(body))) self.end_headers() self.wfile.write(body) if __name__ == "__main__": server = http.server.HTTPServer(("127.0.0.1", PORT), Handler) print(f"playground listening on http://127.0.0.1:{PORT} (pid {os.getpid()})") server.serve_forever()