- Collect available stats from status.json (flows_active, flow_count, cpu, memory, interface stats) instead of expecting individual flows - Save current stats to /tmp/netifyd-stats.json - Maintain history in /tmp/netifyd-stats-history.json (up to 24h) - Fix architecture detection in plugin-setup script Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
64 lines
1.9 KiB
Bash
64 lines
1.9 KiB
Bash
#!/bin/sh
|
|
# Netifyd Stats Collector
|
|
# Collects network statistics from netifyd status.json
|
|
# Note: netifyd 5.x doesn't export individual flows locally
|
|
|
|
NETIFYD_STATUS="/var/run/netifyd/status.json"
|
|
STATS_CACHE="/tmp/netifyd-stats-history.json"
|
|
STATS_CURRENT="/tmp/netifyd-stats.json"
|
|
MAX_ENTRIES=1440 # 24 hours at 1 min intervals
|
|
|
|
# Check if netifyd is running
|
|
if ! pidof netifyd >/dev/null 2>&1; then
|
|
exit 1
|
|
fi
|
|
|
|
# Check if status file exists
|
|
if [ ! -f "$NETIFYD_STATUS" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Get current timestamp
|
|
TIMESTAMP=$(date +%s)
|
|
|
|
# Extract current stats from netifyd
|
|
if command -v jq >/dev/null 2>&1; then
|
|
# Build current stats snapshot
|
|
CURRENT=$(jq -c --arg ts "$TIMESTAMP" '{
|
|
timestamp: ($ts | tonumber),
|
|
flows_active: (.flows_active // 0),
|
|
flow_count: (.flow_count // 0),
|
|
uptime: (.uptime // 0),
|
|
cpu_system: (.cpu_system // 0),
|
|
cpu_user: (.cpu_user // 0),
|
|
memrss_kb: (.memrss_kb // 0),
|
|
interfaces: (if .stats then
|
|
[.stats | to_entries[] | {
|
|
name: .key,
|
|
rx_bytes: (.value.ip_bytes // 0),
|
|
tx_bytes: (.value.wire_bytes // 0),
|
|
tcp: (.value.tcp // 0),
|
|
udp: (.value.udp // 0)
|
|
}]
|
|
else [] end)
|
|
}' "$NETIFYD_STATUS" 2>/dev/null)
|
|
|
|
if [ -n "$CURRENT" ] && [ "$CURRENT" != "null" ]; then
|
|
# Save current stats
|
|
echo "$CURRENT" > "$STATS_CURRENT"
|
|
|
|
# Append to history
|
|
if [ -f "$STATS_CACHE" ]; then
|
|
# Add new entry and trim to max
|
|
jq -c --argjson new "$CURRENT" '. + [$new] | if length > '"$MAX_ENTRIES"' then .[-('"$MAX_ENTRIES"'):] else . end' "$STATS_CACHE" > "$STATS_CACHE.tmp" 2>/dev/null && mv "$STATS_CACHE.tmp" "$STATS_CACHE"
|
|
else
|
|
echo "[$CURRENT]" > "$STATS_CACHE"
|
|
fi
|
|
fi
|
|
else
|
|
# Fallback without jq - just copy status
|
|
cp "$NETIFYD_STATUS" "$STATS_CURRENT"
|
|
fi
|
|
|
|
exit 0
|