#!/bin/bash set -eu ROOT_DIR="${ROOT_DIR:-/volume1/projects/data_feed}" PYTHON_BIN="${PYTHON_BIN:-python}" HOST="${SNAPSHOT_ADMIN_HOST:-127.0.0.1}" PORT="${SNAPSHOT_ADMIN_PORT:-8787}" DB_PATH="${SNAPSHOT_ADMIN_DB:-${ROOT_DIR}/src/quant_engine/snapshot_admin.db}" SEED_PATH="${SNAPSHOT_ADMIN_SEED:-${ROOT_DIR}/GatherTradingData.json}" AUTH_USER="${SNAPSHOT_ADMIN_AUTH_USER:-}" AUTH_PASSWORD="${SNAPSHOT_ADMIN_AUTH_PASSWORD:-}" ALLOW_REMOTE="${SNAPSHOT_ADMIN_ALLOW_REMOTE:-0}" PID_FILE="${SNAPSHOT_ADMIN_PID_FILE:-${ROOT_DIR}/Temp/snapshot_admin.pid}" LOG_FILE="${SNAPSHOT_ADMIN_LOG_FILE:-${ROOT_DIR}/Temp/snapshot_admin.log}" STATE_URL="${SNAPSHOT_ADMIN_STATE_URL:-http://${HOST}:${PORT}/api/state}" PUBLIC_STATE_URL="${SNAPSHOT_ADMIN_PUBLIC_STATE_URL:-https://admin.example.com/api/state}" mkdir -p "$(dirname "$PID_FILE")" "$(dirname "$LOG_FILE")" start_server() { if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then echo "snapshot admin already running pid=$(cat "$PID_FILE")" return 0 fi cmd=("$PYTHON_BIN" "${ROOT_DIR}/tools/run_snapshot_admin_server_v1.py") if [ "$ALLOW_REMOTE" = "1" ]; then cmd+=("--host" "0.0.0.0" "--allow-remote") else cmd+=("--host" "$HOST") fi cmd+=("--port" "$PORT" "--db" "$DB_PATH" "--seed" "$SEED_PATH") if [ -n "$AUTH_USER" ]; then cmd+=("--auth-user" "$AUTH_USER") fi if [ -n "$AUTH_PASSWORD" ]; then cmd+=("--auth-password" "$AUTH_PASSWORD") fi nohup "${cmd[@]}" >> "$LOG_FILE" 2>&1 & echo $! > "$PID_FILE" echo "started snapshot admin pid=$!" } stop_server() { if [ ! -f "$PID_FILE" ] || ! kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then echo "snapshot admin not running" rm -f "$PID_FILE" return 0 fi kill "$(cat "$PID_FILE")" sleep 2 if kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then kill -9 "$(cat "$PID_FILE")" fi rm -f "$PID_FILE" echo "stopped snapshot admin" } healthcheck() { if [ ! -f "$PID_FILE" ] || ! kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then echo "healthcheck failed: process not running" return 1 fi if [ -n "$AUTH_USER" ] && [ -n "$AUTH_PASSWORD" ]; then if curl -fsS -u "${AUTH_USER}:${AUTH_PASSWORD}" "$STATE_URL" >/dev/null 2>&1; then echo "healthcheck ok: $STATE_URL" return 0 fi else if curl -fsS "$STATE_URL" >/dev/null 2>&1; then echo "healthcheck ok: $STATE_URL" return 0 fi fi echo "healthcheck failed: $STATE_URL" return 1 } public_check() { echo "curl -i ${PUBLIC_STATE_URL}" echo "curl -u ':' ${PUBLIC_STATE_URL}" echo "curl -i ${PUBLIC_STATE_URL%/api/state}/tables" } case "${1:-start}" in start) start_server ;; stop) stop_server ;; restart) stop_server start_server ;; status) if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then echo "running pid=$(cat "$PID_FILE")" exit 0 fi echo "stopped" exit 1 ;; healthcheck) healthcheck ;; public-check) public_check ;; *) echo "usage: $0 {start|stop|restart|status|healthcheck|public-check}" exit 2 ;; esac