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 _:
logger.error(f"Invalid action: {msg.action}")
if ack:
logger.info("finished processing %s", msg)
await message.ack()
else:
logger.warn("failed to process %s", msg)
await message.reject()
except Exception as e:
logger.exception("Unhandled error", exc_info=e)

View File

@ -2,23 +2,30 @@ from logging import getLogger
from os.path import isdir
from watchfiles import awatch, Change
from .publisher import Publisher
from .scanner import scan
from .scanner import scan, get_ignore_pattern
from providers.kyoo_client import KyooClient
logger = getLogger(__name__)
async def monitor(path: str, publisher: Publisher, client: KyooClient):
ignore_pattern = get_ignore_pattern()
async for changes in awatch(path, ignore_permission_denied=True):
for event, file in changes:
if event == Change.added:
if isdir(file):
if ignore_pattern.match(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)
else:
case Change.added:
await publisher.add(file)
elif event == Change.deleted:
case Change.deleted:
await publisher.delete(file)
elif event == Change.modified:
case Change.modified:
pass
else:
logger.info(f"Change {event} occured for file {file}")
case _:
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
await asyncio.sleep(60 * 60 * 4)
todo = await client.get("refreshables")
logger.info("Refreshing %d items", len(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__)
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(
path_: Optional[str], publisher: Publisher, client: KyooClient, remove_deleted=False
):
path = path_ or os.environ.get("SCANNER_LIBRARY_ROOT", "/video")
logger.info("Starting the scan. It can take some times...")
ignore_pattern = None
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}")
ignore_pattern = get_ignore_pattern()
registered = await client.get_registered_paths()
videos = [
@ -33,6 +36,7 @@ async def scan(
if remove_deleted:
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):
await asyncio.gather(*map(publisher.delete, deleted))
elif len(deleted) > 0:
@ -43,5 +47,6 @@ async def scan(
if x not in videos:
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))
logger.info(f"Scan finished for {path}.")
logger.info("Scan finished for %s.", path)