First attempt at SSE backend #3

This commit is contained in:
Ian Renton
2025-12-22 13:02:11 +00:00
parent befaceb2f5
commit fd2986f310
4 changed files with 37 additions and 30 deletions

View File

@@ -3,7 +3,6 @@ from datetime import datetime
import pytz
from core.config import MAX_ALERT_AGE
from spothole import add_alert
# Generic alert provider class. Subclasses of this query the individual APIs for alerts.
@@ -16,10 +15,12 @@ class AlertProvider:
self.last_update_time = datetime.min.replace(tzinfo=pytz.UTC)
self.status = "Not Started" if self.enabled else "Disabled"
self.alerts = None
self.web_server = None
# Set up the provider, e.g. giving it the alert list to work from
def setup(self, alerts):
def setup(self, alerts, web_server):
self.alerts = alerts
self.web_server = web_server
# Start the provider. This should return immediately after spawning threads to access the remote resources
def start(self):
@@ -32,7 +33,14 @@ class AlertProvider:
for alert in alerts:
# Fill in any blanks and add to the list
alert.infer_missing()
add_alert(alert)
self.add_alert(alert)
def add_alert(self, alert):
if not alert.expired():
self.alerts.add(alert.id, alert, expire=MAX_ALERT_AGE)
# Ping the web server in case we have any SSE connections that need to see this immediately
if self.web_server:
self.web_server.notify_new_alert(alert)
# Stop any threads and prepare for application shutdown
def stop(self):