Add more logs to the scanner (and fix ignore pattern for the monitor) (#492)

This commit is contained in:
Zoe Roux 2024-05-13 19:46:33 +02:00 committed by GitHub
parent afa57df5c2
commit a978e99e8a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 33 additions and 17 deletions

View File

@ -46,8 +46,10 @@ class Subscriber(RabbitBase):
case _: case _:
logger.error(f"Invalid action: {msg.action}") logger.error(f"Invalid action: {msg.action}")
if ack: if ack:
logger.info("finished processing %s", msg)
await message.ack() await message.ack()
else: else:
logger.warn("failed to process %s", msg)
await message.reject() await message.reject()
except Exception as e: except Exception as e:
logger.exception("Unhandled error", exc_info=e) logger.exception("Unhandled error", exc_info=e)

View File

@ -2,23 +2,30 @@ from logging import getLogger
from os.path import isdir from os.path import isdir
from watchfiles import awatch, Change from watchfiles import awatch, Change
from .publisher import Publisher from .publisher import Publisher
from .scanner import scan from .scanner import scan, get_ignore_pattern
from providers.kyoo_client import KyooClient from providers.kyoo_client import KyooClient
logger = getLogger(__name__) logger = getLogger(__name__)
async def monitor(path: str, publisher: Publisher, client: KyooClient): async def monitor(path: str, publisher: Publisher, client: KyooClient):
ignore_pattern = get_ignore_pattern()
async for changes in awatch(path, ignore_permission_denied=True): async for changes in awatch(path, ignore_permission_denied=True):
for event, file in changes: for event, file in changes:
if event == Change.added: if ignore_pattern.match(file):
if isdir(file): logger.info(
"Ignoring event %s for file %s (due to IGNORE_PATTERN)", event, file
)
continue
logger.info("Change %s occured for file %s", event, file)
match event:
case Change.added if isdir(file):
await scan(file, publisher, client) await scan(file, publisher, client)
else: case Change.added:
await publisher.add(file) await publisher.add(file)
elif event == Change.deleted: case Change.deleted:
await publisher.delete(file) await publisher.delete(file)
elif event == Change.modified: case Change.modified:
pass pass
else: case _:
logger.info(f"Change {event} occured for file {file}") logger.warn("Unknown file event %s (for file %s)", event, file)

View File

@ -13,4 +13,6 @@ async def refresh(publisher: Publisher, client: KyooClient):
# Check for updates every 4 hours # Check for updates every 4 hours
await asyncio.sleep(60 * 60 * 4) await asyncio.sleep(60 * 60 * 4)
todo = await client.get("refreshables") todo = await client.get("refreshables")
logger.info("Refreshing %d items", len(todo))
await asyncio.gather(*(publisher.refresh(**x) for x in todo)) await asyncio.gather(*(publisher.refresh(**x) for x in todo))
logger.info("Refresh finish. Will check for new items to refresh in 4 hours")

View File

@ -10,18 +10,21 @@ from providers.kyoo_client import KyooClient
logger = getLogger(__name__) logger = getLogger(__name__)
def get_ignore_pattern():
try:
return re.compile(os.environ.get("LIBRARY_IGNORE_PATTERN", ""))
except Exception as e:
logger.error(f"Invalid ignore pattern. Ignoring. Error: {e}")
return re.compile("")
async def scan( async def scan(
path_: Optional[str], publisher: Publisher, client: KyooClient, remove_deleted=False path_: Optional[str], publisher: Publisher, client: KyooClient, remove_deleted=False
): ):
path = path_ or os.environ.get("SCANNER_LIBRARY_ROOT", "/video") path = path_ or os.environ.get("SCANNER_LIBRARY_ROOT", "/video")
logger.info("Starting the scan. It can take some times...") logger.info("Starting the scan. It can take some times...")
ignore_pattern = None ignore_pattern = get_ignore_pattern()
try:
ignore_pattern = re.compile(os.environ.get("LIBRARY_IGNORE_PATTERN", ""))
except Exception as e:
ignore_pattern = re.compile("")
logger.error(f"Invalid ignore pattern. Ignoring. Error: {e}")
registered = await client.get_registered_paths() registered = await client.get_registered_paths()
videos = [ videos = [
@ -33,6 +36,7 @@ async def scan(
if remove_deleted: if remove_deleted:
deleted = [x for x in registered if x not in videos] deleted = [x for x in registered if x not in videos]
logger.info("Found %d stale files to remove.", len(deleted))
if len(deleted) != len(registered): if len(deleted) != len(registered):
await asyncio.gather(*map(publisher.delete, deleted)) await asyncio.gather(*map(publisher.delete, deleted))
elif len(deleted) > 0: elif len(deleted) > 0:
@ -43,5 +47,6 @@ async def scan(
if x not in videos: if x not in videos:
await client.delete_issue(x) await client.delete_issue(x)
logger.info("Found %d new files (counting non-video files)", len(to_register))
await asyncio.gather(*map(publisher.add, to_register)) await asyncio.gather(*map(publisher.add, to_register))
logger.info(f"Scan finished for {path}.") logger.info("Scan finished for %s.", path)