94 lines
2.5 KiB
Bash
Executable File
94 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
ARCHIVE_ROOT="${ROOT_DIR}/logs/archive"
|
|
OUTPUT_FILE="${ARCHIVE_ROOT}/README.md"
|
|
GENERATED_AT="$(date '+%Y-%m-%d %H:%M:%S %Z')"
|
|
|
|
fmt_epoch() {
|
|
local epoch="$1"
|
|
date -d "@${epoch}" '+%Y-%m-%d %H:%M:%S'
|
|
}
|
|
|
|
list_batches() {
|
|
find "${ARCHIVE_ROOT}" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | sort -r
|
|
}
|
|
|
|
if [[ ! -d "${ARCHIVE_ROOT}" ]]; then
|
|
mkdir -p "${ARCHIVE_ROOT}"
|
|
fi
|
|
|
|
{
|
|
echo "# 日志归档索引"
|
|
echo
|
|
echo "本文件由 \`scripts/ci/update-log-archive-index.sh\` 自动生成。"
|
|
echo
|
|
echo "- 生成时间: ${GENERATED_AT}"
|
|
echo "- 归档根目录: \`logs/archive/\`"
|
|
echo
|
|
|
|
mapfile -t batches < <(list_batches)
|
|
if [[ "${#batches[@]}" -eq 0 ]]; then
|
|
echo "当前没有可用归档批次。"
|
|
exit 0
|
|
fi
|
|
|
|
echo "## 批次总览"
|
|
echo
|
|
echo "| 批次 | 文件数 | 体积 | 最早文件时间 | 最晚文件时间 |"
|
|
echo "|---|---:|---:|---|---|"
|
|
|
|
for batch in "${batches[@]}"; do
|
|
batch_dir="${ARCHIVE_ROOT}/${batch}"
|
|
file_count="$(find "${batch_dir}" -type f | wc -l)"
|
|
size="$(du -sh "${batch_dir}" | awk '{print $1}')"
|
|
|
|
if [[ "${file_count}" -eq 0 ]]; then
|
|
earliest="-"
|
|
latest="-"
|
|
else
|
|
read -r earliest_epoch latest_epoch < <(
|
|
find "${batch_dir}" -type f -printf '%T@\n' | awk '
|
|
NR == 1 { min = $1; max = $1 }
|
|
{ if ($1 < min) min = $1; if ($1 > max) max = $1 }
|
|
END { printf "%d %d\n", min, max }
|
|
'
|
|
)
|
|
earliest="$(fmt_epoch "${earliest_epoch}")"
|
|
latest="$(fmt_epoch "${latest_epoch}")"
|
|
fi
|
|
|
|
echo "| \`${batch}\` | ${file_count} | ${size} | ${earliest} | ${latest} |"
|
|
done
|
|
|
|
echo
|
|
echo "## 子系统明细"
|
|
echo
|
|
|
|
for batch in "${batches[@]}"; do
|
|
batch_dir="${ARCHIVE_ROOT}/${batch}"
|
|
logs_dir="${batch_dir}/logs"
|
|
echo "### ${batch}"
|
|
echo
|
|
|
|
if [[ ! -d "${logs_dir}" ]]; then
|
|
echo "_未发现 \`logs/\` 子目录_"
|
|
echo
|
|
continue
|
|
fi
|
|
|
|
echo "| 子系统目录 | 文件数 | 体积 |"
|
|
echo "|---|---:|---:|"
|
|
while IFS= read -r subdir; do
|
|
sub_name="${subdir#${logs_dir}/}"
|
|
sub_count="$(find "${subdir}" -type f | wc -l)"
|
|
sub_size="$(du -sh "${subdir}" | awk '{print $1}')"
|
|
echo "| \`${sub_name}\` | ${sub_count} | ${sub_size} |"
|
|
done < <(find "${logs_dir}" -mindepth 1 -maxdepth 1 -type d | sort)
|
|
echo
|
|
done
|
|
} > "${OUTPUT_FILE}"
|
|
|
|
echo "[update-log-archive-index] generated ${OUTPUT_FILE}"
|