Reordered OwncastSentry plugin methods.
CI / Formatting (push) Successful in 8s
CI / Linting (push) Successful in 9s
CI / Tests (push) Successful in 38s
CI / Type Checking (push) Successful in 9s
CI / Spelling (push) Successful in 11s

This commit is contained in:
2026-05-18 11:15:11 -04:00
parent 795184cd17
commit d905740755
+25 -25
View File
@@ -115,27 +115,9 @@ class OwncastSentry(Plugin):
# Schedule stream state updates at the top of each wall-clock minute. # Schedule stream state updates at the top of each wall-clock minute.
self.sched.run_later(0, self._run_stream_updates_every_minute()) self.sched.run_later(0, self._run_stream_updates_every_minute())
async def _run_stream_updates_every_minute(self) -> None: async def stop(self) -> None:
"""Run stream state updates at the top of each wall-clock minute.""" """Clean up resources by closing the HTTP session."""
while True: await self.owncast_client.close()
current_time = datetime.now(UTC)
delay = 60 - current_time.second - (current_time.microsecond / 1_000_000)
await asyncio.sleep(delay)
await self._update_all_stream_states()
async def _update_all_stream_states(self) -> None:
"""Update all stream states."""
try:
# Get list of all stream domains with active subscriptions
subscribed_domains = (
await self.subscription_repo.get_all_subscribed_domains()
)
# Delegate to stream monitor
await self.stream_monitor.update_all_streams(subscribed_domains)
except Exception:
self.metrics_service.record_error(ErrorSource.SCHEDULER_LOOP)
self.log.exception("Unhandled exception in scheduler loop.")
@command.new(help="Subscribes to a new Owncast stream.") @command.new(help="Subscribes to a new Owncast stream.")
@command.argument("url") @command.argument("url")
@@ -179,6 +161,28 @@ class OwncastSentry(Plugin):
self.log.exception("Unhandled exception in live command.") self.log.exception("Unhandled exception in live command.")
await evt.reply("An unexpected error occurred. Please try again later.") await evt.reply("An unexpected error occurred. Please try again later.")
async def _run_stream_updates_every_minute(self) -> None:
"""Run stream state updates at the top of each wall-clock minute."""
while True:
current_time = datetime.now(UTC)
delay = 60 - current_time.second - (current_time.microsecond / 1_000_000)
await asyncio.sleep(delay)
await self._update_all_stream_states()
async def _update_all_stream_states(self) -> None:
"""Update all stream states."""
try:
# Get list of all stream domains with active subscriptions
subscribed_domains = (
await self.subscription_repo.get_all_subscribed_domains()
)
# Delegate to stream monitor
await self.stream_monitor.update_all_streams(subscribed_domains)
except Exception:
self.metrics_service.record_error(ErrorSource.SCHEDULER_LOOP)
self.log.exception("Unhandled exception in scheduler loop.")
async def _metrics_endpoint(self, request: web.Request) -> web.Response: async def _metrics_endpoint(self, request: web.Request) -> web.Response:
"""Serve Prometheus metrics.""" """Serve Prometheus metrics."""
accept = request.headers.get("Accept", "") accept = request.headers.get("Accept", "")
@@ -187,7 +191,3 @@ class OwncastSentry(Plugin):
response = web.Response(body=output) response = web.Response(body=output)
response.headers["Content-Type"] = content_type response.headers["Content-Type"] = content_type
return response return response
async def stop(self) -> None:
"""Clean up resources by closing the HTTP session."""
await self.owncast_client.close()