From 4c45411edcf66502271bb964d5bcc75bebc694b7 Mon Sep 17 00:00:00 2001 From: cschantz Date: Tue, 23 Dec 2025 16:59:46 -0500 Subject: [PATCH] Fix ClamAV progress display to only update on file change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: Progress display updated every 0.2s showing same filename repeatedly: Scanning... ⠹ | Last file: pickledperil.com-Dec-2025.gz | Elapsed: 1m Scanning... ⠸ | Last file: pickledperil.com-Dec-2025.gz | Elapsed: 1m Scanning... ⠼ | Last file: pickledperil.com-Dec-2025.gz | Elapsed: 1m This created spam and made it hard to see actual progress. Solution: Track last displayed filename and only update when it changes: - Added last_filename variable - Only printf when filename != last_filename - Removed spinner animation (unnecessary with file tracking) - Changed format to simpler: "Scanning: [filename] | Elapsed: [time]" Now displays: Scanning: pickledperil.com-Dec-2025.gz | Elapsed: 1m Scanning: awstats122025.pickledperil.com.txt | Elapsed: 1m 5s Scanning: error.log | Elapsed: 1m 10s Each line shows a new file being scanned, no repetition. --- modules/security/malware-scanner.sh | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/modules/security/malware-scanner.sh b/modules/security/malware-scanner.sh index a0000a7..de18980 100755 --- a/modules/security/malware-scanner.sh +++ b/modules/security/malware-scanner.sh @@ -967,8 +967,7 @@ for scanner in "${AVAILABLE_SCANNERS[@]}"; do # Monitor activity by watching log file growth last_size=0 - spin_chars='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏' - spin_index=0 + last_filename="" stall_counter=0 while kill -0 $CLAM_PID 2>/dev/null; do @@ -980,14 +979,14 @@ for scanner in "${AVAILABLE_SCANNERS[@]}"; do current_file=$(tail -1 "$LOG_DIR/clamav.log" 2>/dev/null | grep -o '/[^:]*' | head -1) if [ -n "$current_file" ]; then filename=$(basename "$current_file" 2>/dev/null || echo "...") - elapsed=$(($(date +%s) - SCAN_START)) - spin_char="${spin_chars:$spin_index:1}" - printf "\r Scanning... %s | Last file: %s | Elapsed: %s " \ - "$spin_char" "${filename:0:40}" "$(format_time $elapsed)" - else - elapsed=$(($(date +%s) - SCAN_START)) - spin_char="${spin_chars:$spin_index:1}" - printf "\r Scanning... %s | Elapsed: %s " "$spin_char" "$(format_time $elapsed)" + + # Only update display when filename changes + if [ "$filename" != "$last_filename" ]; then + elapsed=$(($(date +%s) - SCAN_START)) + printf "\r Scanning: %s | Elapsed: %s " \ + "${filename:0:50}" "$(format_time $elapsed)" + last_filename="$filename" + fi fi # Check for stalled scan (no log growth in 60 seconds) @@ -1002,7 +1001,6 @@ for scanner in "${AVAILABLE_SCANNERS[@]}"; do last_size=$current_size fi - spin_index=$(( (spin_index + 1) % 10 )) sleep 0.2 done