mirror of
https://github.com/vdsm/virtual-dsm.git
synced 2026-08-29 20:26:57 +00:00
72 lines
1.3 KiB
Bash
72 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
lastmsg=""
|
|
lastcmd=""
|
|
status="/run/shm/msg.html"
|
|
command="/run/shm/status.cmd"
|
|
dir=$(dirname -- "$status")
|
|
status_name=$(basename -- "$status")
|
|
command_name=$(basename -- "$command")
|
|
|
|
# websocketd clients use s: for status updates and c: for control commands.
|
|
refreshStatus() {
|
|
|
|
[ ! -f "$status" ] && return 0
|
|
[ ! -s "$status" ] && return 0
|
|
|
|
msg=$(< "$status") || return 0
|
|
msg="${msg%$'\n'}"
|
|
|
|
[ -z "$msg" ] && return 0
|
|
[[ "$msg" == "$lastmsg" ]] && return 0
|
|
|
|
lastmsg="$msg"
|
|
echo "s: $msg"
|
|
|
|
return 0
|
|
}
|
|
|
|
refreshCommand() {
|
|
|
|
[ ! -f "$command" ] && return 0
|
|
[ ! -s "$command" ] && return 0
|
|
|
|
cmd=$(< "$command") || return 0
|
|
cmd="${cmd%$'\n'}"
|
|
|
|
[ -z "$cmd" ] && return 0
|
|
[[ "$cmd" == "$lastcmd" ]] && return 0
|
|
|
|
lastcmd="$cmd"
|
|
echo "c: $cmd"
|
|
|
|
return 0
|
|
}
|
|
|
|
refreshStatus
|
|
refreshCommand
|
|
|
|
# Watch the directory because status and command updates use atomic rename.
|
|
inotifywait \
|
|
-m -q \
|
|
-e close_write,moved_to \
|
|
--format '%e %f' \
|
|
"$dir" |
|
|
while read -r event file; do
|
|
|
|
case "$file" in
|
|
"$status_name" )
|
|
case "${event,,}" in
|
|
"close_write"* | "moved_to"* )
|
|
refreshStatus ;;
|
|
esac ;;
|
|
"$command_name" )
|
|
case "${event,,}" in
|
|
"close_write"* | "moved_to"* )
|
|
refreshCommand ;;
|
|
esac ;;
|
|
esac
|
|
|
|
done
|