fix: Configure aiodocker client with long timeout for log stream

Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
2026-02-07 14:16:55 -07:00
parent e89b578931
commit 45c38a8496

15
main.py
View File

@@ -8,7 +8,6 @@ import asyncio
import re import re
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
import aiodocker import aiodocker
from aiodocker.connector import DockerConnector
import aiohttp import aiohttp
import random import random
import string import string
@@ -154,15 +153,10 @@ async def main():
Monitors Navidrome container logs for rapid star/unstar events. Monitors Navidrome container logs for rapid star/unstar events.
""" """
docker = None docker = None
session = None
try: try:
# We need a custom session with no timeout for the long-polling log stream. # Set a long client timeout to prevent log stream from timing out during
# We also need to use aiodocker's connector to handle Unix sockets correctly. # periods of inactivity. One day in seconds.
connector = DockerConnector() docker = aiodocker.Docker(client_timeout=86400)
timeout = aiohttp.ClientTimeout(total=None, sock_read=None)
session = connector.aiohttp_session(timeout=timeout)
docker = aiodocker.Docker(session=session)
container = await docker.containers.get(settings.NAVIDROME_CONTAINER) container = await docker.containers.get(settings.NAVIDROME_CONTAINER)
logging.info(f"Monitoring logs for container '{settings.NAVIDROME_CONTAINER}'...") logging.info(f"Monitoring logs for container '{settings.NAVIDROME_CONTAINER}'...")
@@ -201,10 +195,7 @@ async def main():
logging.exception("An unexpected error occurred") logging.exception("An unexpected error occurred")
finally: finally:
if docker: if docker:
# aiodocker doesn't close sessions it doesn't own.
await docker.close() await docker.close()
if session:
await session.close()
if __name__ == "__main__": if __name__ == "__main__":