#!/usr/bin/env python3 import asyncio import os import sys import socket import subprocess from pathlib import Path from textwrap import dedent # ===================================================================== # SYSTEMD TEMPLATE GENERATION FUNCTIONS (Modern Python Strings) # ===================================================================== SERVICE_UNIT = """ [Unit] Description=Resilient Async Python Service (FD-Store) Requires={socket_name} After=network.target [Service] Type=simple ExecStart={exec_path} Environment=PYTHONUNBUFFERED=1 # FD-Store and Recovery configurations FileDescriptorStoreMax=100 Restart=on-failure RestartSec=0.1s [Install] WantedBy=default.target """ SOCKET_UNIT = """[Unit] Description=Resilient Async Python Service Socket [Socket] # Listens on localhost port {port} by default (ideal for user units) ListenStream={port} [Install] WantedBy=sockets.target """ def create_service_unit(socket_name: str, exec_path: str) -> str: """Generates the systemd service configuration using modern multi-line formatting.""" return SERVICE_UNIT.format(socket_name=socket_name, exec_path=exec_path) def create_socket_unit(port: int = 8080) -> str: """Generates the systemd socket configuration.""" return SOCKET_UNIT.format(port=port) # ===================================================================== # SYSTEMD COMMAND HELPER # ===================================================================== def run_systemctl_user(args: list) -> bool: """Helper function to safely run systemctl commands in user space.""" try: cmd = ["systemctl", "--user"] + args print(f"Running: {' '.join(cmd)}") subprocess.run(cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) return True except subprocess.CalledProcessError as e: print( f"[ERROR] systemctl command failed: {e.stderr.decode().strip()}", file=sys.stderr, ) return False def resilient_accept(conn): send_fd_to_systemd(conn.fileno()) # ===================================================================== # INSTALLATION & DEINSTALLATION LOGIC # ===================================================================== def install_systemd_user_units(): """Automatically installs, enables, and starts the systemd user units.""" # human note: # Automatic installs are not good, if everything emerges from a single file. # The user doesn't know from where the file came and where it was installed. # print("Initializing systemd user unit installation...") # 1. Resolve structural paths script_path = Path(__file__).resolve() home_dir = Path.home() # Standard systemd user configuration directory systemd_user_dir = home_dir / ".config" / "systemd" / "user" service_file = systemd_user_dir / "async-resilient.service" socket_file = systemd_user_dir / "async-resilient.socket" # 2. Ensure the configuration directories exist systemd_user_dir.mkdir(parents=True, exist_ok=True) # 3. Generate unit contents via template functions service_content = create_service_unit( socket_name="async-resilient.socket", exec_path=str(script_path) ) socket_content = create_socket_unit(port=8080) # 4. Write unit configurations to disk try: service_file.write_text(service_content, encoding="utf-8") socket_file.write_text(socket_content, encoding="utf-8") # Ensure the script itself remains executable # holy shit, the ai know octal notation!!! script_path.chmod(script_path.stat().st_mode | 0o755) print(f"[SUCCESS] Configurations written successfully.") # 5. Execute systemd lifecycle commands automatically print("\nExecuting systemd lifecycle commands...") if run_systemctl_user(["daemon-reload"]): if run_systemctl_user(["enable", "async-resilient.socket"]): if run_systemctl_user(["start", "async-resilient.socket"]): print("\n[SUCCESS] Server socket is up and running via systemd!") print("You can now connect to port 8080.") except Exception as e: print(f"[ERROR] Failed during systemd initialization: {e}", file=sys.stderr) sys.exit(1) def stop_and_disable_units(): """Stops and disables the running systemd socket and service units.""" print("Stopping and disabling systemd user units...") # Stop the units first so connections drop cleanly run_systemctl_user(["stop", "async-resilient.service"]) run_systemctl_user(["stop", "async-resilient.socket"]) # Disable them so they don't boot next time systemd starts run_systemctl_user(["disable", "async-resilient.socket"]) run_systemctl_user(["disable", "async-resilient.service"]) # Reload daemon to clear out the state run_systemctl_user(["daemon-reload"]) print("[SUCCESS] Units have been successfully stopped and disabled.") # ===================================================================== # CORE NETWORK DAEMON LOGIC # ===================================================================== def send_fd_to_systemd(fd: int): """Sends an active client File Descriptor to the systemd FD-Store.""" notify_socket_path = os.environ.get("NOTIFY_SOCKET") if not notify_socket_path: return if notify_socket_path.startswith("@"): notify_socket_path = "\x00" + notify_socket_path[1:] try: with socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) as sock: sock.connect(notify_socket_path) sock.sendmsg( [b"FDSTORE=1\n"], [ ( socket.SOL_SOCKET, socket.SCM_RIGHTS, int.to_bytes(fd, 4, sys.byteorder), ) ], ) except Exception as e: print(f"FD-Store Sync Error: {e}", file=sys.stderr) async def handle_client( reader: asyncio.StreamReader, writer: asyncio.StreamWriter, is_recovered=False ): """Asynchronously processes ongoing network clients.""" try: addr = writer.get_extra_info("peername") print(f"Processing client from {addr} (Recovered: {is_recovered})") if is_recovered: writer.write( b"Your server crashed, but asyncio recovered your connection flawlessly!\n" ) await writer.drain() else: resilient_accept(writer.get_extra_info("socket")) writer.write(b"Processing request... please wait 10 seconds.\n") await writer.drain() await asyncio.sleep(10) writer.write(b"Processing finished successfully.\n") await writer.drain() except Exception as e: print(f"Error handling client: {e}", file=sys.stderr) finally: writer.close() await writer.wait_closed() async def run_server(): """Main daemon loop hooked into the systemd socket lifecycle.""" listen_fds = os.environ.get("LISTEN_FDS") if not listen_fds: print( "Error: No systemd sockets passed down. Run 'init' or launch via systemd.socket.", file=sys.stderr, ) sys.exit(1) num_fds = int(listen_fds) print(f"Received {num_fds} total File Descriptors from systemd.") # Main Listening Socket is always FD 3 SYSTEMD_FIRST_FD = 3 server_sock = socket.fromfd(SYSTEMD_FIRST_FD, socket.AF_INET, socket.SOCK_STREAM) server = await asyncio.start_server( lambda r, w: asyncio.create_task(handle_client(r, w, is_recovered=False)), sock=server_sock, ) print("Async Server successfully bound and accepting connections...") # Rehydrate any existing client connections (FD 4+) rescued from a previous crash if num_fds > 1: print(f"Resurrecting {num_fds - 1} surviving client connections...") for fd_num in range(4, 3 + num_fds): try: recovered_sock = socket.fromfd( fd_num, socket.AF_INET, socket.SOCK_STREAM ) reader, writer = await asyncio.open_connection(sock=recovered_sock) asyncio.create_task(handle_client(reader, writer, is_recovered=True)) except Exception as e: print( f"Failed to recover existing connection on FD {fd_num}: {e}", file=sys.stderr, ) async with server: await server.serve_forever() # ===================================================================== # APPLICATION ENTRYPOINT # ===================================================================== if __name__ == "__main__": if len(sys.argv) > 1: action = sys.argv[1].lower() if action == "init": install_systemd_user_units() elif action == "stop": stop_and_disable_units() else: print( f"Unknown argument: '{sys.argv[1]}'. Use 'init' or 'stop'.", file=sys.stderr, ) else: try: asyncio.run(run_server()) except KeyboardInterrupt: print("\nServer shutting down gracefully.")