lesavka/scripts/manual/client_rct_uvc_frame_meta_fetch.sh

57 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# scripts/manual/client_rct_uvc_frame_meta_fetch.sh
# Manual: optional UVC spool metadata fetch for client-to-RCT lab probes.
# Not part of CI; requires SSH access to a live server artifact.
# Fetches optional server-side UVC spool timing for client-to-RCT probes.
set -euo pipefail
if [[ "$#" -ne 9 ]]; then
echo "usage: $0 SERVER_HOST REMOTE_LOG REQUIRED LOCAL_JSONL SUMMARY_JSON SUMMARY_TXT TIMELINE_JSON MODE_FPS REPO_ROOT" >&2
exit 2
fi
server_host=$1
remote_log=$2
required=$3
local_jsonl=$4
summary_json=$5
summary_txt=$6
timeline_json=$7
mode_fps=$8
repo_root=$9
ssh_opts=${SSH_OPTS:-"-o BatchMode=yes -o ConnectTimeout=5"}
if [[ -z "${remote_log}" ]]; then
echo "==> UVC frame metadata log fetch disabled"
echo " ↪ set LESAVKA_CLIENT_RCT_UVC_FRAME_META_LOG_REMOTE to fetch and summarize server-side spool timing"
exit 0
fi
echo "==> fetching optional UVC frame metadata log from ${server_host}:${remote_log}"
if ! scp ${ssh_opts} "${server_host}:${remote_log}" "${local_jsonl}"; then
if [[ "${required}" == "1" ]]; then
echo "required UVC frame metadata log was unavailable" >&2
exit 91
fi
echo " ↪ optional UVC frame metadata log unavailable; continuing without spool-boundary summary"
exit 0
fi
summarize_args=(
"${local_jsonl}"
"${summary_json}"
"${summary_txt}"
--timeline "${timeline_json}"
)
if [[ "${mode_fps}" != "0" ]]; then
summarize_args+=(--fps "${mode_fps}")
fi
if ! python3 "${repo_root}/scripts/manual/summarize_uvc_frame_meta_log.py" "${summarize_args[@]}"; then
if [[ "${required}" == "1" ]]; then
echo "required UVC frame metadata log could not be summarized" >&2
exit 92
fi
echo " ↪ optional UVC frame metadata log could not be summarized; continuing without spool-boundary summary"
fi