akkudoktoreos.server.retentionmanager

Retention Manager for Akkudoktor-EOS server.

This module provides a single long-running background task that owns the scheduling of all periodic server-maintenance jobs (cache cleanup, DB autosave, config reload, …).

Responsibilities:
  • Run a fast “heartbeat” loop (default 5 s) — the compaction tick.

  • Maintain a registry of ManagedJob entries, each with its own interval.

  • Re-read the live configuration on every tick so interval changes take effect immediately without a server restart.

  • Track per-job state: last run time, last duration, last error, run count.

  • Expose that state for health-check / metrics endpoints.

Example

Typical usage inside your FastAPI lifespan:

from akkudoktoreos.core.coreabc import get_config
from akkudoktoreos.server.rest.retention_manager import RetentionManager
from akkudoktoreos.server.rest.tasks import make_repeated_task

manager = RetentionManager(get_config().get_nested_value)
manager.register("cache_cleanup", cache_cleanup_fn, interval_attr="server/cache_cleanup_interval")
manager.register("db_autosave",   db_autosave_fn,   interval_attr="server/db_autosave_interval")

@asynccontextmanager
async def lifespan(app: FastAPI):
    tick_task = make_repeated_task(manager.tick, seconds=5, wait_first=2)
    await tick_task()
    yield

Classes

JobState(name, func, interval_attr, ...[, ...])

Runtime state tracked for a single managed job.

RetentionManager(config_getter, *[, ...])

Orchestrates all periodic server-maintenance jobs.