mirror of
https://github.com/Tyrrrz/DiscordChatExporter.git
synced 2026-06-09 15:52:37 -06:00
Pretty-print version-1 scrape summary files with totals table, --oom-only filter, and stdin support for operator validation/proof outputs.
116 lines
2.8 KiB
Bash
Executable file
116 lines
2.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -Eeuo pipefail
|
|
|
|
REPO_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)
|
|
PRINT="$REPO_ROOT/scripts/print-scrape-summary.sh"
|
|
TMP_DIR=$(mktemp -d "${TMPDIR:-/tmp}/dce-print-summary-smoke.XXXXXX")
|
|
trap 'rm -rf "$TMP_DIR"' EXIT
|
|
|
|
FIXTURE="$TMP_DIR/fixture.summary.json"
|
|
cat >"$FIXTURE" <<'JSON'
|
|
{
|
|
"version": 1,
|
|
"finished_at": "2026-06-04T12:00:00Z",
|
|
"totals": {
|
|
"created": 0,
|
|
"merged": 1,
|
|
"unchanged": 1,
|
|
"skipped": 1,
|
|
"skipped_oom": 1,
|
|
"messages_appended": 5
|
|
},
|
|
"channels": [
|
|
{
|
|
"target": "demo",
|
|
"channel_id": "111111111111111111",
|
|
"guild_label": "general",
|
|
"file_path": "/tmp/archive/demo/general.json",
|
|
"action": "MERGED",
|
|
"before_count": 10,
|
|
"fetched_count": 3,
|
|
"after_count": 13,
|
|
"delta": 3
|
|
},
|
|
{
|
|
"target": "demo",
|
|
"channel_id": "222222222222222222",
|
|
"guild_label": "other",
|
|
"file_path": "/tmp/archive/demo/other.json",
|
|
"action": "UNCHANGED",
|
|
"before_count": 5,
|
|
"fetched_count": 0,
|
|
"after_count": 5,
|
|
"delta": 0
|
|
},
|
|
{
|
|
"target": "demo",
|
|
"channel_id": "333333333333333333",
|
|
"guild_label": "big-channel",
|
|
"file_path": "",
|
|
"action": "SKIPPED_OOM",
|
|
"before_count": 0,
|
|
"fetched_count": 0,
|
|
"after_count": 0,
|
|
"delta": 0
|
|
}
|
|
]
|
|
}
|
|
JSON
|
|
|
|
chmod +x "$PRINT"
|
|
|
|
output=$("$PRINT" "$FIXTURE")
|
|
grep -q 'Scrape summary (finished 2026-06-04T12:00:00Z)' <<<"$output" || {
|
|
printf 'ERROR: missing finished_at header\n' >&2
|
|
printf '%s\n' "$output" >&2
|
|
exit 1
|
|
}
|
|
grep -q '+5 messages appended' <<<"$output" || {
|
|
printf 'ERROR: missing totals line\n' >&2
|
|
exit 1
|
|
}
|
|
grep -q 'MERGED' <<<"$output" || {
|
|
printf 'ERROR: missing MERGED channel row\n' >&2
|
|
exit 1
|
|
}
|
|
grep -q 'SKIPPED(OOM)' <<<"$output" || {
|
|
printf 'ERROR: missing SKIPPED(OOM) channel row\n' >&2
|
|
exit 1
|
|
}
|
|
|
|
json_out=$("$PRINT" --json "$FIXTURE")
|
|
diff -q "$FIXTURE" <(printf '%s\n' "$json_out") >/dev/null || {
|
|
printf 'ERROR: --json output differs from source file\n' >&2
|
|
exit 1
|
|
}
|
|
|
|
oom_out=$("$PRINT" --oom-only "$FIXTURE")
|
|
grep -q '333333333333333333' <<<"$oom_out" || {
|
|
printf 'ERROR: --oom-only missing OOM channel\n' >&2
|
|
exit 1
|
|
}
|
|
grep -q '111111111111111111' <<<"$oom_out" && {
|
|
printf 'ERROR: --oom-only should exclude non-OOM channels\n' >&2
|
|
exit 1
|
|
}
|
|
|
|
stdin_out=$(cat "$FIXTURE" | "$PRINT" -)
|
|
grep -q 'MERGED' <<<"$stdin_out" || {
|
|
printf 'ERROR: stdin (-) mode failed\n' >&2
|
|
exit 1
|
|
}
|
|
|
|
if "$PRINT" "$TMP_DIR/missing.json" >/dev/null 2>&1; then
|
|
printf 'ERROR: expected non-zero exit for missing file\n' >&2
|
|
exit 1
|
|
fi
|
|
|
|
printf '{"version":2}\n' >"$TMP_DIR/bad.summary.json"
|
|
if "$PRINT" "$TMP_DIR/bad.summary.json" >/dev/null 2>&1; then
|
|
printf 'ERROR: expected non-zero exit for invalid schema\n' >&2
|
|
exit 1
|
|
fi
|
|
|
|
printf 'print-scrape-summary-smoke: ok\n'
|