Update service and script to use DirectoryTailer on ~/.needle/logs instead of the old single-file workers.log path. Rebuild dist/ so the running service picks up Phase 8 directory-tailing changes. - scripts/fabric-web.service: add --source /home/coding/.needle/logs - scripts/fabric-web.sh: replace FABRIC_LOG_PATH with FABRIC_LOG_SOURCE, switch from -f (single file) to --source (directory) mode - Rebuilt dist/ via npm run build - Restarted fabric-web.service (enabled, linger=yes, health: ok) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
128 lines
3.4 KiB
Bash
Executable file
128 lines
3.4 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# FABRIC Web Server Startup Script
|
|
#
|
|
# Usage:
|
|
# fabric-web.sh start - Start FABRIC web server in tmux session
|
|
# fabric-web.sh stop - Stop FABRIC web server
|
|
# fabric-web.sh restart - Restart FABRIC web server
|
|
# fabric-web.sh status - Check if FABRIC web server is running
|
|
# fabric-web.sh logs - Attach to FABRIC web server logs
|
|
#
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
FABRIC_DIR="$(dirname "$SCRIPT_DIR")"
|
|
SESSION_NAME="fabric-web"
|
|
PORT="${FABRIC_PORT:-3000}"
|
|
LOG_SOURCE="${FABRIC_LOG_SOURCE:-$HOME/.needle/logs}"
|
|
PID_FILE="$HOME/.fabric-web.pid"
|
|
|
|
start() {
|
|
if tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
|
|
echo "FABRIC web server already running in tmux session '$SESSION_NAME'"
|
|
return 1
|
|
fi
|
|
|
|
echo "Starting FABRIC web server on port $PORT..."
|
|
echo "Log source: $LOG_SOURCE"
|
|
|
|
# Create logs directory if needed
|
|
mkdir -p "$HOME/.fabric/logs"
|
|
|
|
# Start tmux session with FABRIC web server
|
|
tmux new-session -d -s "$SESSION_NAME" -c "$FABRIC_DIR" \
|
|
"node dist/cli.js web -p $PORT --source $LOG_SOURCE 2>&1 | tee -a $HOME/.fabric/logs/web.log"
|
|
|
|
# Save PID for reference
|
|
tmux list-panes -t "$SESSION_NAME" -F '#{pane_pid}' > "$PID_FILE" 2>/dev/null || true
|
|
|
|
sleep 1
|
|
|
|
if tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
|
|
echo "FABRIC web server started successfully"
|
|
echo " Dashboard: http://localhost:$PORT"
|
|
echo " Health: http://localhost:$PORT/api/health"
|
|
echo " Logs: $HOME/.fabric/logs/web.log"
|
|
echo " Tmux: tmux attach -t $SESSION_NAME"
|
|
return 0
|
|
else
|
|
echo "Failed to start FABRIC web server"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
stop() {
|
|
if ! tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
|
|
echo "FABRIC web server is not running"
|
|
rm -f "$PID_FILE"
|
|
return 0
|
|
fi
|
|
|
|
echo "Stopping FABRIC web server..."
|
|
tmux kill-session -t "$SESSION_NAME"
|
|
rm -f "$PID_FILE"
|
|
echo "FABRIC web server stopped"
|
|
}
|
|
|
|
restart() {
|
|
stop
|
|
sleep 1
|
|
start
|
|
}
|
|
|
|
status() {
|
|
if tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
|
|
echo "FABRIC web server is RUNNING (tmux session: $SESSION_NAME)"
|
|
echo ""
|
|
tmux list-sessions | grep "$SESSION_NAME"
|
|
|
|
# Check health endpoint
|
|
if command -v curl &>/dev/null; then
|
|
echo ""
|
|
echo "Health check:"
|
|
curl -s "http://localhost:$PORT/api/health" 2>/dev/null || echo " (unable to reach health endpoint)"
|
|
fi
|
|
return 0
|
|
else
|
|
echo "FABRIC web server is NOT RUNNING"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
logs() {
|
|
if ! tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
|
|
echo "FABRIC web server is not running"
|
|
return 1
|
|
fi
|
|
|
|
echo "Attaching to FABRIC web server logs (Ctrl+B D to detach)..."
|
|
tmux attach -t "$SESSION_NAME"
|
|
}
|
|
|
|
case "${1:-}" in
|
|
start)
|
|
start
|
|
;;
|
|
stop)
|
|
stop
|
|
;;
|
|
restart)
|
|
restart
|
|
;;
|
|
status)
|
|
status
|
|
;;
|
|
logs)
|
|
logs
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start|stop|restart|status|logs}"
|
|
echo ""
|
|
echo "Environment variables:"
|
|
echo " FABRIC_PORT - Port to listen on (default: 3000)"
|
|
echo " FABRIC_LOG_SOURCE - Log directory to watch (default: ~/.needle/logs)"
|
|
exit 1
|
|
;;
|
|
esac
|