Self-hostable uptime monitor and status page on Django: HTTP checks, Lighthouse audits, SEO crawls, and email and Discord alerts.
djangodockerhandcodedpythonself-hostedsqlitestatus-pageuptime-monitoringvite
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)