add ui
This commit is contained in:
130
start.sh
130
start.sh
@@ -7,7 +7,16 @@ PORT="${FGAI_SYSLOG_PORT:-5514}"
|
||||
HOST="${FGAI_SYSLOG_HOST:-0.0.0.0}"
|
||||
LOG_FILE="${FGAI_SYSLOG_FILE:-$ROOT_DIR/logs/fg_syslog.jsonl}"
|
||||
LISTENER_LOG="${FGAI_LISTENER_LOG:-$ROOT_DIR/logs/fgai-listener.log}"
|
||||
PID_FILE="${FGAI_PID_FILE:-$ROOT_DIR/run/fgai-listener.pid}"
|
||||
POLICY_FILE="${FGAI_POLICY_FILE:-$ROOT_DIR/exports/policies.json}"
|
||||
STATE_FILE="${FGAI_STATE_FILE:-$ROOT_DIR/state/fgai-status.json}"
|
||||
MONITOR_INTERVAL="${FGAI_MONITOR_INTERVAL:-10}"
|
||||
DASHBOARD_HOST="${FGAI_DASHBOARD_HOST:-127.0.0.1}"
|
||||
DASHBOARD_PORT="${FGAI_DASHBOARD_PORT:-8088}"
|
||||
LISTENER_PID_FILE="${FGAI_LISTENER_PID_FILE:-$ROOT_DIR/run/fgai-listener.pid}"
|
||||
MONITOR_PID_FILE="${FGAI_MONITOR_PID_FILE:-$ROOT_DIR/run/fgai-monitor.pid}"
|
||||
DASHBOARD_PID_FILE="${FGAI_DASHBOARD_PID_FILE:-$ROOT_DIR/run/fgai-dashboard.pid}"
|
||||
MONITOR_LOG="${FGAI_MONITOR_LOG:-$ROOT_DIR/logs/fgai-monitor.log}"
|
||||
DASHBOARD_LOG="${FGAI_DASHBOARD_LOG:-$ROOT_DIR/logs/fgai-dashboard.log}"
|
||||
|
||||
usage() {
|
||||
printf 'Usage: %s [start|stop|restart|status|tail|analyze|install]\n' "$0"
|
||||
@@ -17,6 +26,7 @@ usage() {
|
||||
printf ' FGAI_SYSLOG_HOST=%s\n' "$HOST"
|
||||
printf ' FGAI_SYSLOG_FILE=%s\n' "$LOG_FILE"
|
||||
printf ' FGAI_LISTENER_LOG=%s\n' "$LISTENER_LOG"
|
||||
printf ' FGAI_DASHBOARD_PORT=%s\n' "$DASHBOARD_PORT"
|
||||
}
|
||||
|
||||
activate_venv_for_script() {
|
||||
@@ -38,8 +48,8 @@ install_deps() {
|
||||
python -m pip install -e "$ROOT_DIR"
|
||||
}
|
||||
|
||||
is_running() {
|
||||
[ -f "$PID_FILE" ] && ps -p "$(cat "$PID_FILE")" >/dev/null 2>&1
|
||||
is_pid_running() {
|
||||
[ -f "$1" ] && ps -p "$(cat "$1")" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
needs_privileged_port() {
|
||||
@@ -56,11 +66,11 @@ listener_command() {
|
||||
|
||||
start_listener() {
|
||||
install_deps
|
||||
mkdir -p "$(dirname "$LOG_FILE")" "$(dirname "$LISTENER_LOG")" "$(dirname "$PID_FILE")"
|
||||
mkdir -p "$(dirname "$LOG_FILE")" "$(dirname "$LISTENER_LOG")" "$(dirname "$LISTENER_PID_FILE")" "$(dirname "$STATE_FILE")"
|
||||
touch "$LOG_FILE"
|
||||
|
||||
if is_running; then
|
||||
printf 'fgAI syslog listener already running, pid %s\n' "$(cat "$PID_FILE")"
|
||||
if is_pid_running "$LISTENER_PID_FILE"; then
|
||||
printf 'fgAI syslog listener already running, pid %s\n' "$(cat "$LISTENER_PID_FILE")"
|
||||
return 0
|
||||
fi
|
||||
|
||||
@@ -78,57 +88,121 @@ start_listener() {
|
||||
--output "$LOG_FILE" \
|
||||
--quiet > "$LISTENER_LOG" 2>&1 &
|
||||
fi
|
||||
printf '%s\n' "$!" > "$PID_FILE"
|
||||
printf '%s\n' "$!" > "$LISTENER_PID_FILE"
|
||||
|
||||
printf 'Started fgAI syslog listener, pid %s\n' "$(cat "$PID_FILE")"
|
||||
printf 'Started fgAI syslog listener, pid %s\n' "$(cat "$LISTENER_PID_FILE")"
|
||||
printf 'Input: udp://%s:%s\n' "$HOST" "$PORT"
|
||||
printf 'Syslog file: %s\n' "$LOG_FILE"
|
||||
printf 'Process log: %s\n' "$LISTENER_LOG"
|
||||
}
|
||||
|
||||
stop_listener() {
|
||||
if ! is_running; then
|
||||
printf 'fgAI syslog listener is not running\n'
|
||||
rm -f "$PID_FILE"
|
||||
start_monitor() {
|
||||
install_deps
|
||||
mkdir -p "$(dirname "$STATE_FILE")" "$(dirname "$MONITOR_LOG")" "$(dirname "$MONITOR_PID_FILE")"
|
||||
|
||||
if is_pid_running "$MONITOR_PID_FILE"; then
|
||||
printf 'fgAI monitor already running, pid %s\n' "$(cat "$MONITOR_PID_FILE")"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! kill "$(cat "$PID_FILE")" 2>/dev/null; then
|
||||
sudo kill "$(cat "$PID_FILE")"
|
||||
monitor_args=(monitor --logs "$LOG_FILE" --output "$STATE_FILE" --interval "$MONITOR_INTERVAL")
|
||||
if [ -f "$POLICY_FILE" ]; then
|
||||
monitor_args+=(--policies "$POLICY_FILE")
|
||||
fi
|
||||
rm -f "$PID_FILE"
|
||||
printf 'Stopped fgAI syslog listener\n'
|
||||
|
||||
nohup "$VENV_DIR/bin/fgai" "${monitor_args[@]}" > "$MONITOR_LOG" 2>&1 &
|
||||
printf '%s\n' "$!" > "$MONITOR_PID_FILE"
|
||||
printf 'Started fgAI monitor, pid %s\n' "$(cat "$MONITOR_PID_FILE")"
|
||||
printf 'Status file: %s\n' "$STATE_FILE"
|
||||
}
|
||||
|
||||
status_listener() {
|
||||
if is_running; then
|
||||
printf 'fgAI syslog listener running, pid %s\n' "$(cat "$PID_FILE")"
|
||||
start_dashboard() {
|
||||
install_deps
|
||||
mkdir -p "$(dirname "$DASHBOARD_LOG")" "$(dirname "$DASHBOARD_PID_FILE")"
|
||||
|
||||
if is_pid_running "$DASHBOARD_PID_FILE"; then
|
||||
printf 'fgAI dashboard already running, pid %s\n' "$(cat "$DASHBOARD_PID_FILE")"
|
||||
return 0
|
||||
fi
|
||||
|
||||
nohup "$VENV_DIR/bin/fgai" dashboard \
|
||||
--host "$DASHBOARD_HOST" \
|
||||
--port "$DASHBOARD_PORT" \
|
||||
--status-file "$STATE_FILE" \
|
||||
--image-dir "$ROOT_DIR/images" > "$DASHBOARD_LOG" 2>&1 &
|
||||
printf '%s\n' "$!" > "$DASHBOARD_PID_FILE"
|
||||
printf 'Started fgAI dashboard, pid %s\n' "$(cat "$DASHBOARD_PID_FILE")"
|
||||
printf 'Dashboard: http://%s:%s\n' "$DASHBOARD_HOST" "$DASHBOARD_PORT"
|
||||
}
|
||||
|
||||
start_all() {
|
||||
start_listener
|
||||
start_monitor
|
||||
start_dashboard
|
||||
}
|
||||
|
||||
stop_pid() {
|
||||
label="$1"
|
||||
pid_file="$2"
|
||||
if ! is_pid_running "$pid_file"; then
|
||||
printf '%s is not running\n' "$label"
|
||||
rm -f "$pid_file"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! kill "$(cat "$pid_file")" 2>/dev/null; then
|
||||
sudo kill "$(cat "$pid_file")"
|
||||
fi
|
||||
rm -f "$pid_file"
|
||||
printf 'Stopped %s\n' "$label"
|
||||
}
|
||||
|
||||
stop_all() {
|
||||
stop_pid "fgAI dashboard" "$DASHBOARD_PID_FILE"
|
||||
stop_pid "fgAI monitor" "$MONITOR_PID_FILE"
|
||||
stop_pid "fgAI syslog listener" "$LISTENER_PID_FILE"
|
||||
}
|
||||
|
||||
status_one() {
|
||||
label="$1"
|
||||
pid_file="$2"
|
||||
if is_pid_running "$pid_file"; then
|
||||
printf '%s running, pid %s\n' "$label" "$(cat "$pid_file")"
|
||||
return 0
|
||||
fi
|
||||
printf '%s is not running\n' "$label"
|
||||
return 1
|
||||
}
|
||||
|
||||
status_all() {
|
||||
status_one "fgAI syslog listener" "$LISTENER_PID_FILE" || true
|
||||
if is_pid_running "$LISTENER_PID_FILE"; then
|
||||
printf 'Input: udp://%s:%s\n' "$HOST" "$PORT"
|
||||
printf 'Syslog file: %s\n' "$LOG_FILE"
|
||||
if command -v ss >/dev/null 2>&1; then
|
||||
ss -lunp 2>/dev/null | awk -v port=":$PORT" '$0 ~ port {print}'
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
|
||||
printf 'fgAI syslog listener is not running\n'
|
||||
return 1
|
||||
status_one "fgAI monitor" "$MONITOR_PID_FILE" || true
|
||||
status_one "fgAI dashboard" "$DASHBOARD_PID_FILE" || true
|
||||
printf 'Dashboard: http://%s:%s\n' "$DASHBOARD_HOST" "$DASHBOARD_PORT"
|
||||
printf 'Status file: %s\n' "$STATE_FILE"
|
||||
}
|
||||
|
||||
command="${1:-start}"
|
||||
case "$command" in
|
||||
start)
|
||||
start_listener
|
||||
start_all
|
||||
;;
|
||||
stop)
|
||||
stop_listener
|
||||
stop_all
|
||||
;;
|
||||
restart)
|
||||
stop_listener
|
||||
start_listener
|
||||
stop_all
|
||||
start_all
|
||||
;;
|
||||
status)
|
||||
status_listener
|
||||
status_all
|
||||
;;
|
||||
tail)
|
||||
mkdir -p "$(dirname "$LOG_FILE")"
|
||||
|
||||
Reference in New Issue
Block a user