session_maintenance
zocrates.utils.session_maintenance ¶
Session database maintenance, retention pruning, and space reclamation.
_get_sort_key ¶
Extract a timezone-aware UTC datetime for session sorting and age checks.
Handles float POSIX timestamp, create_time, datetime instances, and ISO/SQLite strings.
Source code in zocrates/utils/session_maintenance.py
get_session_storage_stats
async
¶
get_session_storage_stats(db_path, session_service=None, app_name='zocrates', user_id='default_user')
Return physical database size and session count metrics for sessions.db.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
db_path
|
Path
|
Path to sessions.db. |
required |
session_service
|
DatabaseSessionService | None
|
Optional ADK DatabaseSessionService to count sessions. |
None
|
app_name
|
str
|
ADK app name identifier. |
'zocrates'
|
user_id
|
str
|
ADK user identifier. |
'default_user'
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Dict with keys size_bytes, session_count, freelist_pages, total_pages, page_size. |
Source code in zocrates/utils/session_maintenance.py
get_sqlite_freelist_stats ¶
Return (freelist_count, page_count, page_size) from SQLite header.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
db_path
|
Path
|
Path to the SQLite database file. |
required |
Returns:
| Type | Description |
|---|---|
tuple[int, int, int]
|
Tuple of (freelist_count, page_count, page_size). |
Source code in zocrates/utils/session_maintenance.py
prune_abandoned_empty_sessions
async
¶
prune_abandoned_empty_sessions(session_service, db_path, app_name='zocrates', user_id='default_user', min_age_hours=EMPTY_SESSION_MIN_AGE_HOURS, active_session_ids=None)
Prune sessions with zero events that are older than min_age_hours.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
session_service
|
DatabaseSessionService
|
ADK DatabaseSessionService instance. |
required |
db_path
|
Path
|
Path to sessions.db SQLite database. |
required |
app_name
|
str
|
ADK app name identifier. |
'zocrates'
|
user_id
|
str
|
ADK user identifier. |
'default_user'
|
min_age_hours
|
float
|
Minimum age in hours before an empty session is eligible for deletion. |
EMPTY_SESSION_MIN_AGE_HOURS
|
active_session_ids
|
set[str] | None
|
Set of session IDs currently streaming or active (protected from deletion). |
None
|
Returns:
| Type | Description |
|---|---|
int
|
Count of successfully deleted empty sessions. |
Source code in zocrates/utils/session_maintenance.py
prune_retention_sessions
async
¶
prune_retention_sessions(session_service, app_name='zocrates', user_id='default_user', retention_days=180, max_saved_sessions=100, active_session_ids=None)
Prune sessions exceeding retention age or maximum session cap.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
session_service
|
DatabaseSessionService
|
ADK DatabaseSessionService instance. |
required |
app_name
|
str
|
ADK app name identifier. |
'zocrates'
|
user_id
|
str
|
ADK user identifier. |
'default_user'
|
retention_days
|
int | None
|
Age in days past which sessions are deleted (0 or None disables). |
180
|
max_saved_sessions
|
int | None
|
Max count of sessions to retain (0 or None disables). |
100
|
active_session_ids
|
set[str] | None
|
Set of session IDs currently streaming or active (protected from deletion). |
None
|
Returns:
| Type | Description |
|---|---|
int
|
Count of successfully deleted expired/excess sessions. |
Source code in zocrates/utils/session_maintenance.py
run_session_database_maintenance
async
¶
run_session_database_maintenance(zotero_data_dir, session_service, config=None, active_session_ids=None, app_name='zocrates', user_id='default_user')
Execute session database maintenance cycle with concurrency and fail-open guards.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
zotero_data_dir
|
Path | str
|
Root Zotero data directory. |
required |
session_service
|
DatabaseSessionService
|
ADK DatabaseSessionService instance. |
required |
config
|
dict[str, Any] | None
|
Maintenance configuration dict from zocrates_config.json. |
None
|
active_session_ids
|
set[str] | None
|
Set of session IDs actively streaming turns. |
None
|
app_name
|
str
|
ADK app name identifier. |
'zocrates'
|
user_id
|
str
|
ADK user identifier. |
'default_user'
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Summary dict containing pruned counts, vacuum execution status, and reclaimed bytes. |
Source code in zocrates/utils/session_maintenance.py
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 | |
vacuum_session_database ¶
Execute VACUUM on sessions.db using a dedicated fail-open raw connection.
Checks disk usage beforehand requiring at least 1.5x DB size free.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
db_path
|
Path
|
Path to sessions.db. |
required |
Returns:
| Type | Description |
|---|---|
tuple[bool, int, int]
|
Tuple of (success: bool, before_bytes: int, after_bytes: int). |