70 lines
1.8 KiB
Bash
70 lines
1.8 KiB
Bash
#!/bin/bash
|
|
# Build summary markdown from report logs.
|
|
set -euo pipefail
|
|
|
|
TS="${1:-unknown}"
|
|
REPORTS="${REPORTS_DIR:-/reports}"
|
|
OUT="$REPORTS/${TS}_summary.md"
|
|
|
|
pmi="$REPORTS/${TS}_pmi.log"
|
|
audit="$REPORTS/${TS}_audit.log"
|
|
fim="$REPORTS/${TS}_fim.log"
|
|
|
|
count_status() {
|
|
local file="$1" status="$2"
|
|
local n=0
|
|
if [ -f "$file" ]; then
|
|
n=$(grep -c "^${status} " "$file" 2>/dev/null) || n=0
|
|
fi
|
|
echo "$n"
|
|
}
|
|
|
|
pass_pmi=$(count_status "$pmi" PASS)
|
|
fail_pmi=$(count_status "$pmi" FAIL)
|
|
pass_fim=$(count_status "$fim" PASS)
|
|
fail_fim=$(count_status "$fim" FAIL)
|
|
|
|
{
|
|
echo "# Сводный отчёт nginx PMI stand"
|
|
echo ""
|
|
echo "**Дата прогона:** $TS"
|
|
echo "**Стенд:** Docker Compose (\`results/docker-compose.yml\`)"
|
|
echo ""
|
|
echo "## Результаты ПМИ"
|
|
echo ""
|
|
echo "| Метрика | Значение |"
|
|
echo "|---------|----------|"
|
|
echo "| PASS | $pass_pmi |"
|
|
echo "| FAIL | $fail_pmi |"
|
|
echo ""
|
|
echo "## Целостность (FIM stand-in)"
|
|
echo ""
|
|
echo "| Метрика | Значение |"
|
|
echo "|---------|----------|"
|
|
echo "| PASS | $pass_fim |"
|
|
echo "| FAIL | $fail_fim |"
|
|
echo ""
|
|
echo "> FIM выполнен через SHA256 baseline (\`run-fim-checksum.sh\`), не afick."
|
|
echo "> Syslog проверялся локальным syslog-ng, не корпоративным SIEM."
|
|
echo ""
|
|
echo "## Файлы отчётов"
|
|
echo ""
|
|
echo "- [\`${TS}_pmi.log\`](${TS}_pmi.log)"
|
|
echo "- [\`${TS}_audit.log\`](${TS}_audit.log)"
|
|
echo "- [\`${TS}_fim.log\`](${TS}_fim.log)"
|
|
echo ""
|
|
echo "## PMI log excerpt"
|
|
echo ""
|
|
echo '```'
|
|
[ -f "$pmi" ] && grep -E '^(PASS|FAIL|SKIP|===)' "$pmi" || echo "(no pmi log)"
|
|
echo '```'
|
|
echo ""
|
|
echo "## FIM log excerpt"
|
|
echo ""
|
|
echo '```'
|
|
[ -f "$fim" ] && cat "$fim" || echo "(no fim log)"
|
|
echo '```'
|
|
} > "$OUT"
|
|
|
|
echo "Summary written: $OUT"
|