FABRIC/scripts/fabric-web.sh
jedarden 3a36c14162 feat(bd-288): deploy fabric web as persistent systemd service
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>
2026-04-23 15:53:34 -04:00

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