tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1576Shell 205Rust 111Markdown 993774 Definiciones

granja: estado-granja.sh — foto on-demand (worker+avance KDE+cron) sin esperar el latido

Chequeo manual por si venís antes del cron o no corrió: salud del worker y qué muele,
barra de avance KDE desde el grafo, y últimas líneas del ciclo de cosecha. Filtra el
self-match del pgrep (el ']+.toml' que se colaba).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

20666643e28cafafb298d21627650a63689a1140 · por sergio · (hace 3 meses) · padre 8c29fd0bd · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +52 −0

diff --git a/scripts/farm/estado-granja.sh b/scripts/farm/estado-granja.sh
new file mode 100755
index 00000000..a7299690
--- /dev/null
+++ b/scripts/farm/estado-granja.sh
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+# estado-granja.sh — foto RÁPIDA de la granja, on-demand (no depende del cron). Corre cuando quieras
+# ver dónde va sin esperar al latido: salud del worker, qué muele, avance KDE, y si el cron corrió.
+#   scripts/farm/estado-granja.sh
+set -uo pipefail
+ROOT="$(cd "$(dirname "$0")/../.." && pwd)"; cd "$ROOT"
+SSH_KEY="${SSH_KEY:-$HOME/.ssh/github5}"
+FLEET="$ROOT/scripts/farm/.fleet"
+SSH="ssh -i $SSH_KEY -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o BatchMode=yes -o LogLevel=ERROR -o ConnectTimeout=12"
+
+echo "══ WORKERS ($(date '+%H:%M:%S')) ══"
+if [ -s "$FLEET" ]; then
+  while read -r name ip; do
+    [ -n "${name:-}" ] || continue
+    echo "▶ $name ($ip)"
+    $SSH "root@$ip" '
+      echo "   $(uptime | sed "s/.*load average/load/")"
+      n=$(ls /opt/hammer/store 2>/dev/null | wc -l); echo "   store: $n artefactos"
+      b=$(pgrep -af "release/hammer" | grep -E "release/hammer (build|--store|hash)" | grep -oE "[^ /]+\.toml" | sort -u | tr "\n" " ")
+      echo "   moliendo: ${b:-(nada — idle o entre colas)}"
+    ' 2>/dev/null || echo "   ⚠ sin respuesta (¿dead-man lo mató? ¿aún arrancando?)"
+  done < "$FLEET"
+else
+  echo "   flota vacía (scripts/farm/.fleet) — no hay worker vivo"
+fi
+
+echo; echo "══ AVANCE KDE (grafo local) ══"
+if [ -f docs/state/build-state-kde.json ]; then
+  python3 - <<'PY'
+import json,os,time
+f="docs/state/build-state-kde.json"
+d=json.load(open(f)); q=d["by_queue"].get("incoming-kde",{})
+tot=sum(q.values()); s=q.get("sealed",0)
+age=int(time.time()-os.path.getmtime(f))
+bar=int(30*s/tot) if tot else 0
+print(f"   [{'#'*bar}{'.'*(30-bar)}] {s}/{tot} sellado  "
+      f"(deuda {q.get('debt',0)}, nunca {q.get('never',0)})")
+print(f"   grafo regenerado hace {age//60}m {age%60}s  (lo actualiza el cron o `scripts/build-state.py --kde`)")
+PY
+else
+  echo "   (sin grafo — corré scripts/build-state.py --kde)"
+fi
+
+echo; echo "══ CRON DE COSECHA ══"
+line=$(crontab -l 2>/dev/null | grep cosecha-cron | grep -v '^#')
+[ -n "$line" ] && echo "   instalado: $line" || echo "   ⚠ NO instalado en el crontab"
+if [ -f work/cosecha-cron.log ]; then
+  echo "   último ciclo (tail):"
+  grep -E 'cosecha-cron (arranca|fin)|siembra|cosecha ✓|estado commit' work/cosecha-cron.log | tail -6 | sed 's/^/     /'
+else
+  echo "   (aún no corrió — no hay work/cosecha-cron.log; el cron dispara en :00 y :30)"
+fi