Merge pull request 'fix: embed config directly in agent script, remove external config file' (#45) from feat/push-monitoring-agent-v2 into master

Reviewed-on: #45
This commit was merged in pull request #45.
This commit is contained in:
2026-06-11 19:45:30 -04:00

View File

@@ -11,7 +11,7 @@ if [ -z "$SERVER_URL" ] || [ -z "$AGENT_KEY" ]; then
exit 1 exit 1
fi fi
# Detect if we can run as root (try non-interactive sudo) # Detect if we can run as root
CAN_ROOT=false CAN_ROOT=false
if [ "$(id -u)" -eq 0 ]; then if [ "$(id -u)" -eq 0 ]; then
CAN_ROOT=true CAN_ROOT=true
@@ -20,9 +20,7 @@ elif command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; then
fi fi
if [ "$CAN_ROOT" = true ]; then if [ "$CAN_ROOT" = true ]; then
# ── Root/system mode ──
if [ "$(id -u)" -ne 0 ]; then if [ "$(id -u)" -ne 0 ]; then
# Re-exec with script PTY if available (handles requiretty)
if command -v script >/dev/null 2>&1; then if command -v script >/dev/null 2>&1; then
exec script -q -c "sudo bash '$0' '$1' '$2' '$3'" /dev/null exec script -q -c "sudo bash '$0' '$1' '$2' '$3'" /dev/null
fi fi
@@ -30,46 +28,26 @@ if [ "$CAN_ROOT" = true ]; then
fi fi
AGENT_BIN="/usr/local/bin/servermanager-agent" AGENT_BIN="/usr/local/bin/servermanager-agent"
CONFIG_DIR="/etc/servermanager"
CONFIG_FILE="$CONFIG_DIR/agent.conf"
SERVICE_FILE="/etc/systemd/system/servermanager-agent.service" SERVICE_FILE="/etc/systemd/system/servermanager-agent.service"
USE_SYSTEMD=true USE_SYSTEMD=true
INSTALL_MODE="system" INSTALL_MODE="system"
else else
# ── User/no-root mode ──
AGENT_BIN="$HOME/.local/bin/servermanager-agent" AGENT_BIN="$HOME/.local/bin/servermanager-agent"
CONFIG_DIR="$HOME/.config/servermanager"
CONFIG_FILE="$CONFIG_DIR/agent.conf"
USE_SYSTEMD=false USE_SYSTEMD=false
INSTALL_MODE="user" INSTALL_MODE="user"
fi fi
echo "[1/4] Creating directories..." echo "[1/3] Creating directory..."
mkdir -p "$(dirname "$AGENT_BIN")" mkdir -p "$(dirname "$AGENT_BIN")"
mkdir -p "$CONFIG_DIR"
echo "[2/4] Installing agent binary..." echo "[2/3] Installing agent binary..."
cat > "$AGENT_BIN" << 'AGENTSCRIPT' cat > "$AGENT_BIN" << 'AGENTSCRIPT'
#!/bin/bash #!/bin/bash
set -e set -e
# Config search order: 1st arg > /etc/servermanager/agent.conf > $HOME/.config/servermanager/agent.conf SERVER_URL="@SERVER_URL@"
if [ -n "$1" ] && [ -f "$1" ]; then AGENT_KEY="@AGENT_KEY@"
CONFIG_FILE="$1" INTERVAL=@INTERVAL@
elif [ -f "/etc/servermanager/agent.conf" ]; then
CONFIG_FILE="/etc/servermanager/agent.conf"
else
CONFIG_FILE="$HOME/.config/servermanager/agent.conf"
fi
load_config() {
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
fi
SERVER_URL="${SERVER_URL:-}"
AGENT_KEY="${AGENT_KEY:-}"
INTERVAL="${INTERVAL:-60}"
}
collect_metrics() { collect_metrics() {
CPU=$(top -bn1 2>/dev/null | grep 'Cpu(s)' | awk '{print $2}' | cut -d'%' -f1) CPU=$(top -bn1 2>/dev/null | grep 'Cpu(s)' | awk '{print $2}' | cut -d'%' -f1)
@@ -103,24 +81,22 @@ EOF
-o /dev/null -w "%{http_code}" 2>/dev/null || echo "000" -o /dev/null -w "%{http_code}" 2>/dev/null || echo "000"
} }
run() { echo "ServerManager Agent started (interval: ${INTERVAL}s)"
load_config sleep 2
if [ -z "$SERVER_URL" ] || [ -z "$AGENT_KEY" ]; then while true; do
echo "ERROR: SERVER_URL and AGENT_KEY not configured"
exit 1
fi
echo "ServerManager Agent started (interval: ${INTERVAL}s)"
sleep 2
while true; do
collect_metrics collect_metrics
http_code=$(push_metrics) http_code=$(push_metrics)
echo "[$(date)] HTTP $http_code" echo "[$(date)] HTTP $http_code"
sleep "$INTERVAL" sleep "$INTERVAL"
done done
}
run
AGENTSCRIPT AGENTSCRIPT
sed -i \
"s|@SERVER_URL@|$SERVER_URL|g" \
-e "s|@AGENT_KEY@|$AGENT_KEY|g" \
-e "s|@INTERVAL@|$INTERVAL|g" \
"$AGENT_BIN"
chmod +x "$AGENT_BIN" chmod +x "$AGENT_BIN"
if [ ! -f "$AGENT_BIN" ]; then if [ ! -f "$AGENT_BIN" ]; then
@@ -129,15 +105,7 @@ if [ ! -f "$AGENT_BIN" ]; then
fi fi
echo " Binary: $AGENT_BIN ($(wc -c < "$AGENT_BIN") bytes)" echo " Binary: $AGENT_BIN ($(wc -c < "$AGENT_BIN") bytes)"
echo "[3/4] Writing config..." echo "[3/3] Enabling auto-start..."
cat > "$CONFIG_FILE" << EOF
SERVER_URL="$SERVER_URL"
AGENT_KEY="$AGENT_KEY"
INTERVAL=$INTERVAL
EOF
chmod 600 "$CONFIG_FILE"
echo "[4/4] Enabling auto-start..."
if [ "$USE_SYSTEMD" = true ]; then if [ "$USE_SYSTEMD" = true ]; then
echo " Using systemd service..." echo " Using systemd service..."
@@ -148,7 +116,7 @@ After=network-online.target
Wants=network-online.target Wants=network-online.target
[Service] [Service]
Type=simple Type=simple
ExecStart=/usr/local/bin/servermanager-agent /etc/servermanager/agent.conf ExecStart=/usr/local/bin/servermanager-agent
Restart=always Restart=always
RestartSec=10 RestartSec=10
[Install] [Install]
@@ -159,9 +127,11 @@ UNIT
systemctl restart servermanager-agent 2>/dev/null || true systemctl restart servermanager-agent 2>/dev/null || true
else else
echo " Using crontab (@reboot)..." echo " Using crontab (@reboot)..."
CRON_JOB="@reboot $AGENT_BIN $CONFIG_FILE > $CONFIG_DIR/agent.log 2>&1" LOG_DIR="$HOME/.local/share/servermanager"
(crontab -l 2>/dev/null | grep -v '_sm_agent\|servermanager-agent'; echo "$CRON_JOB") | crontab - 2>/dev/null || { mkdir -p "$LOG_DIR"
echo "WARNING: Could not install crontab. Agent must be started manually." CRON_JOB="@reboot $AGENT_BIN > $LOG_DIR/agent.log 2>&1"
(crontab -l 2>/dev/null | grep -v 'servermanager-agent'; echo "$CRON_JOB") | crontab - 2>/dev/null || {
echo "WARNING: Could not install crontab."
echo " Run: $AGENT_BIN &" echo " Run: $AGENT_BIN &"
} }
fi fi
@@ -170,4 +140,4 @@ echo ""
echo "ServerManager Agent installed successfully!" echo "ServerManager Agent installed successfully!"
echo " Mode: $INSTALL_MODE" echo " Mode: $INSTALL_MODE"
echo " Binary: $AGENT_BIN" echo " Binary: $AGENT_BIN"
echo " Config: $CONFIG_FILE" echo " Config: embedded in binary (no external config file)"