Files
zabbix-rustdesk-server/rustdesk-monitor.sh
T
2026-09-27 13:36:36 +00:00

133 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
DB="/opt/docker-composes/rustdesk/data/db_v2.sqlite3"
HBBR="hbbr"
PORT="21117"
case "$1" in
peers)
sqlite3 "$DB" "SELECT COUNT(*) FROM peer;"
;;
peer_ip)
ID="$2"
sqlite3 -noheader "$DB" \
"SELECT json_extract(info, '\$.ip') FROM peer WHERE id='$ID';" |
sed 's/^::ffff://'
;;
discovery)
sqlite3 -separator '|' -noheader "$DB" \
"SELECT id, json_extract(info, '$.ip')
FROM peer
ORDER BY created_at DESC;" |
while IFS='|' read -r id ip; do
ip="${ip#::ffff:}"
printf '%s|%s\n' "$id" "$ip"
done |
jq -R -s '
split("\n")
| map(select(length > 0))
| map(split("|"))
| map({
"{#RD_ID}": .[0],
"{#RD_IP}": .[1]
})
'
;;
connections)
PID="$(docker inspect -f '{{.State.Pid}}' "$HBBR" 2>/dev/null)" || exit 1
if [ -z "$PID" ] || [ "$PID" = "0" ]; then
echo "0"
exit 0
fi
nsenter -t "$PID" -n \
ss -H -tn state established '( sport = :21117 )' 2>/dev/null |
wc -l
;;
sessions)
PID="$(docker inspect -f '{{.State.Pid}}' "$HBBR" 2>/dev/null)" || exit 1
if [ -z "$PID" ] || [ "$PID" = "0" ]; then
echo "0"
exit 0
fi
CONNECTIONS="$(
nsenter -t "$PID" -n \
ss -H -tn state established '( sport = :21117 )' 2>/dev/null |
wc -l
)"
echo $((CONNECTIONS / 2))
;;
relay_ips)
nsenter -t "$(docker inspect -f '{{.State.Pid}}' "$HBBR")" -n \
ss -H -tn state established '( sport = :21117 )' |
awk '{print $4}' |
sed -E 's/^\[::ffff:([^]]+)\]:[0-9]+$/\1/' |
sort -u
;;
relay_json)
nsenter -t "$(docker inspect -f '{{.State.Pid}}' "$HBBR")" -n \
ss -H -tn state established '( sport = :21117 )' |
awk '{print $5}' |
sed -E \
-e 's/^\[::ffff://g' \
-e 's/\]:[0-9]+$//g' |
sort -u |
jq -R -s '
split("\n")
| map(select(length > 0))
| {
connections: length,
ips: .
}
'
;;
json)
peers=$(sqlite3 "$DB" "SELECT COUNT(*) FROM peer;")
connections=$(
nsenter -t "$(docker inspect -f '{{.State.Pid}}' "$HBBR")" -n \
ss -H -tn state established '( sport = :21117 )' |
wc -l
)
sessions=$((connections / 2))
jq -n \
--argjson peers "$peers" \
--argjson connections "$connections" \
--argjson sessions "$sessions" \
'{
peers: $peers,
relay_connections: $connections,
relay_sessions: $sessions
}'
;;
*)
echo "Usage:"
echo " $0 peers"
echo " $0 peer_ip <RUSTDESK_ID>"
echo " $0 discovery"
echo " $0 connections"
echo " $0 sessions"
echo " $0 relay_ips"
echo " $0 relay_json"
echo " $0 json"
exit 1
;;
esac