repos
/ status-django master

status-django

mirror archived upstream

Self-hostable uptime monitor and status page on Django: HTTP checks, Lighthouse audits, SEO crawls, and email and Discord alerts.

djangodockerhandcodedpythonself-hostedsqlitestatus-pageuptime-monitoringvite

958 B · 48 lines · Python Raw History
 1#!/usr/bin/env python
 2import os
 3import signal
 4import subprocess
 5import sys
 6
 7procs = [
 8    subprocess.Popen(["python", "manage.py", "scheduler"]),
 9    subprocess.Popen(
10        [
11            "gunicorn",
12            "status.asgi:application",
13            "--workers",
14            "1",
15            "--max-requests",
16            "256",
17            "--timeout",
18            "30",
19            "--bind",
20            f":{os.environ['PORT']}",
21            "--worker-class",
22            "uvicorn.workers.UvicornWorker",
23            "--error-logfile",
24            "-",
25            "--access-logfile",
26            "-",
27        ]
28    ),
29]
30
31
32def shutdown(signum, frame):
33    for p in procs:
34        p.terminate()
35
36
37signal.signal(signal.SIGTERM, shutdown)
38signal.signal(signal.SIGINT, shutdown)
39
40pid, status = os.wait()
41for p in procs:
42    if p.pid != pid:
43        p.terminate()
44for p in procs:
45    p.wait()
46
47sys.exit(os.WEXITSTATUS(status) if os.WIFEXITED(status) else 1)