Nothing in Varaverk fires when a job ends, so this picks up run records that completed since the last pass rather than adding a hook to forty scripts. Ahead of stability in the cycle on purpose: a wrong port is not fixed by rebooting the machine.
79 lines
4.6 KiB
Bash
Executable File
79 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# ==============================================================================================
|
|
# ================================== AI Repair Sweep ===========================================
|
|
# ==============================================================================================
|
|
# PURPOSE
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Reads the logs of jobs that finished since the last pass, turns known error shapes into
|
|
# findings, probes for a correction, and either writes a proven value or leaves the finding
|
|
# for the operator to answer.
|
|
# Runs from the watchdog orchestrator. Off unless AI_REPAIR_ENABLED is true.
|
|
# ==============================================================================================
|
|
# OPERATIONAL MODEL
|
|
# ==============================================================================================
|
|
# A one-line shim: exec php on ai_repair_sweep.php in the same directory.
|
|
# The logic is PHP because everything it needs already is — the conf writer with its backups
|
|
# and read-back verification, the findings store, and the probe layer are all functions the
|
|
# WebGUI shares. A bash reimplementation would be a second conf writer, which is precisely the
|
|
# drift the guarded write path exists to prevent.
|
|
#
|
|
# There is no post-run hook in Varaverk; nothing fires when a job finishes. The sweep picks up
|
|
# completed run records instead, so this is one entry in an orchestrator list rather than a
|
|
# call added to forty scripts.
|
|
# ==============================================================================================
|
|
# DESIGN PRINCIPLES
|
|
# ==============================================================================================
|
|
# A Shim, Not a Program
|
|
# This file exists only because the scheduler runs shell scripts and the work is PHP.
|
|
# Anything added here would be logic the WebGUI cannot reach, and the operator answering a
|
|
# finding in the browser must take exactly the same path as the sweep that filed it.
|
|
#
|
|
# Detecting And Repairing Are Separate Trusts
|
|
# AI_REPAIR_ENABLED alone reads logs, files findings and proposes fixes, writing nothing.
|
|
# AI_REPAIR_AUTOFIX_ENABLED is what allows a value to be written, and only ever one a probe
|
|
# has answered on. Both live in master.conf; neither is set by this script.
|
|
# ==============================================================================================
|
|
# OPERATIONAL SAFEGUARDS
|
|
# ==============================================================================================
|
|
# Never Fatal
|
|
# Always exits 0 — on a disabled feature, a held lock, or a failed pass. The watchdog
|
|
# orchestrator runs real work either side of this, and a repair sweep must never be the
|
|
# reason a cycle reports failure.
|
|
#
|
|
# One Sweep At A Time
|
|
# The PHP takes a non-blocking flock. A pass that overruns its slot cannot have a second
|
|
# copy start probing and writing conf underneath it.
|
|
#
|
|
# Nothing Is Written That Has Not Answered
|
|
# A value reaches conf only after a probe got a response from it. Toggles are never written
|
|
# unattended at all — whether something should be switched on is a decision about intent,
|
|
# and a probe cannot prove intent.
|
|
# ==============================================================================================
|
|
# CONFIGURATION
|
|
# ==============================================================================================
|
|
#
|
|
# AI_ENABLED master switch; nothing here runs without it
|
|
# AI_REPAIR_ENABLED read logs and file findings
|
|
# AI_REPAIR_AUTOFIX_ENABLED allow a proven value to be written unattended
|
|
# AI_PROBE_TIMEOUT seconds a single probe may take
|
|
# AI_FINDING_RETAIN_DAYS how long closed findings are kept
|
|
#
|
|
# ==============================================================================================
|
|
# RUNTIME MODES
|
|
# ==============================================================================================
|
|
#
|
|
# ai_repair_sweep.sh
|
|
# One pass. Files findings, applies proven fixes if autofix is on.
|
|
#
|
|
# ai_repair_sweep.sh --dry-run
|
|
# Probes and reports what it would do. Writes no conf and does not move the marker, so the
|
|
# same runs are examined again next pass.
|
|
#
|
|
# ai_repair_sweep.sh --status
|
|
# Both switches, when the last pass ran, and every open finding.
|
|
#
|
|
# ==============================================================================================
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
php "$SCRIPT_DIR/ai_repair_sweep.php" "$@"
|