137 lines
3.2 KiB
Bash
Executable File
137 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -u
|
|
set -o pipefail
|
|
|
|
repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
remote_source="boll@175.178.116.187:/home/boll/LMJWork/OmniSocketGo/peer-b-latency.jsonl"
|
|
local_peer_a="$repo_dir/peer-a-latency.jsonl"
|
|
local_peer_b="$repo_dir/peer-b-latency.jsonl"
|
|
summary_output="$repo_dir/latency-summary.jsonl"
|
|
chart_output="$repo_dir/latency-summary.html"
|
|
latency_binary="$repo_dir/bin/latencysummary"
|
|
go_cache_dir="${GOCACHE:-/tmp/omnisocketgo-go-build}"
|
|
poll_interval_seconds=1
|
|
|
|
remote_tmp=""
|
|
summary_tmp=""
|
|
chart_tmp=""
|
|
|
|
log() {
|
|
printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*"
|
|
}
|
|
|
|
cleanup_temp_file() {
|
|
local path="$1"
|
|
if [[ -n "$path" && -e "$path" ]]; then
|
|
rm -f "$path"
|
|
fi
|
|
}
|
|
|
|
cleanup() {
|
|
cleanup_temp_file "$remote_tmp"
|
|
cleanup_temp_file "$summary_tmp"
|
|
cleanup_temp_file "$chart_tmp"
|
|
}
|
|
|
|
handle_interrupt() {
|
|
log "received interrupt signal, stopping refresh loop"
|
|
cleanup
|
|
exit 130
|
|
}
|
|
|
|
handle_terminate() {
|
|
log "received terminate signal, stopping refresh loop"
|
|
cleanup
|
|
exit 143
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
trap handle_interrupt INT
|
|
trap handle_terminate TERM
|
|
|
|
cd "$repo_dir" || exit 1
|
|
|
|
mkdir -p "$repo_dir/bin"
|
|
mkdir -p "$go_cache_dir"
|
|
if ! GOCACHE="$go_cache_dir" go build -o "$latency_binary" ./cmd/latencysummary; then
|
|
log "build failed; exiting"
|
|
exit 1
|
|
fi
|
|
|
|
log "starting 1-second refresh loop"
|
|
|
|
while true; do
|
|
remote_tmp="$(mktemp "$repo_dir/peer-b-latency.jsonl.tmp.XXXXXX")" || exit 1
|
|
if scp -P 10022 "$remote_source" "$remote_tmp"; then
|
|
if mv -f "$remote_tmp" "$local_peer_b"; then
|
|
remote_tmp=""
|
|
else
|
|
status=$?
|
|
log "failed to replace $(basename "$local_peer_b") after scp (exit $status)"
|
|
cleanup_temp_file "$remote_tmp"
|
|
remote_tmp=""
|
|
sleep "$poll_interval_seconds"
|
|
continue
|
|
fi
|
|
else
|
|
status=$?
|
|
log "scp refresh failed (exit $status)"
|
|
cleanup_temp_file "$remote_tmp"
|
|
remote_tmp=""
|
|
sleep "$poll_interval_seconds"
|
|
continue
|
|
fi
|
|
|
|
summary_tmp="$(mktemp "$repo_dir/latency-summary.tmp.XXXXXX.jsonl")" || exit 1
|
|
chart_tmp="${summary_tmp%.jsonl}.html"
|
|
if "$latency_binary" \
|
|
-input "$local_peer_a" \
|
|
-input "$local_peer_b" \
|
|
-shared-max-offset 1 \
|
|
-output "$summary_tmp"; then
|
|
if [[ ! -f "$summary_tmp" || ! -f "$chart_tmp" ]]; then
|
|
log "summary succeeded but temporary outputs are incomplete"
|
|
cleanup_temp_file "$summary_tmp"
|
|
cleanup_temp_file "$chart_tmp"
|
|
summary_tmp=""
|
|
chart_tmp=""
|
|
sleep "$poll_interval_seconds"
|
|
continue
|
|
fi
|
|
|
|
if ! mv -f "$summary_tmp" "$summary_output"; then
|
|
status=$?
|
|
log "failed to replace $(basename "$summary_output") (exit $status)"
|
|
cleanup_temp_file "$summary_tmp"
|
|
cleanup_temp_file "$chart_tmp"
|
|
summary_tmp=""
|
|
chart_tmp=""
|
|
sleep "$poll_interval_seconds"
|
|
continue
|
|
fi
|
|
summary_tmp=""
|
|
|
|
if ! mv -f "$chart_tmp" "$chart_output"; then
|
|
status=$?
|
|
log "failed to replace $(basename "$chart_output") (exit $status)"
|
|
cleanup_temp_file "$chart_tmp"
|
|
chart_tmp=""
|
|
sleep "$poll_interval_seconds"
|
|
continue
|
|
fi
|
|
chart_tmp=""
|
|
else
|
|
status=$?
|
|
log "latency summary refresh failed (exit $status)"
|
|
cleanup_temp_file "$summary_tmp"
|
|
cleanup_temp_file "$chart_tmp"
|
|
summary_tmp=""
|
|
chart_tmp=""
|
|
sleep "$poll_interval_seconds"
|
|
continue
|
|
fi
|
|
|
|
sleep "$poll_interval_seconds"
|
|
done
|