Add QQ gateway runtime support
This commit is contained in:
Executable
+148
@@ -0,0 +1,148 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
GORI_AGENT_HOME="${GORI_AGENT_HOME:-$ROOT_DIR}"
|
||||
STATE_DIR="$GORI_AGENT_HOME/state"
|
||||
LOG_DIR="$GORI_AGENT_HOME/logs"
|
||||
CONFIG_FILE="${GORI_GATEWAY_CONFIG:-$ROOT_DIR/config.json}"
|
||||
PID_FILE="$STATE_DIR/gori-agent.pid"
|
||||
LOG_FILE="$LOG_DIR/gori-agent.log"
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage: $0 <command> [--config path]
|
||||
|
||||
Commands:
|
||||
setup Run interactive setup
|
||||
start Start gateway in foreground
|
||||
start-daemon Start gateway in background
|
||||
stop Stop background gateway
|
||||
restart Restart background gateway
|
||||
status Show gateway status
|
||||
doctor Check configuration and local agents
|
||||
logs Follow gateway log
|
||||
discover-agents List detected local CLI agents
|
||||
|
||||
Environment:
|
||||
GORI_GATEWAY_CONFIG Config path, default: $CONFIG_FILE
|
||||
EOF
|
||||
}
|
||||
|
||||
ensure_build() {
|
||||
if [[ ! -f "$ROOT_DIR/dist/cli.js" ]]; then
|
||||
echo "dist/cli.js not found; building..."
|
||||
npm run build --prefix "$ROOT_DIR"
|
||||
fi
|
||||
}
|
||||
|
||||
ensure_state() {
|
||||
mkdir -p "$STATE_DIR" "$LOG_DIR"
|
||||
}
|
||||
|
||||
is_running() {
|
||||
[[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null
|
||||
}
|
||||
|
||||
start_daemon() {
|
||||
ensure_build
|
||||
ensure_state
|
||||
if is_running; then
|
||||
echo "gori-agent already running, pid $(cat "$PID_FILE")"
|
||||
exit 0
|
||||
fi
|
||||
nohup node "$ROOT_DIR/dist/cli.js" start --config "$CONFIG_FILE" >>"$LOG_FILE" 2>&1 &
|
||||
echo $! >"$PID_FILE"
|
||||
echo "gori-agent started, pid $(cat "$PID_FILE")"
|
||||
echo "log: $LOG_FILE"
|
||||
}
|
||||
|
||||
stop_daemon() {
|
||||
if ! is_running; then
|
||||
rm -f "$PID_FILE"
|
||||
echo "gori-agent is not running"
|
||||
exit 0
|
||||
fi
|
||||
local pid
|
||||
pid="$(cat "$PID_FILE")"
|
||||
kill "$pid"
|
||||
rm -f "$PID_FILE"
|
||||
echo "gori-agent stopped, pid $pid"
|
||||
}
|
||||
|
||||
if [[ $# -lt 1 ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
COMMAND="$1"
|
||||
shift
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--config)
|
||||
CONFIG_FILE="$2"
|
||||
shift 2
|
||||
;;
|
||||
--help|-h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Unknown argument: $1" >&2
|
||||
usage >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
case "$COMMAND" in
|
||||
setup)
|
||||
ensure_build
|
||||
exec node "$ROOT_DIR/dist/cli.js" setup --config "$CONFIG_FILE"
|
||||
;;
|
||||
start)
|
||||
ensure_build
|
||||
exec node "$ROOT_DIR/dist/cli.js" start --config "$CONFIG_FILE"
|
||||
;;
|
||||
start-daemon)
|
||||
start_daemon
|
||||
;;
|
||||
stop)
|
||||
stop_daemon
|
||||
;;
|
||||
restart)
|
||||
stop_daemon
|
||||
start_daemon
|
||||
;;
|
||||
status)
|
||||
ensure_build
|
||||
if is_running; then
|
||||
echo "gori-agent process: running, pid $(cat "$PID_FILE")"
|
||||
else
|
||||
echo "gori-agent process: not running"
|
||||
fi
|
||||
exec node "$ROOT_DIR/dist/cli.js" status --config "$CONFIG_FILE"
|
||||
;;
|
||||
doctor)
|
||||
ensure_build
|
||||
exec node "$ROOT_DIR/dist/cli.js" doctor --config "$CONFIG_FILE"
|
||||
;;
|
||||
discover-agents)
|
||||
ensure_build
|
||||
exec node "$ROOT_DIR/dist/cli.js" discover-agents --config "$CONFIG_FILE"
|
||||
;;
|
||||
logs)
|
||||
ensure_state
|
||||
touch "$LOG_FILE"
|
||||
exec tail -f "$LOG_FILE"
|
||||
;;
|
||||
--help|-h|help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echo "Unknown command: $COMMAND" >&2
|
||||
usage >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user