Merge pull request 'fix: escape runtime vars in unquoted heredoc, eliminate sed dependency' (#48) from feat/push-monitoring-agent-v2 into master

Reviewed-on: #48
This commit was merged in pull request #48.
This commit is contained in:
2026-06-11 20:34:06 -04:00

View File

@@ -41,70 +41,62 @@ echo "[1/3] Creating directory..."
mkdir -p "$(dirname "$AGENT_BIN")" mkdir -p "$(dirname "$AGENT_BIN")"
echo "[2/3] Installing agent binary..." echo "[2/3] Installing agent binary..."
cat > "$AGENT_BIN" << 'AGENTSCRIPT' cat > "$AGENT_BIN" << EOF
#!/bin/bash #!/bin/bash
SERVER_URL="@SERVER_URL@" SERVER_URL="$SERVER_URL"
AGENT_KEY="@AGENT_KEY@" AGENT_KEY="$AGENT_KEY"
INTERVAL=@INTERVAL@ INTERVAL=$INTERVAL
collect_metrics() { collect_metrics() {
CPU=$(top -bn1 2>/dev/null | grep 'Cpu(s)' | awk '{print $2}' | cut -d'%' -f1 || true) CPU=\$(top -bn1 2>/dev/null | grep 'Cpu(s)' | awk '{print \$2}' | cut -d'%' -f1 || true)
[ -z "$CPU" ] && CPU=0 [ -z "\$CPU" ] && CPU=0
RAM=$(free 2>/dev/null | grep Mem | awk '{printf "%.1f", $3/$2 * 100}' || true) RAM=\$(free 2>/dev/null | grep Mem | awk '{printf "%.1f", \$3/\$2 * 100}' || true)
[ -z "$RAM" ] && RAM=0 [ -z "\$RAM" ] && RAM=0
DISK=$(df / 2>/dev/null | tail -1 | awk '{print $5}' | sed 's/%//' || true) DISK=\$(df / 2>/dev/null | tail -1 | awk '{print \$5}' | sed 's/%//' || true)
[ -z "$DISK" ] && DISK=0 [ -z "\$DISK" ] && DISK=0
LOAD=$(cat /proc/loadavg 2>/dev/null | awk '{print $1}' || true) LOAD=\$(cat /proc/loadavg 2>/dev/null | awk '{print \$1}' || true)
[ -z "$LOAD" ] && LOAD=0 [ -z "\$LOAD" ] && LOAD=0
UPTIME=$(uptime -p 2>/dev/null | sed 's/^up //' || true) UPTIME=\$(uptime -p 2>/dev/null | sed 's/^up //' || true)
[ -z "$UPTIME" ] && UPTIME="" [ -z "\$UPTIME" ] && UPTIME=""
} }
push_metrics() { push_metrics() {
payload=$(cat <<EOF payload=\$(cat << 'PAYLOAD'
{ {
"agent_key": "$AGENT_KEY", "agent_key": "\$AGENT_KEY",
"cpu": $CPU, "cpu": \$CPU,
"ram": $RAM, "ram": \$RAM,
"disk": $DISK, "disk": \$DISK,
"load": $LOAD, "load": \$LOAD,
"uptime": "$UPTIME" "uptime": "\$UPTIME"
} }
EOF PAYLOAD
) )
local code local code
code=$(curl -s -X POST "$SERVER_URL/api/metrics/push" \ code=\$(curl -s -X POST "$SERVER_URL/api/metrics/push" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d "$payload" \ -d "\$payload" \
--connect-timeout 10 --max-time 30 \ --connect-timeout 10 --max-time 30 \
-o /dev/null -w "%{http_code}" 2>/dev/null) || code=0 -o /dev/null -w "%{http_code}" 2>/dev/null) || code=0
echo "$code" echo "\$code"
} }
echo "ServerManager Agent started" echo "ServerManager Agent started"
echo " Server: $SERVER_URL/api/metrics/push" echo " Server: $SERVER_URL/api/metrics/push"
echo " Interval: ${INTERVAL}s" echo " Interval: \${INTERVAL}s"
echo " Host: $(hostname)" echo " Host: \$(hostname)"
sleep 2 sleep 2
while true; do 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"
if [ "$http_code" = "200" ]; then if [ "\$http_code" = "0" ]; then
true
elif [ "$http_code" = "0" ]; then
echo " curl failed — check SERVER_URL=$SERVER_URL" echo " curl failed — check SERVER_URL=$SERVER_URL"
fi fi
sleep "$INTERVAL" sleep "\$INTERVAL"
done done
AGENTSCRIPT EOF
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"