Add some more shutdown checks for websocket handlers

This commit is contained in:
Antti Kettunen 2026-04-12 18:30:11 +03:00
parent 29d964e8b0
commit 7f5384a89e

View file

@ -22830,7 +22830,7 @@ def _simple_monitor_task():
Search cleanup and download cleanup are now handled by system automations.""" Search cleanup and download cleanup are now handled by system automations."""
print("Simple background monitor started") print("Simple background monitor started")
while True: while not globals().get('IS_SHUTTING_DOWN', False):
try: try:
with matched_context_lock: with matched_context_lock:
pending_count = len(matched_downloads_context) pending_count = len(matched_downloads_context)
@ -22857,6 +22857,8 @@ def _simple_monitor_task():
print(f"Simple monitor error: {e}") print(f"Simple monitor error: {e}")
time.sleep(10) time.sleep(10)
print("Simple background monitor stopped")
def start_simple_background_monitor(): def start_simple_background_monitor():
"""Starts the simple background monitor thread.""" """Starts the simple background monitor thread."""
monitor_thread = threading.Thread(target=_simple_monitor_task) monitor_thread = threading.Thread(target=_simple_monitor_task)
@ -52130,7 +52132,7 @@ def _hydrabase_reconnect_loop():
global _hydrabase_ws global _hydrabase_ws
_consecutive_failures = 0 _consecutive_failures = 0
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(30) socketio.sleep(30)
try: try:
# Only attempt reconnect if auto_connect is enabled # Only attempt reconnect if auto_connect is enabled
@ -52180,7 +52182,7 @@ def _hydrabase_reconnect_loop():
def _emit_service_status_loop(): def _emit_service_status_loop():
"""Background thread that pushes service status every 5 seconds.""" """Background thread that pushes service status every 5 seconds."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(5) socketio.sleep(5)
try: try:
socketio.emit('status:update', _build_status_payload()) socketio.emit('status:update', _build_status_payload())
@ -52189,7 +52191,7 @@ def _emit_service_status_loop():
def _emit_watchlist_count_loop(): def _emit_watchlist_count_loop():
"""Background thread that pushes watchlist count every 10 seconds to each profile room.""" """Background thread that pushes watchlist count every 10 seconds to each profile room."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(10) socketio.sleep(10)
try: try:
database = get_database() database = get_database()
@ -52202,7 +52204,7 @@ def _emit_watchlist_count_loop():
def _emit_download_status_loop(): def _emit_download_status_loop():
"""Background thread that pushes download batch status every 2 seconds to subscribed rooms.""" """Background thread that pushes download batch status every 2 seconds to subscribed rooms."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(2) socketio.sleep(2)
try: try:
live_transfers_lookup = get_cached_transfer_data() live_transfers_lookup = get_cached_transfer_data()
@ -52263,7 +52265,7 @@ def handle_profile_join(data):
def _emit_system_stats_loop(): def _emit_system_stats_loop():
"""Background thread that pushes system stats every 10 seconds.""" """Background thread that pushes system stats every 10 seconds."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(10) socketio.sleep(10)
try: try:
socketio.emit('dashboard:stats', _build_system_stats()) socketio.emit('dashboard:stats', _build_system_stats())
@ -52272,7 +52274,7 @@ def _emit_system_stats_loop():
def _emit_activity_feed_loop(): def _emit_activity_feed_loop():
"""Background thread that pushes activity feed every 2 seconds.""" """Background thread that pushes activity feed every 2 seconds."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(2) socketio.sleep(2)
try: try:
with activity_feed_lock: with activity_feed_lock:
@ -52283,7 +52285,7 @@ def _emit_activity_feed_loop():
def _emit_db_stats_loop(): def _emit_db_stats_loop():
"""Background thread that pushes database stats every 10 seconds.""" """Background thread that pushes database stats every 10 seconds."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(10) socketio.sleep(10)
try: try:
db = get_database() db = get_database()
@ -52294,7 +52296,7 @@ def _emit_db_stats_loop():
def _emit_wishlist_count_loop(): def _emit_wishlist_count_loop():
"""Background thread that pushes wishlist count every 10 seconds to each profile room.""" """Background thread that pushes wishlist count every 10 seconds to each profile room."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(10) socketio.sleep(10)
try: try:
from core.wishlist_service import get_wishlist_service from core.wishlist_service import get_wishlist_service
@ -52340,7 +52342,7 @@ def _emit_rate_monitor_loop():
'tidal': 'tidal_enrichment', 'qobuz': 'qobuz_enrichment', 'tidal': 'tidal_enrichment', 'qobuz': 'qobuz_enrichment',
} }
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(1) socketio.sleep(1)
try: try:
from core.api_call_tracker import api_call_tracker from core.api_call_tracker import api_call_tracker
@ -52410,7 +52412,7 @@ def _emit_enrichment_status_loop():
'genius-enrichment': lambda: genius_worker, 'genius-enrichment': lambda: genius_worker,
} }
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(2) socketio.sleep(2)
# Auto-pause/resume rate-limited workers during downloads # Auto-pause/resume rate-limited workers during downloads
@ -52448,7 +52450,7 @@ def _emit_enrichment_status_loop():
def _emit_tool_progress_loop(): def _emit_tool_progress_loop():
"""Background thread that pushes all tool progress statuses every 1 second.""" """Background thread that pushes all tool progress statuses every 1 second."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(1) socketio.sleep(1)
# Stream status # Stream status
try: try:
@ -52536,7 +52538,7 @@ def handle_discovery_unsubscribe(data):
def _emit_sync_progress_loop(): def _emit_sync_progress_loop():
"""Push sync progress to subscribed rooms every 1 second.""" """Push sync progress to subscribed rooms every 1 second."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(1) socketio.sleep(1)
try: try:
with sync_lock: with sync_lock:
@ -52560,7 +52562,7 @@ def _emit_discovery_progress_loop():
'listenbrainz': lambda: listenbrainz_playlist_states, 'listenbrainz': lambda: listenbrainz_playlist_states,
'spotify_public': lambda: spotify_public_discovery_states, 'spotify_public': lambda: spotify_public_discovery_states,
} }
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(1) socketio.sleep(1)
for platform, get_states in platform_states.items(): for platform, get_states in platform_states.items():
try: try:
@ -52590,7 +52592,7 @@ def _emit_discovery_progress_loop():
def _emit_scan_status_loop(): def _emit_scan_status_loop():
"""Push watchlist and media scan status every 2 seconds.""" """Push watchlist and media scan status every 2 seconds."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(2) socketio.sleep(2)
# Watchlist scan # Watchlist scan
try: try:
@ -52622,7 +52624,7 @@ def _emit_scan_status_loop():
def _emit_automation_progress_loop(): def _emit_automation_progress_loop():
"""Push automation:progress events every 1 second for running automations.""" """Push automation:progress events every 1 second for running automations."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(1) socketio.sleep(1)
try: try:
with automation_progress_lock: with automation_progress_lock:
@ -52666,7 +52668,7 @@ def _emit_automation_progress_loop():
def _emit_repair_progress_loop(): def _emit_repair_progress_loop():
"""Push repair:progress events every 1 second for running repair jobs.""" """Push repair:progress events every 1 second for running repair jobs."""
while True: while not globals().get('IS_SHUTTING_DOWN', False):
socketio.sleep(1) socketio.sleep(1)
try: try:
if repair_worker is None: if repair_worker is None: