diff --git a/app/tools/diag.sh b/app/tools/diag.sh new file mode 100755 index 0000000..8f79c32 --- /dev/null +++ b/app/tools/diag.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# Church Translate — one-shot diagnostic for "it is behind / in the red". +# Read-only: reads the log and asks the running app for its status. Changes nothing. +L="$HOME/Library/Application Support/Church Translate/data/logs/app.log" +C="$HOME/Library/Application Support/Church Translate/data/config.json" + +echo "=== MACHINE ===" +system_profiler SPHardwareDataType 2>/dev/null | grep -E "Model Name|Chip|Total Number of Cores|Memory:" | sed 's/^ */ /' +echo " macOS $(sw_vers -productVersion)" + +echo +echo "=== MEMORY PRESSURE / SWAP ===" +memory_pressure 2>/dev/null | grep -Ei "free percentage|pageouts" | sed 's/^/ /' +sysctl -n vm.swapusage 2>/dev/null | sed 's/^/ swap: /' + +echo +echo "=== WHAT THE APP CHOSE AT STARTUP ===" +grep -E "GPU features \(speech\)|no GPU acceleration|no fp16|loading the speech model|loading the translation model|speech model ready|translation model ready|models could not load" "$L" 2>/dev/null | tail -8 | sed 's/^/ /' + +echo +echo "=== THROUGHPUT — is it slower than people talk? ===" +echo " slow-sentence events (>4s): $(grep -c 'slow sentence' "$L" 2>/dev/null)" +grep "slow sentence" "$L" 2>/dev/null | tail -12 | sed 's/^/ /' +grep -E "stepping down to a lighter" "$L" 2>/dev/null | tail -3 | sed 's/^/ /' + +echo +echo "=== THE RED CONDITION ===" +echo " caption-only events: $(grep -c 'caption only' "$L" 2>/dev/null)" +grep -E "caption only|stale — caption only" "$L" 2>/dev/null | tail -6 | sed 's/^/ /' + +echo +echo "=== LIVE STATUS ===" +TOK=$(grep -o '"controlToken"[[:space:]]*:[[:space:]]*"[^"]*"' "$C" 2>/dev/null | sed 's/.*"\([^"]*\)"$/\1/') +curl -s -m 5 "http://127.0.0.1:3100/api/control/status?key=$TOK" 2>/dev/null | head -c 1500 +echo + +echo +echo "=== RECENT ERRORS ===" +grep "\[app\] err" "$L" 2>/dev/null | grep -v "natural voice fell back" | tail -12 | sed 's/^/ /'