Research-Stack/4-Infrastructure/storage/storage-agent.timer
Brandon Schneider 99fc5d750b Add storage observer/optimizer agent (storage_agent.py)
Full Observe→Decide→Act→Emit loop for the restic + Garage + rclone stack:

- storage_agent.py: probes Garage health, restic snapshot count and dedup
  ratio (Q16_16), backup log staleness, cold-copy drift; triggers corrective
  actions (snap, cold-copy, verify, forget, offload, garage restart) based
  on Q16_16 threshold comparisons. Emits hash-chained receipts to both a
  local JSONL log (~/.cache/storage-agent.jsonl) and
  s3://research-stack/agent-receipts/ in Garage.

- storage-agent.service / storage-agent.timer: systemd units installed
  system-wide; timer fires every 15 min (RandomizedDelaySec=60). Includes
  PATH=/home/allaun/.local/bin:... so aws cli and restic are resolved.

- .git/hooks/post-commit updated: agent runs (--once) in the background
  after each restic snap, so post-commit state is always observed.

- 4-Infrastructure/AGENTS.md: full documentation of agent contract,
  receipt schema, trigger table, log paths, and usage examples.

Shim boundary: zero logic — pure subprocess calls to existing CLI tools.
No Float, no new dependencies. py_compile and live dry-run verified.

Generated with [Devin](https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-05-18 22:32:52 -05:00

15 lines
559 B
SYSTEMD

[Unit]
Description=Storage agent — 15-minute observation + corrective-action timer
Documentation=file:///home/allaun/Research Stack/4-Infrastructure/storage/storage_agent.py
[Timer]
# Fire every 15 minutes. RandomizedDelaySec spreads load when multiple nodes
# eventually run this (±60 s jitter so they don't all probe Garage at once).
OnCalendar=*:0/15
RandomizedDelaySec=60
# Persistent=true: if the machine was off at a scheduled fire time, catch up
# once on next boot rather than skipping silently.
Persistent=true
[Install]
WantedBy=timers.target