rewrite time limit

This commit is contained in:
Ankle committed 2026-07-23 08:44:44 +08:00
1 parent cf920dc76f
commit 7ed62d66e9
3 files changed
+32 -32

No files matched your search

+26 -25
View File
@@ -9,10 +9,10 @@ STATE_DIR="/var/lib/cleanup-smartcam-data"
PAUSED_STATE="${STATE_DIR}/capture-paused"
LOCK_FILE="/run/cleanup-smartcam-data.lock"
# Start deleting confirmed bundles below 10 GiB, pause capture below 5 GiB,
# raise a critical alert below 3 GiB, and resume after recovery to 10 GiB.
CLEAN_TARGET_BYTES="${CLEAN_TARGET_BYTES:-10737418240}"
PAUSE_BELOW_BYTES="${PAUSE_BELOW_BYTES:-5368709120}"
# Delete confirmed bundles on every scheduled run. Pause capture and raise a
# critical alert below 3 GiB, and resume after recovery to 5 GiB.
RESUME_TARGET_BYTES="${RESUME_TARGET_BYTES:-5368709120}"
PAUSE_BELOW_BYTES="${PAUSE_BELOW_BYTES:-3221225472}"
CRITICAL_BELOW_BYTES="${CRITICAL_BELOW_BYTES:-3221225472}"
MIN_FILE_AGE_MINUTES="${MIN_FILE_AGE_MINUTES:-60}"
SAFE_WINDOW_SECONDS="${SAFE_WINDOW_SECONDS:-10}"
@@ -110,7 +110,7 @@ pause_capture() {
kill -STOP "$pid"
printf 'pid=%s\npaused_at=%s\n' "$pid" "$(date --iso-8601=seconds)" > "$PAUSED_STATE"
start_fast_resume_checks
alert CRITICAL "capture paused at free=$(human_bytes "$free_bytes"); SFTP/Kafka uploader remains running; automatic resume target=$(human_bytes "$CLEAN_TARGET_BYTES")"
alert CRITICAL "capture paused at free=$(human_bytes "$free_bytes"); SFTP/Kafka uploader remains running; automatic resume target=$(human_bytes "$RESUME_TARGET_BYTES")"
}
resume_capture_if_ready() {
@@ -130,13 +130,13 @@ resume_capture_if_ready() {
stop_fast_resume_checks
return 0
fi
if [[ "$free_bytes" -ge "$CLEAN_TARGET_BYTES" ]]; then
if [[ "$free_bytes" -ge "$RESUME_TARGET_BYTES" ]]; then
kill -CONT "$pid"
rm -f "$PAUSED_STATE"
stop_fast_resume_checks
alert RECOVERED "free space reached $(human_bytes "$free_bytes"); capture resumed automatically"
else
log WARNING "capture remains paused: free=$(human_bytes "$free_bytes"), resume target=$(human_bytes "$CLEAN_TARGET_BYTES")"
log WARNING "capture remains paused: free=$(human_bytes "$free_bytes"), resume target=$(human_bytes "$RESUME_TARGET_BYTES")"
fi
}
@@ -170,7 +170,7 @@ build_safe_bundles() {
}
delete_safe_bundles() {
local bundles="$1" free_bytes deleted_count=0 deleted_bytes=0 record base path size
local bundles="$1" deleted_count=0 deleted_bytes=0 record base path size
while IFS= read -r record; do
base="${record#* }"
for path in \
@@ -187,10 +187,6 @@ delete_safe_bundles() {
log ERROR "failed to delete confirmed file: ${path}"
fi
done
free_bytes="$(available_bytes)"
if [[ "$free_bytes" -ge "$CLEAN_TARGET_BYTES" ]]; then
break
fi
done < "$bundles"
log INFO "safe cleanup result: deleted=${deleted_count} files bytes=${deleted_bytes} free=$(human_bytes "$(available_bytes)")"
}
@@ -232,25 +228,30 @@ main() {
local free_bytes processed bundles
delete_stale_zero_bundles
free_bytes="$(available_bytes)"
# Protect the disk before cleanup work: once free space is below 3 GiB,
# stop continuous detection/recording/inference first while upload stays up.
if [[ "$free_bytes" -lt "$CRITICAL_BELOW_BYTES" ]]; then
alert CRITICAL "free space below critical threshold: $(human_bytes "$free_bytes")"
fi
if [[ "$free_bytes" -lt "$PAUSE_BELOW_BYTES" ]]; then
pause_capture "$free_bytes"
fi
resume_capture_if_ready "$free_bytes"
if [[ "$free_bytes" -lt "$CLEAN_TARGET_BYTES" ]]; then
processed="$(mktemp /tmp/userdata-processed.XXXXXX)"
bundles="$(mktemp /tmp/userdata-bundles.XXXXXX)"
trap 'rm -f "${processed:-}" "${bundles:-}"' EXIT
processed="$(mktemp /tmp/userdata-processed.XXXXXX)"
bundles="$(mktemp /tmp/userdata-bundles.XXXXXX)"
trap 'rm -f "${processed:-}" "${bundles:-}"' EXIT
if load_processed_files "$processed"; then
build_safe_bundles "$processed" "$bundles"
if [[ -s "$bundles" ]]; then
delete_safe_bundles "$bundles"
else
log WARNING "free space is low, but no confirmed old bundles are safe to delete"
fi
if load_processed_files "$processed"; then
build_safe_bundles "$processed" "$bundles"
if [[ -s "$bundles" ]]; then
delete_safe_bundles "$bundles"
else
alert ERROR "cannot read confirmed-upload list; fail-safe mode prevents all deletion"
log INFO "no confirmed old bundles are ready for safe cleanup"
fi
else
log INFO "free space is sufficient: $(human_bytes "$free_bytes") available"
alert ERROR "cannot read confirmed-upload list; fail-safe mode prevents all deletion"
fi
free_bytes="$(available_bytes)"