Files
QuantEngineByItz/tools/run_snapshot_admin_synology.sh

114 lines
3.1 KiB
Bash

#!/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}/outputs/snapshot_admin/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 '<user>:<password>' ${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