Release 15 - Revamp #38

Merged
ChaoticByte merged 27 commits from devel into main 2023-03-26 11:09:31 +00:00
5 changed files with 71 additions and 11 deletions
Showing only changes of commit be38d1885f - Show all commits

View file

@ -57,7 +57,8 @@ This also runs all necessary migrations.
# Activate venv # Activate venv
**On every new session**, before running commands with **On every new session**, before running commands with
manage.py or developing, you have to activate the venv: manage.py, running special scripts, or developing,
you have to activate the virtual environment:
``` ```
source ./venv/bin/activate source ./venv/bin/activate
``` ```

View file

@ -1,4 +1,4 @@
#!/usr/bin/env python #!./venv/bin/python3
"""Django's command-line utility for administrative tasks.""" """Django's command-line utility for administrative tasks."""
import os import os
import sys import sys

View file

@ -131,13 +131,15 @@ if __name__ == "__main__":
"Caddy Webserver", "Caddy Webserver",
["caddy", "run", "--config", str(caddyfile)], ["caddy", "run", "--config", str(caddyfile)],
None, None,
environment=environment_caddy environment=environment_caddy),
),
MonitoredSubprocess( MonitoredSubprocess(
"Django Development Server", "Django Development Server",
["./venv/bin/python3", "./manage.py", "runserver", str(config["app"]["application_port"])], ["./venv/bin/python3", "./manage.py", "runserver", str(config["app"]["application_port"])],
None None),
), MonitoredSubprocess(
"Session Autocleaner",
["./scripts/_session-autocleaner.py", str(config["app"]["session_clear_interval"])],
None)
] ]
start_and_monitor(procs) start_and_monitor(procs)
else: else:
@ -151,8 +153,7 @@ if __name__ == "__main__":
"Caddy Webserver", "Caddy Webserver",
["caddy", "run", "--config", str(caddyfile)], ["caddy", "run", "--config", str(caddyfile)],
logfile_caddy, logfile_caddy,
environment=environment_caddy environment=environment_caddy),
),
MonitoredSubprocess( MonitoredSubprocess(
"Drinks-Manager", "Drinks-Manager",
[ [
@ -166,7 +167,10 @@ if __name__ == "__main__":
"project.asgi:application", "project.asgi:application",
], ],
logfile_app, logfile_app,
environment=environment_app environment=environment_app),
), MonitoredSubprocess(
"Session Autocleaner",
["./scripts/_session-autocleaner.py", str(config["app"]["session_clear_interval"])],
logfile_app)
] ]
start_and_monitor(procs) start_and_monitor(procs)

55
scripts/_session-autocleaner.py Executable file
View file

@ -0,0 +1,55 @@
#!./venv/bin/python3
# This script clears expired sessions in a regular interval
import os
from argparse import ArgumentParser
from atexit import register as register_exithandler
from pathlib import Path
from subprocess import Popen
from time import sleep
from datetime import datetime
current_proc = None
def exithandler():
if current_proc is not None:
seconds_waited = 0
while current_proc.poll() is None:
# wait for 10 seconds to quit session cleaner
if seconds_waited >= 10:
current_proc.terminate()
break
# is still running
sleep(1)
seconds_waited += 1
print("Stopped session-autocleaner.")
if __name__ == "__main__":
try:
argp = ArgumentParser()
argp.add_argument("interval", help="The interval in minutes", type=int)
args = argp.parse_args()
os.chdir(str(Path(__file__).parent.parent))
print(f"Started session-autocleaner with an interval of {args.interval} minute(s)")
interval = args.interval * 60
# register exithandler that cleans up stuff
register_exithandler(exithandler)
# main loop
while True:
if current_proc is not None:
# wait for last iteration
while current_proc.poll() is None:
# is still running
print("Last cleanup is still running, waiting before clearing sessions...")
sleep(1)
print(f"Clearing expired sessions at {datetime.now()}...")
current_proc = Popen(
["./manage.py", "clearsessions"])
sleep(interval)
except KeyboardInterrupt:
exit()

View file

@ -8,4 +8,4 @@ export PYTHONPATH="$basedir"
export DJANGO_SETTINGS_MODULE="project.settings" export DJANGO_SETTINGS_MODULE="project.settings"
export APP_VERSION="revamp-pre" export APP_VERSION="revamp-pre"
exec ./scripts/bootstrap.py "$@" exec ./scripts/_bootstrap.py "$@"