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:
14
main.py
14
main.py
@@ -8,6 +8,7 @@ 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
|
||||||
@@ -153,8 +154,15 @@ 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:
|
||||||
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)
|
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}'...")
|
||||||
@@ -163,7 +171,6 @@ async def main():
|
|||||||
stderr=True,
|
stderr=True,
|
||||||
follow=True,
|
follow=True,
|
||||||
since=datetime.now(timezone.utc).timestamp(),
|
since=datetime.now(timezone.utc).timestamp(),
|
||||||
timeout=0, # Disable timeout for long-polling
|
|
||||||
)
|
)
|
||||||
|
|
||||||
async for line in logs:
|
async for line in logs:
|
||||||
@@ -194,7 +201,10 @@ 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__":
|
||||||
|
|||||||
Reference in New Issue
Block a user