DiscordChatExporter/scripts/lib/scrape-summary-json.sh
Copilot c8ed19d26b feat(scrape): per-target JSON summaries in multi-target loops
Validation --per-target and multi-target proof now pass --summary-file
per scrape so each target gets its own operator-*-<target>-UTC summary.
2026-06-03 11:08:44 -05:00

52 lines
1.3 KiB
Bash

#!/usr/bin/env bash
# Recover machine-readable scrape summaries from teed operator logs.
extract_json_summary_from_log() {
local source_log=$1
local dest_file=$2
local line json_payload
[[ -n "$source_log" && -n "$dest_file" ]] || return 1
[[ -f "$source_log" && -r "$source_log" ]] || return 1
command -v jq >/dev/null 2>&1 || return 1
line=$(grep 'DCE_JSON_SUMMARY:' "$source_log" | tail -1) || return 1
[[ -n "$line" ]] || return 1
json_payload=${line#*DCE_JSON_SUMMARY: }
[[ -n "$json_payload" ]] || return 1
if ! jq -e . >/dev/null 2>&1 <<<"$json_payload"; then
return 1
fi
mkdir -p "$(dirname "$dest_file")"
jq . <<<"$json_payload" >"$dest_file"
}
recover_json_summary_if_missing() {
local run_log=$1
local dest_file=$2
[[ -n "$run_log" && -n "$dest_file" ]] || return 1
[[ -s "$dest_file" ]] && return 1
extract_json_summary_from_log "$run_log" "$dest_file"
}
sanitize_target_slug() {
local raw=$1
printf '%s' "$raw" | sed 's/[^A-Za-z0-9._-]/_/g'
}
per_target_summary_file() {
local log_dir=$1
local prefix=$2
local target=$3
local slug
[[ -n "$log_dir" && -n "$prefix" && -n "$target" ]] || return 1
slug=$(sanitize_target_slug "$target")
printf '%s/%s-%s-%s.summary.json' "$log_dir" "$prefix" "$slug" "$(date -u +%Y%m%dT%H%M%SZ)"
}