Files
proxmox/scripts/monitoring/prune-storage-history.sh
defiQUG bea1903ac9
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
Sync all local changes: docs, config, scripts, submodule refs, verification evidence
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-21 15:46:06 -08:00

69 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Prune old rows from logs/storage-growth/history.csv to cap file size.
# Keeps header and either last KEEP_DAYS (as proxy: days*200 rows) or last MAX_ROWS.
# Usage: ./scripts/monitoring/prune-storage-history.sh [--days N] [--max-rows N] [--dry-run]
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
LOG_DIR="${LOG_DIR:-$PROJECT_ROOT/logs/storage-growth}"
HISTORY_CSV="${HISTORY_CSV:-$LOG_DIR/history.csv}"
KEEP_DAYS="${KEEP_DAYS:-90}"
MAX_ROWS="${MAX_ROWS:-0}"
ROWS_PER_DAY=200
DRY_RUN=0
while [ $# -gt 0 ]; do
case "$1" in
--days)
KEEP_DAYS="${2:-90}"
shift 2
;;
--max-rows)
MAX_ROWS="${2:-0}"
shift 2
;;
--dry-run)
DRY_RUN=1
shift
;;
*)
shift
;;
esac
done
if [ ! -f "$HISTORY_CSV" ]; then
echo "File $HISTORY_CSV does not exist; nothing to prune."
exit 0
fi
header=$(head -1 "$HISTORY_CSV")
total_lines=$(wc -l < "$HISTORY_CSV")
data_lines=$((total_lines - 1))
if [ "$data_lines" -le 0 ]; then
echo "No data rows in $HISTORY_CSV."
exit 0
fi
if [ "$MAX_ROWS" -le 0 ]; then
MAX_ROWS=$((KEEP_DAYS * ROWS_PER_DAY))
fi
if [ "$data_lines" -le "$MAX_ROWS" ]; then
echo "Data rows ($data_lines) <= keep ($MAX_ROWS); no prune needed."
exit 0
fi
remove=$((data_lines - MAX_ROWS))
if [ "$DRY_RUN" -eq 1 ]; then
echo "[dry-run] Would trim to last $MAX_ROWS rows (remove $remove rows)."
exit 0
fi
{ echo "$header"; tail -n "$MAX_ROWS" "$HISTORY_CSV"; } > "${HISTORY_CSV}.$$"
mv "${HISTORY_CSV}.$$" "$HISTORY_CSV"
echo "Trimmed $HISTORY_CSV to last $MAX_ROWS data rows (removed $remove)."