Files
joelhooks__joelclaw/scripts/snapshot-panda-system-log.sh
shitratgit[bot] 0719010a84 fix(nas): route docs and books through current storage placement
Move NAS placement behind shared configuration, update docs paths, and remove stale storage defaults.

Focused tests, CLI/docs-api typechecks, and changed-file Biome checks pass. CI failures are pre-existing workflow package-manager duplication and an unrelated Vercel ADR auth failure.

SR 🐀
2026-09-11 20:52:12 +00:00

56 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
NAS_BACKUPS_ROOT="${JOELCLAW_NAS_BACKUPS_HDD_ROOT:-/Volumes/backups/services/joelclaw}"
ARCHIVE_ROOT="${SYSTEM_LOG_ARCHIVE_ROOT:-${NAS_BACKUPS_ROOT}/slog/archive}"
SOURCE="panda:~/Vault/system/system-log.jsonl"
STAMP="$(date -u +%Y%m%dT%H%M%SZ)"
SNAPSHOT="${ARCHIVE_ROOT}/system-log-panda-${STAMP}.jsonl"
RECEIPT="${SNAPSHOT}.receipt.json"
TMP="$(mktemp -t panda-system-log.XXXXXX)"
trap 'rm -f "$TMP" "${SNAPSHOT}.partial" "${RECEIPT}.partial"' EXIT
if [[ ! -d "$NAS_ROOT" ]]; then
echo "NAS root is unavailable: $NAS_ROOT" >&2
exit 1
fi
mkdir -p "$ARCHIVE_ROOT"
if [[ -e "$SNAPSHOT" || -e "$RECEIPT" || -e "${SNAPSHOT}.partial" || -e "${RECEIPT}.partial" ]]; then
echo "Refusing to overwrite an existing snapshot or receipt for $STAMP" >&2
exit 1
fi
scp "$SOURCE" "$TMP"
if [[ ! -s "$TMP" ]]; then
echo "Panda system log copy is empty; refusing to archive" >&2
exit 1
fi
DOC_COUNT="$(wc -l < "$TMP" | tr -d ' ')"
SOURCE_BYTES="$(wc -c < "$TMP" | tr -d ' ')"
SOURCE_SHA256="$(shasum -a 256 "$TMP" | awk '{print $1}')"
install -m 600 "$TMP" "${SNAPSHOT}.partial"
mv "${SNAPSHOT}.partial" "$SNAPSHOT"
BYTES="$(wc -c < "$SNAPSHOT" | tr -d ' ')"
SHA256="$(shasum -a 256 "$SNAPSHOT" | awk '{print $1}')"
if [[ "$SHA256" != "$SOURCE_SHA256" || "$BYTES" != "$SOURCE_BYTES" ]]; then
echo "NAS snapshot verification failed" >&2
exit 1
fi
cat > "${RECEIPT}.partial" <<EOF
{
"ok": true,
"source": "panda:~/Vault/system/system-log.jsonl",
"snapshotPath": "${SNAPSHOT}",
"archivedAt": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"lineCount": ${DOC_COUNT},
"bytes": ${BYTES},
"sha256": "${SHA256}"
}
EOF
chmod 600 "${RECEIPT}.partial"
mv "${RECEIPT}.partial" "$RECEIPT"
printf 'Snapshot: %s\nReceipt: %s\nSHA-256: %s\nLines: %s\n' "$SNAPSHOT" "$RECEIPT" "$SHA256" "$DOC_COUNT"