Manually instrument scanner

This commit is contained in:
Zoe Roux 2025-11-17 21:35:19 +01:00
parent 7124a3d3c6
commit 2194831d86
No known key found for this signature in database
2 changed files with 42 additions and 32 deletions

View File

@ -5,6 +5,7 @@ from logging import getLogger
from mimetypes import guess_file_type
from os.path import dirname, exists, isdir, join
from opentelemetry import trace
from watchfiles import Change, awatch
from .client import KyooClient
@ -16,6 +17,7 @@ from .models.videos import For, Video, VideoInfo
from .requests import RequestCreator
logger = getLogger(__name__)
tracer = trace.get_tracer("kyoo.scanner")
@asynccontextmanager
@ -36,6 +38,7 @@ class FsScanner:
except re.error as e:
logger.error(f"Invalid ignore pattern. Ignoring. Error: {e}")
@tracer.start_as_current_span("scan")
async def scan(self, path: str | None = None, remove_deleted=False):
if path is None:
path = self._root_path
@ -78,6 +81,7 @@ class FsScanner:
except Exception as e:
logger.error("Unexpected error while running scan.", exc_info=e)
@tracer.start_as_current_span("monitor")
async def monitor(self):
logger.info(f"Watching for new files in {self._root_path}")
async for changes in awatch(self._root_path, ignore_permission_denied=True):

View File

@ -3,6 +3,7 @@ from logging import getLogger
from typing import cast
from asyncpg import Connection, Pool
from opentelemetry import trace
from pydantic import TypeAdapter
from .client import KyooClient
@ -11,6 +12,7 @@ from .models.videos import Resource
from .providers.provider import Provider
logger = getLogger(__name__)
tracer = trace.get_tracer("kyoo.scanner")
class RequestCreator:
@ -54,6 +56,7 @@ class RequestProcessor:
self._client = client
self._providers = providers
@tracer.start_as_current_span("listen_requests")
async def listen(self, tg: TaskGroup):
closed = Event()
@ -118,6 +121,7 @@ class RequestProcessor:
return False
request = Request.model_validate(cur)
with tracer.start_as_current_span(f"process {request.title}") as span:
logger.info(f"Starting to process {request.title}")
try:
show = await self._run_request(request)
@ -140,6 +144,8 @@ class RequestProcessor:
videos,
)
except Exception as e:
span.set_status(trace.Status(trace.StatusCode.ERROR))
span.record_exception(e)
logger.error("Couldn't process request", exc_info=e)
cur = await self._database.execute(
"""