fix(dashboard): Fix empty recent_visitors due to subshell issue
- Pipe | while runs in subshell, json_add calls don't affect parent - Use temp files to avoid subshell: write data to file, then read - Fixed https_visitors, top_endpoints, recent_visitors arrays - All arrays now properly populated with visitor data Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
c731058b01
commit
e3d7873d7b
@ -86,29 +86,31 @@ _do_active_sessions() {
|
|||||||
json_add_int "ssh" "${ssh_sessions:-0}"
|
json_add_int "ssh" "${ssh_sessions:-0}"
|
||||||
json_close_object
|
json_close_object
|
||||||
|
|
||||||
# External visitor IPs on HTTPS
|
# HTTPS visitors - use temp file to avoid subshell issue with pipe | while
|
||||||
json_add_array "https_visitors"
|
json_add_array "https_visitors"
|
||||||
netstat -tn 2>/dev/null | grep ":443.*ESTABLISHED" | grep -v "127.0.0.1" | \
|
netstat -tn 2>/dev/null | grep ":443.*ESTABLISHED" | grep -v "127.0.0.1" | \
|
||||||
awk '{print $5}' | cut -d: -f1 | sort -u | head -10 | while read -r ip; do
|
awk '{print $5}' | cut -d: -f1 | sort -u | head -10 > /tmp/https_visitors.tmp
|
||||||
|
while read -r ip; do
|
||||||
[ -n "$ip" ] && json_add_string "" "$ip"
|
[ -n "$ip" ] && json_add_string "" "$ip"
|
||||||
done
|
done < /tmp/https_visitors.tmp
|
||||||
|
rm -f /tmp/https_visitors.tmp
|
||||||
json_close_array
|
json_close_array
|
||||||
|
|
||||||
# Top accessed endpoints (from mitmproxy log)
|
# Top accessed endpoints (from mitmproxy log)
|
||||||
json_add_array "top_endpoints"
|
json_add_array "top_endpoints"
|
||||||
if [ -f "/srv/mitmproxy/threats.log" ]; then
|
if [ -f "/srv/mitmproxy/threats.log" ]; then
|
||||||
tail -200 /srv/mitmproxy/threats.log 2>/dev/null | \
|
tail -200 /srv/mitmproxy/threats.log 2>/dev/null | \
|
||||||
jq -r '.request' 2>/dev/null | cut -d' ' -f2 | cut -d'?' -f1 | \
|
jq -r '.request // empty' 2>/dev/null | cut -d' ' -f2 | cut -d'?' -f1 | \
|
||||||
sort | uniq -c | sort -rn | head -8 | \
|
sort | uniq -c | sort -rn | head -8 > /tmp/top_endpoints.tmp
|
||||||
awk '{print "{\"path\":\"" $2 "\",\"count\":" $1 "}"}' | while read -r line; do
|
while read -r count path; do
|
||||||
# Parse and add as object
|
[ -n "$path" ] && {
|
||||||
local path=$(echo "$line" | jq -r '.path' 2>/dev/null)
|
json_add_object ""
|
||||||
local count=$(echo "$line" | jq -r '.count' 2>/dev/null)
|
json_add_string "path" "$path"
|
||||||
json_add_object ""
|
json_add_int "count" "${count:-0}"
|
||||||
json_add_string "path" "$path"
|
json_close_object
|
||||||
json_add_int "count" "$count"
|
}
|
||||||
json_close_object
|
done < /tmp/top_endpoints.tmp
|
||||||
done
|
rm -f /tmp/top_endpoints.tmp
|
||||||
fi
|
fi
|
||||||
json_close_array
|
json_close_array
|
||||||
|
|
||||||
@ -117,14 +119,16 @@ _do_active_sessions() {
|
|||||||
if [ -f "/srv/mitmproxy/threats.log" ]; then
|
if [ -f "/srv/mitmproxy/threats.log" ]; then
|
||||||
tail -100 /srv/mitmproxy/threats.log 2>/dev/null | \
|
tail -100 /srv/mitmproxy/threats.log 2>/dev/null | \
|
||||||
jq -r '[.source_ip, .country] | @tsv' 2>/dev/null | \
|
jq -r '[.source_ip, .country] | @tsv' 2>/dev/null | \
|
||||||
sort -u | head -10 | while read -r ip country; do
|
sort -u | head -10 > /tmp/recent_visitors.tmp
|
||||||
|
while read -r ip country; do
|
||||||
[ -n "$ip" ] && {
|
[ -n "$ip" ] && {
|
||||||
json_add_object ""
|
json_add_object ""
|
||||||
json_add_string "ip" "$ip"
|
json_add_string "ip" "$ip"
|
||||||
json_add_string "country" "${country:-??}"
|
json_add_string "country" "${country:-??}"
|
||||||
json_close_object
|
json_close_object
|
||||||
}
|
}
|
||||||
done
|
done < /tmp/recent_visitors.tmp
|
||||||
|
rm -f /tmp/recent_visitors.tmp
|
||||||
fi
|
fi
|
||||||
json_close_array
|
json_close_array
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user