Bring back cleanup thread

This commit is contained in:
Ian Renton
2026-08-13 07:07:15 +01:00
parent 6a4b0bed95
commit bab14bd7ac
13 changed files with 113 additions and 16 deletions
+71
View File
@@ -0,0 +1,71 @@
import logging
from datetime import datetime
from threading import Event, Thread
import pytz
from core.data_store import DATA_STORE
class CleanupTimer:
"""Provides a timed cleanup of the spot list."""
def __init__(self):
"""Constructor"""
self._cleanup_interval = None
self.last_cleanup_time = datetime.min.replace(tzinfo=pytz.UTC)
self.status = "Starting"
self._thread = None
self._stop_event = Event()
def setup(self, cleanup_interval):
self._cleanup_interval = cleanup_interval
def start(self):
"""Start the cleanup timer"""
self._thread = Thread(target=self._run, daemon=True)
self._thread.start()
def stop(self):
"""Stop any threads and prepare for application shutdown"""
self._stop_event.set()
def _run(self):
while not self._stop_event.wait(timeout=self._cleanup_interval):
self._cleanup()
def _cleanup(self):
"""Perform cleanup and reschedule next timer"""
try:
for i in list(DATA_STORE.spots.iterkeys()):
try:
spot = DATA_STORE.spots[i]
if spot.expired():
DATA_STORE.spots.delete(i)
except KeyError:
# Must have already been deleted, OK with that
pass
for i in list(DATA_STORE.alerts.iterkeys()):
try:
alert = DATA_STORE.alerts[i]
if alert.expired():
DATA_STORE.alerts.delete(i)
except KeyError:
# Must have already been deleted, OK with that
pass
self.status = "OK"
self.last_cleanup_time = datetime.now(pytz.UTC)
except Exception:
self.status = "Error"
logging.exception("Exception in Cleanup thread")
self._stop_event.wait(timeout=1)
# Global object
CLEANUP_TIMER = CleanupTimer()
+4
View File
@@ -5,6 +5,7 @@ from threading import Thread, Event
import psutil
import pytz
from core.cleanup import CLEANUP_TIMER
from core.config import SERVER_OWNER_CALLSIGN
from core.constants import SOFTWARE_VERSION
from core.data_providers import DATA_PROVIDERS
@@ -88,6 +89,9 @@ class StatusReporter:
tzinfo=pytz.UTC).timestamp() if p.last_update_time.year > 2000 else 0,
"lookup_count": p.lookup_count},
DATA_PROVIDERS.callsign_data_providers))
DATA_STORE.status_data["cleanup"] = {"status": CLEANUP_TIMER.status,
"last_ran": CLEANUP_TIMER.last_cleanup_time.replace(
tzinfo=pytz.UTC).timestamp() if CLEANUP_TIMER.last_cleanup_time else 0}
DATA_STORE.status_data["webserver"] = {"status": WEB_SERVER.web_server_metrics["status"],
"last_api_access": WEB_SERVER.web_server_metrics[
"last_api_access_time"].replace(