#!/bin/zsh # drill.sh · 压缩之眼端到端演习 # 在临时沙盒里注入一条假 compaction_triggered,验证报警链路命中。 # 不触碰任何真实日志、真实信号目录。 # 用法: zsh scripts/drill.sh set -e HERE="$(cd "$(dirname "$0")" && pwd)" WATCHER="$HERE/../runtime/compaction-watcher.py" WORK="$(mktemp -d /tmp/mck-drill.XXXXXX)" trap 'kill $WPID 2>/dev/null; rm -rf "$WORK"' EXIT mkdir -p "$WORK/logsroot/20260101T000000/questWindow" \ "$WORK/bridge" "$WORK/scanroot" "$WORK/ckpt" touch "$WORK/qoder.log" "$WORK/logsroot/20260101T000000/questWindow/agent.log" ZY_WATCH_SCAN_ROOT="$WORK/scanroot" \ ZY_WATCH_BRIDGE="$WORK/bridge" \ ZY_WATCH_CKPT_GLOB="$WORK/ckpt/ZY-CHECKPOINT-*.hdlp" \ ZY_WATCH_POLL_SEC=1 \ ZY_WATCH_QODER_LOG="$WORK/qoder.log" \ ZY_WATCH_LOGS_ROOT="$WORK/logsroot" \ /usr/bin/python3 "$WATCHER" > "$WORK/watcher.log" 2>&1 & WPID=$! sleep 3 # 先让守护建立基线 NOW="$(date '+%Y-%m-%d %H:%M:%S').000" # 再注入新事件 echo "$NOW [quest] notification type=compaction_triggered task-drill01 rid=drill" \ >> "$WORK/logsroot/20260101T000000/questWindow/agent.log" sleep 4 kill $WPID 2>/dev/null || true if [ -n "$(find "$WORK/bridge/signals" -name 'EV-*.txt' 2>/dev/null)" ]; then echo "DRILL PASS: 假事件命中,信号旗已立" cat "$WORK/bridge/signals/LATEST-SIGNAL.txt" 2>/dev/null exit 0 else echo "DRILL FAIL: 未命中。watcher 日志如下:" cat "$WORK/watcher.log" exit 1 fi