soulsync/core/repair_jobs/cache_evictor.py

38 lines
1.2 KiB
Python

"""Metadata Cache Evictor Job — periodically cleans expired cache entries."""
from core.repair_jobs import register_job
from core.repair_jobs.base import JobContext, JobResult, RepairJob
from utils.logging_config import get_logger
logger = get_logger("repair_job.cache_evictor")
@register_job
class CacheEvictorJob(RepairJob):
job_id = 'cache_evictor'
display_name = 'Cache Evictor'
description = 'Removes expired metadata cache entries'
icon = 'repair-icon-cache'
default_enabled = True
default_interval_hours = 6
default_settings = {}
auto_fix = True
def scan(self, context: JobContext) -> JobResult:
result = JobResult()
cache = context.metadata_cache
if not cache:
logger.debug("No metadata cache available — skipping")
return result
try:
evicted = cache.evict_expired()
result.auto_fixed = evicted
result.scanned = evicted
logger.info("Cache evictor: removed %d expired entries", evicted)
except Exception as e:
logger.error("Cache eviction failed: %s", e, exc_info=True)
result.errors = 1
return result