fix: Configure aiodocker with custom session to disable log timeouts

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

14
main.py
View File

@@ -8,6 +8,7 @@ import asyncio
import re
from datetime import datetime, timedelta, timezone
import aiodocker
from aiodocker.connector import DockerConnector
import aiohttp
import random
import string
@@ -153,8 +154,15 @@ async def main():
Monitors Navidrome container logs for rapid star/unstar events.
"""
docker = None
session = None
try:
docker = aiodocker.Docker()
# We need a custom session with no timeout for the long-polling log stream.
# We also need to use aiodocker's connector to handle Unix sockets correctly.
connector = DockerConnector()
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)
logging.info(f"Monitoring logs for container '{settings.NAVIDROME_CONTAINER}'...")
@@ -163,7 +171,6 @@ async def main():
stderr=True,
follow=True,
since=datetime.now(timezone.utc).timestamp(),
timeout=0, # Disable timeout for long-polling
)
async for line in logs:
@@ -194,7 +201,10 @@ async def main():
logging.exception("An unexpected error occurred")
finally:
if docker:
# aiodocker doesn't close sessions it doesn't own.
await docker.close()
if session:
await session.close()
if __name__ == "__main__":