#!/usr/bin/env bash set -euo pipefail ROOT_DIR="/Users/ashwin/workspace/nxtgauge-admin-solid" PID_FILE="/tmp/nxtgauge-admin-3000.pid" APP_LOG="/tmp/nxtgauge-admin-3000.log" APP_URL="http://127.0.0.1:3000/admin/external-dashboard-management" kill_listeners() { lsof -tiTCP:3000 -sTCP:LISTEN | xargs -r kill -9 || true } start() { if [[ -f "$PID_FILE" ]]; then old_pid="$(cat "$PID_FILE" || true)" if [[ -n "${old_pid:-}" ]] && kill -0 "$old_pid" 2>/dev/null; then if curl -fsS -m 3 "$APP_URL" >/dev/null 2>&1; then echo "admin-3000 already running (pid $old_pid)" echo "url: $APP_URL" return 0 fi kill -9 "$old_pid" || true fi rm -f "$PID_FILE" fi pkill -f "admin-3000-daemon.sh" || true pkill -f ".output/server/index.mjs" || true kill_listeners nohup /bin/zsh -lc "cd '$ROOT_DIR' && HOST=0.0.0.0 PORT=3000 node .output/server/index.mjs" >>"$APP_LOG" 2>&1 & new_pid=$! echo "$new_pid" > "$PID_FILE" for _ in {1..30}; do if curl -fsS -m 3 "$APP_URL" >/dev/null 2>&1; then echo "admin-3000: running (pid $new_pid)" echo "url: $APP_URL" return 0 fi sleep 1 done echo "admin-3000 failed to become healthy" tail -n 80 /tmp/nxtgauge-admin-3000.log || true exit 1 } stop() { if [[ -f "$PID_FILE" ]]; then pid="$(cat "$PID_FILE" || true)" if [[ -n "${pid:-}" ]] && kill -0 "$pid" 2>/dev/null; then kill -9 "$pid" || true fi rm -f "$PID_FILE" fi pkill -f "admin-3000-daemon.sh|.output/server/index.mjs" || true kill_listeners echo "admin-3000: stopped" } status() { app_state="stopped" app_pid="" if [[ -f "$PID_FILE" ]]; then app_pid="$(cat "$PID_FILE" || true)" if [[ -n "${app_pid:-}" ]] && kill -0 "$app_pid" 2>/dev/null; then app_state="running" fi fi if lsof -nP -iTCP:3000 -sTCP:LISTEN >/dev/null 2>&1; then echo "admin-3000: running" echo "process: $app_state${app_pid:+ (pid $app_pid)}" lsof -nP -iTCP:3000 -sTCP:LISTEN exit 0 fi echo "admin-3000: stopped" echo "process: $app_state${app_pid:+ (pid $app_pid)}" exit 1 } action="${1:-restart}" case "$action" in start) start ;; stop) stop ;; restart) stop; start ;; status) status ;; *) echo "Usage: $0 [start|stop|restart|status]" exit 2 ;; esac