Implement runit support for Fenris monitoring (issue #84)
Deliver end-to-end native monitoring path under runit with existing CLI/TUI controls and truthful status, preserving systemd behavior. Changes: - Add init system abstraction layer (src/fenris/init_system.py) that detects systemd vs runit and provides unified interface for timer control, on-demand collection, and service state queries - Create runit service files (units/runit/) with completion-relative 5-minute cadence, 2-minute boot delay, bounded execution (90s), no catch-up, and serialized runs via flock - Update monitor.py to use abstraction layer instead of direct systemctl - Update status.py to use abstraction layer for service state queries - Update all packaging scripts (deb, rpm) for init-system-aware setup - Update Makefile to install runit service files alongside systemd units - Add 46 tests for init system abstraction layer Spec: ADR 0008, §8.4, §8.5, §8.6, §8.7, §8.8 Closes #84 Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
This commit is contained in:
co-authored by
CommandCodeBot
parent
37a0ed7030
commit
e27052d09a
Executable
+9
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
# fenris-collect runit log script — service output to /var/log/fenris-collect/
|
||||
#
|
||||
# Runit automatically pipes the service's stdout/stderr to this logger's stdin.
|
||||
# The logger writes to runit's log directory for diagnostics.
|
||||
#
|
||||
# Spec: §8.8 (actionable native diagnostics)
|
||||
exec chpst -u fenris:fenris \
|
||||
svlogd -tt /var/log/fenris-collect/
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
#!/bin/sh
|
||||
# fenris-collect runit run script — periodic NVMe collection scheduler.
|
||||
#
|
||||
# Runit service layout:
|
||||
# /etc/sv/fenris-collect/run — this script (scheduler)
|
||||
# /etc/sv/fenris-collect/log/run — logger to /var/log/fenris-collect/
|
||||
# /var/service/fenris-collect — symlink to enable
|
||||
# /etc/sv/fenris-collect/down — marker for dormant install
|
||||
#
|
||||
# Guarantees (must match systemd timer semantics):
|
||||
# - Initial 2-minute boot delay (sleep 120 before first collect)
|
||||
# - Completion-relative 5-minute cadence (sleep 300 after collect)
|
||||
# - Bounded execution (timeout 90s on each collect)
|
||||
# - No catch-up (fixed sleep interval, no Persistent=)
|
||||
# - Serialized runs (runsv does not restart until exit)
|
||||
# - Serialized on-demand (flock serializes fenris-collect execution)
|
||||
#
|
||||
# Spec: §8.4, §8.5, §8.6, ADR 0008
|
||||
set -eu
|
||||
|
||||
COLLECT_TIMEOUT=90
|
||||
BOOT_DELAY=120
|
||||
CADENCE=300
|
||||
LOCK_FILE=/var/lib/fenris/fenris-collect.lock
|
||||
|
||||
# Ensure lock directory exists
|
||||
mkdir -p "$(dirname "$LOCK_FILE")"
|
||||
|
||||
# Initial boot delay: sleep before first collection
|
||||
sleep "$BOOT_DELAY"
|
||||
|
||||
# Collection loop: collect, then sleep for cadence
|
||||
while true; do
|
||||
flock --nonblock "$LOCK_FILE" \
|
||||
timeout "$COLLECT_TIMEOUT" nice ionice -c3 \
|
||||
/usr/libexec/fenris/fenris-collect \
|
||||
2>&1 || true
|
||||
|
||||
sleep "$CADENCE"
|
||||
done
|
||||
Reference in New Issue
Block a user