diff --git a/Cargo.lock b/Cargo.lock index c679bb0..8af94f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1642,7 +1642,7 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "lesavka_client" -version = "0.14.27" +version = "0.14.28" dependencies = [ "anyhow", "async-stream", @@ -1676,7 +1676,7 @@ dependencies = [ [[package]] name = "lesavka_common" -version = "0.14.27" +version = "0.14.28" dependencies = [ "anyhow", "base64", @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "lesavka_server" -version = "0.14.27" +version = "0.14.28" dependencies = [ "anyhow", "base64", diff --git a/client/Cargo.toml b/client/Cargo.toml index d02a844..c3af7f3 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -4,7 +4,7 @@ path = "src/main.rs" [package] name = "lesavka_client" -version = "0.14.27" +version = "0.14.28" edition = "2024" [dependencies] diff --git a/common/Cargo.toml b/common/Cargo.toml index 6357b19..eafbf21 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lesavka_common" -version = "0.14.27" +version = "0.14.28" edition = "2024" build = "build.rs" diff --git a/scripts/manual/run_upstream_av_sync.sh b/scripts/manual/run_upstream_av_sync.sh index 9c4acab..766ea23 100755 --- a/scripts/manual/run_upstream_av_sync.sh +++ b/scripts/manual/run_upstream_av_sync.sh @@ -10,6 +10,7 @@ SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" REPO_ROOT="$(cd -- "${SCRIPT_DIR}/../.." >/dev/null 2>&1 && pwd)" TETHYS_HOST=${TETHYS_HOST:-tethys} +LESAVKA_SERVER_HOST=${LESAVKA_SERVER_HOST:-theia} LESAVKA_SERVER_ADDR=${LESAVKA_SERVER_ADDR:-http://38.28.125.112:50051} PROBE_DURATION_SECONDS=${PROBE_DURATION_SECONDS:-10} PROBE_WARMUP_SECONDS=${PROBE_WARMUP_SECONDS:-4} @@ -37,6 +38,9 @@ REMOTE_ANALYZE=${REMOTE_ANALYZE:-1} REMOTE_ANALYZE_BIN=${REMOTE_ANALYZE_BIN:-/tmp/lesavka-sync-analyze} REMOTE_ANALYZE_COPY=${REMOTE_ANALYZE_COPY:-1} FETCH_CAPTURE=${FETCH_CAPTURE:-0} +REMOTE_SERVER_PREFLIGHT=${REMOTE_SERVER_PREFLIGHT:-1} +REMOTE_EXPECT_CAM_OUTPUT=${REMOTE_EXPECT_CAM_OUTPUT:-uvc} +REMOTE_EXPECT_UVC_CODEC=${REMOTE_EXPECT_UVC_CODEC:-mjpeg} mkdir -p "${LOCAL_OUTPUT_DIR}" STAMP="$(date +%Y%m%d-%H%M%S)" @@ -44,6 +48,50 @@ LOCAL_CAPTURE="${LOCAL_OUTPUT_DIR}/lesavka-upstream-av-sync-${STAMP}.mkv" LOCAL_ANALYSIS_JSON="${LOCAL_CAPTURE%.mkv}.json" LOCAL_CAPTURE_LOG="${LOCAL_CAPTURE%.mkv}.capture.log" +preflight_server_path() { + [[ "${REMOTE_SERVER_PREFLIGHT}" != "0" ]] || return 0 + + echo "==> verifying Lesavka server path on ${LESAVKA_SERVER_HOST}" + ssh ${SSH_OPTS} "${LESAVKA_SERVER_HOST}" bash -s -- \ + "${REMOTE_EXPECT_CAM_OUTPUT}" \ + "${REMOTE_EXPECT_UVC_CODEC}" <<'REMOTE_PREFLIGHT' +set -euo pipefail +expect_cam_output=$1 +expect_uvc_codec=$2 + +read_env_value() { + local key=$1 + local file=$2 + local value="" + value=$(grep -E "^${key}=" "$file" 2>/dev/null | tail -n1 | cut -d= -f2- || true) + printf '%s\n' "$value" +} + +cam_output=$(read_env_value "LESAVKA_CAM_OUTPUT" /etc/lesavka/server.env) +server_uvc_codec=$(read_env_value "LESAVKA_UVC_CODEC" /etc/lesavka/server.env) +runtime_uvc_codec=$(read_env_value "LESAVKA_UVC_CODEC" /etc/lesavka/uvc.env) + +printf ' ↪ server.env CAM_OUTPUT=%s\n' "${cam_output:-}" +printf ' ↪ server.env UVC_CODEC=%s\n' "${server_uvc_codec:-}" +printf ' ↪ uvc.env UVC_CODEC=%s\n' "${runtime_uvc_codec:-}" + +if [[ -n "${expect_cam_output}" && "${cam_output}" != "${expect_cam_output}" ]]; then + printf 'expected CAM_OUTPUT=%s but found %s\n' "${expect_cam_output}" "${cam_output:-}" >&2 + exit 64 +fi +if [[ -n "${expect_uvc_codec}" && "${server_uvc_codec}" != "${expect_uvc_codec}" ]]; then + printf 'expected server.env UVC_CODEC=%s but found %s\n' "${expect_uvc_codec}" "${server_uvc_codec:-}" >&2 + exit 65 +fi +if [[ -n "${expect_uvc_codec}" && "${runtime_uvc_codec}" != "${expect_uvc_codec}" ]]; then + printf 'expected uvc.env UVC_CODEC=%s but found %s\n' "${expect_uvc_codec}" "${runtime_uvc_codec:-}" >&2 + exit 66 +fi + +systemctl is-active lesavka-server lesavka-uvc lesavka-core >/dev/null +REMOTE_PREFLIGHT +} + if [[ "${LOCAL_AUDIO_SANITY}" != "0" ]]; then echo "==> verifying local speaker-to-mic sanity before upstream sync run" "${SCRIPT_DIR}/run_local_audio_sanity.sh" @@ -66,6 +114,8 @@ if [[ ! -x "${ANALYZE_BIN}" ]]; then exit 1 fi +preflight_server_path + echo "==> starting Tethys capture on ${TETHYS_HOST}" ssh ${SSH_OPTS} "${TETHYS_HOST}" bash -s -- \ "${REMOTE_CAPTURE}" \ diff --git a/server/Cargo.toml b/server/Cargo.toml index 5cafee2..d2f3abe 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -10,7 +10,7 @@ bench = false [package] name = "lesavka_server" -version = "0.14.27" +version = "0.14.28" edition = "2024" autobins = false