feat: skills - add auto-tmux swarm metrics

This commit is contained in:
tukuaiai
2026-05-19 03:23:52 +08:00
parent 7f334448c5
commit ca3cc907fe
6 changed files with 31 additions and 0 deletions
+1
View File
@@ -154,6 +154,7 @@ skills/auto-tmux/scripts/swarm-state.sh lock-prune --older-than 3600 --dry-run
skills/auto-tmux/scripts/swarm-state.sh task-block --id task-001 --owner <session>:<window>.<pane> --reason "等待输入"
skills/auto-tmux/scripts/swarm-state.sh task-fail --id task-001 --owner <session>:<window>.<pane> --reason "测试失败"
skills/auto-tmux/scripts/swarm-state.sh task-list --status FAIL --dir /tmp/ai_swarm
skills/auto-tmux/scripts/swarm-state.sh metrics --dir /tmp/ai_swarm
skills/auto-tmux/scripts/swarm-state.sh task-reopen --id task-001 --owner <session>:<window>.<pane> --reason "重新执行"
skills/auto-tmux/scripts/swarm-state.sh validate --dir /tmp/ai_swarm
skills/auto-tmux/scripts/swarm-state.sh report --dir /tmp/ai_swarm
@@ -219,6 +219,7 @@ skills/auto-tmux/scripts/swarm-state.sh lock-prune --older-than 3600 --dry-run
```bash
skills/auto-tmux/scripts/swarm-state.sh task-done --id task-001 --owner "ai-hub:2.1" --result "make test passed"
skills/auto-tmux/scripts/swarm-state.sh metrics
skills/auto-tmux/scripts/swarm-state.sh validate
skills/auto-tmux/scripts/swarm-state.sh report
```
@@ -145,9 +145,12 @@ skills/auto-tmux/scripts/swarm-state.sh task-reopen \
校验状态一致性:
```bash
skills/auto-tmux/scripts/swarm-state.sh metrics
skills/auto-tmux/scripts/swarm-state.sh validate
```
`metrics` 会按任务状态、owner 和当前锁数量输出摘要,适合 commander 快速判断蜂群是否堵塞。
`validate` 会检查 `tasks.tsv` 表头、字段数量、重复任务 ID、非法状态、终态任务结果文件,以及锁目录中的 `owner` / `created_at`
## 锁管理
+1
View File
@@ -57,6 +57,7 @@ skills/auto-tmux/scripts/swarm-state.sh lock-prune --older-than 3600 --dry-run -
skills/auto-tmux/scripts/swarm-state.sh task-block --id task-001 --owner "$target" --reason "等待输入" --dir /tmp/ai_swarm
skills/auto-tmux/scripts/swarm-state.sh task-fail --id task-001 --owner "$target" --reason "测试失败" --dir /tmp/ai_swarm
skills/auto-tmux/scripts/swarm-state.sh task-list --status FAIL --dir /tmp/ai_swarm
skills/auto-tmux/scripts/swarm-state.sh metrics --dir /tmp/ai_swarm
skills/auto-tmux/scripts/swarm-state.sh task-reopen --id task-001 --owner "$target" --reason "重新执行" --dir /tmp/ai_swarm
skills/auto-tmux/scripts/swarm-state.sh validate --dir /tmp/ai_swarm
skills/auto-tmux/scripts/swarm-state.sh report --dir /tmp/ai_swarm
@@ -72,6 +72,8 @@ grep -q 'imported-001' /tmp/auto-tmux-smoke-task-next.txt
"$SWARM_STATE" task-fail --dir "$SWARM_DIR" --id smoke-fail --owner "$worker_target" --reason "expected failure"
"$SWARM_STATE" task-list --dir "$SWARM_DIR" --status FAIL >/tmp/auto-tmux-smoke-task-list-fail.txt
grep -q 'smoke-fail' /tmp/auto-tmux-smoke-task-list-fail.txt
"$SWARM_STATE" metrics --dir "$SWARM_DIR" >/tmp/auto-tmux-smoke-metrics.txt
grep -q 'FAIL' /tmp/auto-tmux-smoke-metrics.txt
"$SWARM_STATE" report --dir "$SWARM_DIR" >/tmp/auto-tmux-smoke-report.txt
"$SWARM_STATE" validate --dir "$SWARM_DIR" >/tmp/auto-tmux-smoke-state-validate.txt
grep -q 'smoke-task' /tmp/auto-tmux-smoke-report.txt
+23
View File
@@ -31,6 +31,7 @@ Usage:
swarm-state.sh lock-list [--dir DIR]
swarm-state.sh lock-prune --older-than SEC [--dir DIR] [--dry-run]
swarm-state.sh report [--dir DIR]
swarm-state.sh metrics [--dir DIR]
swarm-state.sh validate [--dir DIR]
Environment:
@@ -467,6 +468,27 @@ cmd_report() {
cmd_status -n 20
}
cmd_metrics() {
while [[ $# -gt 0 ]]; do
case "$1" in
--dir) set_dir "${2:-}"; shift 2 ;;
*) die "unknown metrics option: $1" ;;
esac
done
ensure_init
printf '# swarm metrics\n\n'
printf 'dir: %s\n\n' "$SWARM_DIR"
printf '## by status\n\n'
awk -F '\t' 'NR > 1 {count[$2]++} END {for (status in count) print status "\t" count[status]}' "$TASKS_TSV" |
sort | column -t -s $'\t' 2>/dev/null || true
printf '\n## by owner\n\n'
awk -F '\t' 'NR > 1 {count[$3]++} END {for (owner in count) print owner "\t" count[owner]}' "$TASKS_TSV" |
sort | column -t -s $'\t' 2>/dev/null || true
printf '\n## locks\n\n'
find "$LOCKS_DIR" -mindepth 1 -maxdepth 1 -type d -name '*.lock.d' | wc -l | awk '{print "active_locks\t" $1}' |
column -t -s $'\t' 2>/dev/null || true
}
cmd_validate() {
while [[ $# -gt 0 ]]; do
case "$1" in
@@ -560,6 +582,7 @@ main() {
lock-list) cmd_lock_list "$@" ;;
lock-prune) cmd_lock_prune "$@" ;;
report) cmd_report "$@" ;;
metrics) cmd_metrics "$@" ;;
validate) cmd_validate "$@" ;;
*) die "unknown command: $cmd" ;;
esac