117 lines
3.5 KiB
Bash
117 lines
3.5 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
|||
|
|
DATE_TAG="${1:-$(date +%F)}"
|
|||
|
|
ENV_FILE_REL="${2:-scripts/supply-gate/.env.minimax-dev}"
|
|||
|
|
if [[ "${ENV_FILE_REL}" == /* ]]; then
|
|||
|
|
ENV_FILE="${ENV_FILE_REL}"
|
|||
|
|
else
|
|||
|
|
ENV_FILE="${ROOT_DIR}/${ENV_FILE_REL}"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
OUT_DIR="${ROOT_DIR}/reports/gates"
|
|||
|
|
mkdir -p "${OUT_DIR}"
|
|||
|
|
|
|||
|
|
SNAPSHOT_CSV="${OUT_DIR}/minimax_upstream_daily_snapshots.csv"
|
|||
|
|
SNAPSHOT_MD="${OUT_DIR}/minimax_upstream_daily_snapshot_${DATE_TAG}.md"
|
|||
|
|
RUN_ACTIVE_SMOKE="${RUN_ACTIVE_SMOKE:-0}"
|
|||
|
|
|
|||
|
|
extract_overall() {
|
|||
|
|
local file="$1"
|
|||
|
|
if [[ ! -f "${file}" ]]; then
|
|||
|
|
echo "UNKNOWN"
|
|||
|
|
return
|
|||
|
|
fi
|
|||
|
|
grep -E '^- 总体结论:\*\*' "${file}" | head -n 1 | sed -E 's/^- 总体结论:\*\*([^*]+)\*\*$/\1/' || true
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
find_latest_smoke_report() {
|
|||
|
|
local choose_real_only="$1"
|
|||
|
|
local candidate=""
|
|||
|
|
local first_any=""
|
|||
|
|
for candidate in $(ls -1t "${OUT_DIR}"/minimax_upstream_smoke_*.md 2>/dev/null || true); do
|
|||
|
|
if [[ -z "${first_any}" ]]; then
|
|||
|
|
first_any="${candidate}"
|
|||
|
|
fi
|
|||
|
|
if [[ "${choose_real_only}" == "1" ]]; then
|
|||
|
|
overall="$(extract_overall "${candidate}")"
|
|||
|
|
if [[ "${overall}" != "PASS_DRY_RUN" ]]; then
|
|||
|
|
echo "${candidate}"
|
|||
|
|
return
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo "${candidate}"
|
|||
|
|
return
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
echo "${first_any}"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if [[ "${RUN_ACTIVE_SMOKE}" == "1" ]]; then
|
|||
|
|
bash "${ROOT_DIR}/scripts/supply-gate/minimax_upstream_smoke.sh" "${ENV_FILE}"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
LATEST_REPORT="$(find_latest_smoke_report "1")"
|
|||
|
|
if [[ -z "${LATEST_REPORT}" || ! -f "${LATEST_REPORT}" ]]; then
|
|||
|
|
echo "[FAIL] no minimax smoke report found under ${OUT_DIR}"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
OVERALL="$(extract_overall "${LATEST_REPORT}")"
|
|||
|
|
BASE_HTTP="$(grep -E '^- http_code:' "${LATEST_REPORT}" | sed -n '1p' | sed -E 's/^- http_code:([0-9]+)$/\1/' || true)"
|
|||
|
|
ACTIVE_HTTP="$(grep -E '^- http_code:' "${LATEST_REPORT}" | sed -n '2p' | sed -E 's/^- http_code:([0-9]+)$/\1/' || true)"
|
|||
|
|
|
|||
|
|
if [[ -z "${OVERALL}" ]]; then
|
|||
|
|
OVERALL="UNKNOWN"
|
|||
|
|
fi
|
|||
|
|
STATUS="FAIL"
|
|||
|
|
if [[ "${OVERALL}" == "PASS" || "${OVERALL}" == "PASS_AUTH_REACHED" ]]; then
|
|||
|
|
STATUS="PASS"
|
|||
|
|
elif [[ "${OVERALL}" == "PASS_DRY_RUN" ]]; then
|
|||
|
|
STATUS="CONDITIONAL_PASS"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
NOTE="latest_report=${LATEST_REPORT}"
|
|||
|
|
if [[ "${RUN_ACTIVE_SMOKE}" != "1" ]]; then
|
|||
|
|
NOTE="${NOTE}; run_active_smoke=0(use latest report only)"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
if [[ ! -f "${SNAPSHOT_CSV}" ]]; then
|
|||
|
|
echo "date,status,overall,base_http,active_http,run_active_smoke,report,note" > "${SNAPSHOT_CSV}"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
tmp_csv="$(mktemp)"
|
|||
|
|
awk -F',' -v d="${DATE_TAG}" '
|
|||
|
|
NR==1 {print; next}
|
|||
|
|
$1==d {next}
|
|||
|
|
{print}
|
|||
|
|
' "${SNAPSHOT_CSV}" > "${tmp_csv}"
|
|||
|
|
echo "${DATE_TAG},${STATUS},${OVERALL},${BASE_HTTP:-N/A},${ACTIVE_HTTP:-N/A},${RUN_ACTIVE_SMOKE},${LATEST_REPORT},${NOTE}" >> "${tmp_csv}"
|
|||
|
|
mv "${tmp_csv}" "${SNAPSHOT_CSV}"
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
echo "# Minimax 上游每日快照(${DATE_TAG})"
|
|||
|
|
echo
|
|||
|
|
echo "- 运行模式:RUN_ACTIVE_SMOKE=${RUN_ACTIVE_SMOKE}"
|
|||
|
|
echo "- 环境文件:\`${ENV_FILE_REL}\`"
|
|||
|
|
echo "- 快照结果:**${STATUS}**"
|
|||
|
|
echo "- overall:\`${OVERALL}\`"
|
|||
|
|
echo "- base_http:\`${BASE_HTTP:-N/A}\`"
|
|||
|
|
echo "- active_http:\`${ACTIVE_HTTP:-N/A}\`"
|
|||
|
|
echo "- 证据:\`${LATEST_REPORT}\`"
|
|||
|
|
echo
|
|||
|
|
echo "## 说明"
|
|||
|
|
echo
|
|||
|
|
echo "1. RUN_ACTIVE_SMOKE=0 时仅汇总最新 smoke 报告,不触发外部请求。"
|
|||
|
|
echo "2. RUN_ACTIVE_SMOKE=1 时会执行一次实时 smoke,并更新快照。"
|
|||
|
|
echo "3. 该快照用于上游可达性监控,不替代 SUP 发布门禁结论。"
|
|||
|
|
echo
|
|||
|
|
echo "## 存档"
|
|||
|
|
echo
|
|||
|
|
echo "1. CSV:\`${SNAPSHOT_CSV}\`"
|
|||
|
|
echo "2. 日报:\`${SNAPSHOT_MD}\`"
|
|||
|
|
} > "${SNAPSHOT_MD}"
|
|||
|
|
|
|||
|
|
echo "[PASS] minimax daily snapshot generated: ${SNAPSHOT_MD}"
|