AgentSessionManager.Ports.Maintenance behaviour
(AgentSessionManager v0.8.0)
Copy Markdown
View Source
Port for database maintenance operations.
Provides retention enforcement, event pruning, and data integrity checks. Maintenance is never automatically scheduled — the application must call it explicitly (e.g., via a mix task, GenServer timer, or job scheduler).
Usage
policy = RetentionPolicy.new(max_completed_session_age_days: 90)
{:ok, report} = Maintenance.execute({EctoMaintenance, MyApp.Repo}, policy)
Summary
Callbacks
Clean up orphaned artifacts.
Execute retention policy against the store.
Hard-delete sessions that were soft-deleted longer ago than hard_delete_after_days.
Health check: verify data integrity.
Prune events for a single session based on policy.
Soft-delete completed sessions older than the retention period.
Types
@type context() :: term()
@type maintenance_report() :: %{ sessions_soft_deleted: non_neg_integer(), sessions_hard_deleted: non_neg_integer(), events_pruned: non_neg_integer(), artifacts_cleaned: non_neg_integer(), orphaned_sequences_cleaned: non_neg_integer(), duration_ms: non_neg_integer(), errors: [String.t()] }
Callbacks
@callback clean_orphaned_artifacts( context(), keyword() ) :: {:ok, non_neg_integer()} | {:error, AgentSessionManager.Core.Error.t()}
Clean up orphaned artifacts.
@callback execute(context(), AgentSessionManager.Persistence.RetentionPolicy.t()) :: {:ok, maintenance_report()} | {:error, AgentSessionManager.Core.Error.t()}
Execute retention policy against the store.
Performs all applicable maintenance operations based on the policy.
@callback hard_delete_expired_sessions( context(), AgentSessionManager.Persistence.RetentionPolicy.t() ) :: {:ok, non_neg_integer()} | {:error, AgentSessionManager.Core.Error.t()}
Hard-delete sessions that were soft-deleted longer ago than hard_delete_after_days.
@callback health_check(context()) :: {:ok, [String.t()]} | {:error, AgentSessionManager.Core.Error.t()}
Health check: verify data integrity.
Returns a list of issue descriptions. Empty list means healthy.
@callback prune_session_events( context(), session_id :: String.t(), AgentSessionManager.Persistence.RetentionPolicy.t() ) :: {:ok, non_neg_integer()} | {:error, AgentSessionManager.Core.Error.t()}
Prune events for a single session based on policy.
@callback soft_delete_expired_sessions( context(), AgentSessionManager.Persistence.RetentionPolicy.t() ) :: {:ok, non_neg_integer()} | {:error, AgentSessionManager.Core.Error.t()}
Soft-delete completed sessions older than the retention period.
Functions
@spec clean_orphaned_artifacts( maintenance_ref(), keyword() ) :: {:ok, non_neg_integer()} | {:error, AgentSessionManager.Core.Error.t()}
@spec execute(maintenance_ref(), AgentSessionManager.Persistence.RetentionPolicy.t()) :: {:ok, maintenance_report()} | {:error, AgentSessionManager.Core.Error.t()}
@spec hard_delete_expired_sessions( maintenance_ref(), AgentSessionManager.Persistence.RetentionPolicy.t() ) :: {:ok, non_neg_integer()} | {:error, AgentSessionManager.Core.Error.t()}
@spec health_check(maintenance_ref()) :: {:ok, [String.t()]} | {:error, AgentSessionManager.Core.Error.t()}
@spec prune_session_events( maintenance_ref(), String.t(), AgentSessionManager.Persistence.RetentionPolicy.t() ) :: {:ok, non_neg_integer()} | {:error, AgentSessionManager.Core.Error.t()}
@spec soft_delete_expired_sessions( maintenance_ref(), AgentSessionManager.Persistence.RetentionPolicy.t() ) :: {:ok, non_neg_integer()} | {:error, AgentSessionManager.Core.Error.t()}