Files

49 lines
1.3 KiB
Plaintext
Raw Permalink Normal View History

2025-12-04 13:35:53 +01:00
#!/bin/bash
set -euo pipefail
2025-12-04 13:35:53 +01:00
# Load environment
source <%= @ps_env_file %>
2025-12-04 14:30:24 +01:00
LOG_FILE="<%= @ps_prune_log_file %>"
2025-12-04 13:35:53 +01:00
echo "$(date '+%Y-%m-%d %H:%M:%S') Starting prune run" >> "$LOG_FILE"
2025-12-07 18:03:52 +01:00
# -----------------------
# Iterate TSDB blocks
# -----------------------
2025-12-04 13:35:53 +01:00
for block in "$TSDB_DIR"/*/; do
[[ -d "$block" ]] || continue
meta="$block/meta.json"
[[ -f "$meta" ]] || continue
2025-12-04 13:35:53 +01:00
min_time=$(jq -r '.minTime' "$meta")
max_time=$(jq -r '.maxTime' "$meta")
2025-12-07 18:03:52 +01:00
# Skip last MIN_AGE_HOURS
2025-12-04 13:35:53 +01:00
block_age_hours=$(( ($(date +%s) - min_time/1000) / 3600 ))
if (( block_age_hours < MIN_AGE_HOURS + GRACE_HOURS )); then
2025-12-07 18:03:52 +01:00
log "Keeping block $block (age ${block_age_hours}h)"
2025-12-04 13:35:53 +01:00
continue
fi
2025-12-07 18:03:52 +01:00
# Check existence in PostgreSQL
2025-12-04 13:35:53 +01:00
check_sql="${CHECK_SQL_TEMPLATE//\{min\}/$min_time}"
check_sql="${check_sql//\{max\}/$max_time}"
2025-12-07 18:03:52 +01:00
exists=$(psql -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d "$PGDATABASE" -t -c "$check_sql" | xargs || echo "0")
2025-12-04 13:35:53 +01:00
if [[ "$exists" != "1" ]]; then
2025-12-07 18:03:52 +01:00
log "Block $block not confirmed in PostgreSQL, skipping deletion"
2025-12-04 13:35:53 +01:00
continue
fi
2025-12-07 18:03:52 +01:00
# Delete block
2025-12-04 13:35:53 +01:00
if [[ "$DRY_RUN" == "true" ]]; then
2025-12-07 18:03:52 +01:00
log "[DRY-RUN] Would delete block $block"
else
2025-12-07 18:03:52 +01:00
log "Deleting block $block"
2025-12-04 13:35:53 +01:00
rm -rf "$block"
fi
done
2025-12-04 13:35:53 +01:00
echo "$(date '+%Y-%m-%d %H:%M:%S') Prune run finished" >> "$LOG_FILE"