Add comprehensive progress tracking and timing to all scanners

Added real-time progress feedback with path display, file counts,
and duration tracking for all 4 scanners.

New Progress Display Features:
- 📁 Shows exact path being scanned
-  Scanner name and type of scan
- ✓ Files scanned count (extracted from logs)
- ⏱️  Duration in seconds for each scanner
- Completion summary with timing

Scanner-Specific Enhancements:

ImunifyAV:
- Shows path and scan type
- Extracts file count from scan history
- Displays duration
- Format: "Found: 0 | Duration: 15s"

ClamAV:
- Shows all scan paths
- Extracts "Scanned files" from log
- Tracks duration
- Format: "Found: 0 | Duration: 42s"

Maldet:
- Shows scan paths
- Extracts file count and malware hits
- Tracks duration
- Format: "Found: 0 | Duration: 28s"

RKHunter:
- System-wide integrity check indicator
- Duration tracking
- Format: "Warnings: 0 | Duration: 35s"

Example Output:
  📁 Scanning path: /home/user/public_html
   Scanner: ClamAV (comprehensive virus scan...)
  ✓ Scanned 3231 files
  ⏱️  Duration: 42s

Benefits:
- User knows what's being scanned
- Clear progress indication
- No "is it frozen?" confusion
- Timing helps estimate completion
- Professional, informative output

All results include duration in summary for performance tracking.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
cschantz
2025-11-11 21:51:49 -05:00
parent 571bc79f75
commit 0d44bf2fcb
+59 -9
View File
@@ -654,6 +654,7 @@ for scanner in "${AVAILABLE_SCANNERS[@]}"; do
case "$scanner" in case "$scanner" in
imunify) imunify)
SCAN_START=$(date +%s)
log_message "ImunifyAV: Updating signatures" log_message "ImunifyAV: Updating signatures"
imunify-antivirus update &>> "$LOG_DIR/imunify.log" imunify-antivirus update &>> "$LOG_DIR/imunify.log"
@@ -663,36 +664,62 @@ for scanner in "${AVAILABLE_SCANNERS[@]}"; do
for path in "${SCAN_PATHS[@]}"; do for path in "${SCAN_PATHS[@]}"; do
if [ -d "$path" ]; then if [ -d "$path" ]; then
log_message "ImunifyAV: Scanning $path" log_message "ImunifyAV: Scanning $path"
echo " → Scanning: $path" echo ""
echo " 📁 Scanning path: $path"
echo " ⏳ Scanner: ImunifyAV (this may take several minutes...)"
imunify-antivirus malware on-demand start --path="$path" &>> "$LOG_DIR/imunify.log" imunify-antivirus malware on-demand start --path="$path" &>> "$LOG_DIR/imunify.log"
# Get scan results from last scan
LAST_SCAN=$(imunify-antivirus malware on-demand list 2>/dev/null | tail -1)
FILES_SCANNED=$(echo "$LAST_SCAN" | awk '{print $10}')
echo " ✓ Scanned $FILES_SCANNED files"
fi fi
done done
# Extract malicious file count # Extract malicious file count
IMUNIFY_INFECTED=$(imunify-antivirus malware malicious list 2>/dev/null | grep -c "malicious" || echo 0) IMUNIFY_INFECTED=$(imunify-antivirus malware malicious list 2>/dev/null | grep -c "malicious" || echo 0)
echo "✓ ImunifyAV scan complete - Found: $IMUNIFY_INFECTED" | tee -a "$SUMMARY_FILE" SCAN_END=$(date +%s)
log_message "ImunifyAV: Scan complete - $IMUNIFY_INFECTED malicious files" DURATION=$((SCAN_END - SCAN_START))
echo " ⏱️ Duration: ${DURATION}s"
echo ""
echo "✓ ImunifyAV scan complete - Found: $IMUNIFY_INFECTED | Duration: ${DURATION}s" | tee -a "$SUMMARY_FILE"
log_message "ImunifyAV: Scan complete - $IMUNIFY_INFECTED malicious files in ${DURATION}s"
;; ;;
clamav) clamav)
SCAN_START=$(date +%s)
if command -v freshclam &>/dev/null; then if command -v freshclam &>/dev/null; then
log_message "ClamAV: Updating signatures" log_message "ClamAV: Updating signatures"
freshclam &>> "$LOG_DIR/clamav.log" freshclam &>> "$LOG_DIR/clamav.log"
fi fi
log_message "ClamAV: Starting scan" log_message "ClamAV: Starting scan"
echo ""
echo " 📁 Scanning path(s): ${SCAN_PATHS[*]}"
echo " ⏳ Scanner: ClamAV (comprehensive virus scan...)"
clamscan --infected --recursive "${SCAN_PATHS[@]}" &>> "$LOG_DIR/clamav.log" clamscan --infected --recursive "${SCAN_PATHS[@]}" &>> "$LOG_DIR/clamav.log"
# Extract infected files # Extract infected files
grep "FOUND" "$LOG_DIR/clamav.log" | cut -d: -f1 >> "$INFECTED_LIST" 2>/dev/null grep "FOUND" "$LOG_DIR/clamav.log" | cut -d: -f1 >> "$INFECTED_LIST" 2>/dev/null
# Get scan stats from log
FILES_SCANNED=$(grep "Scanned files:" "$LOG_DIR/clamav.log" | tail -1 | awk '{print $3}')
CLAM_INFECTED=$(grep -c "FOUND" "$LOG_DIR/clamav.log" 2>/dev/null || echo 0) CLAM_INFECTED=$(grep -c "FOUND" "$LOG_DIR/clamav.log" 2>/dev/null || echo 0)
echo "✓ ClamAV scan complete - Found: $CLAM_INFECTED" | tee -a "$SUMMARY_FILE"
log_message "ClamAV: Scan complete - $CLAM_INFECTED infected files" SCAN_END=$(date +%s)
DURATION=$((SCAN_END - SCAN_START))
echo " ✓ Scanned $FILES_SCANNED files"
echo " ⏱️ Duration: ${DURATION}s"
echo ""
echo "✓ ClamAV scan complete - Found: $CLAM_INFECTED | Duration: ${DURATION}s" | tee -a "$SUMMARY_FILE"
log_message "ClamAV: Scan complete - $CLAM_INFECTED infected files in ${DURATION}s"
;; ;;
maldet) maldet)
SCAN_START=$(date +%s)
log_message "Maldet: Updating signatures" log_message "Maldet: Updating signatures"
maldet -u &>> "$LOG_DIR/maldet.log" maldet -u &>> "$LOG_DIR/maldet.log"
@@ -701,19 +728,37 @@ for scanner in "${AVAILABLE_SCANNERS[@]}"; do
printf '%s\n' "${SCAN_PATHS[@]}" > "$TEMP_PATHLIST" printf '%s\n' "${SCAN_PATHS[@]}" > "$TEMP_PATHLIST"
log_message "Maldet: Starting scan" log_message "Maldet: Starting scan"
echo ""
echo " 📁 Scanning path(s): ${SCAN_PATHS[*]}"
echo " ⏳ Scanner: Maldet/LMD (Linux-specific malware detection...)"
maldet -b -f "$TEMP_PATHLIST" &>> "$LOG_DIR/maldet.log" maldet -b -f "$TEMP_PATHLIST" &>> "$LOG_DIR/maldet.log"
# Extract scan results
FILES_SCANNED=$(grep "files scanned" "$LOG_DIR/maldet.log" | tail -1 | awk '{print $1}')
MALDET_HITS=$(grep "malware hits" "$LOG_DIR/maldet.log" | tail -1 | awk '{print $1}')
rm -f "$TEMP_PATHLIST" rm -f "$TEMP_PATHLIST"
echo "✓ Maldet scan complete" | tee -a "$SUMMARY_FILE" SCAN_END=$(date +%s)
log_message "Maldet: Scan complete" DURATION=$((SCAN_END - SCAN_START))
echo " ✓ Scanned $FILES_SCANNED files"
echo " ⏱️ Duration: ${DURATION}s"
echo ""
echo "✓ Maldet scan complete - Found: ${MALDET_HITS:-0} | Duration: ${DURATION}s" | tee -a "$SUMMARY_FILE"
log_message "Maldet: Scan complete - ${MALDET_HITS:-0} hits in ${DURATION}s"
;; ;;
rkhunter) rkhunter)
SCAN_START=$(date +%s)
log_message "RKHunter: Updating definitions" log_message "RKHunter: Updating definitions"
rkhunter --update &>> "$LOG_DIR/rkhunter.log" rkhunter --update &>> "$LOG_DIR/rkhunter.log"
log_message "RKHunter: Starting scan" log_message "RKHunter: Starting scan"
echo ""
echo " 🔍 System scan: Checking for rootkits, backdoors, exploits"
echo " ⏳ Scanner: Rootkit Hunter (system-wide integrity check...)"
# --check: Run all checks # --check: Run all checks
# --skip-keypress: Don't wait for user input # --skip-keypress: Don't wait for user input
# --report-warnings-only: Only show warnings/issues # --report-warnings-only: Only show warnings/issues
@@ -725,8 +770,13 @@ for scanner in "${AVAILABLE_SCANNERS[@]}"; do
# Extract any rootkits found # Extract any rootkits found
grep "Rootkit" "$LOG_DIR/rkhunter.log" | grep -i "found" >> "$INFECTED_LIST" 2>/dev/null grep "Rootkit" "$LOG_DIR/rkhunter.log" | grep -i "found" >> "$INFECTED_LIST" 2>/dev/null
echo "✓ RKHunter scan complete - Warnings: $RKH_WARNINGS" | tee -a "$SUMMARY_FILE" SCAN_END=$(date +%s)
log_message "RKHunter: Scan complete - $RKH_WARNINGS warnings" DURATION=$((SCAN_END - SCAN_START))
echo " ✓ System integrity check complete"
echo " ⏱️ Duration: ${DURATION}s"
echo ""
echo "✓ RKHunter scan complete - Warnings: $RKH_WARNINGS | Duration: ${DURATION}s" | tee -a "$SUMMARY_FILE"
log_message "RKHunter: Scan complete - $RKH_WARNINGS warnings in ${DURATION}s"
;; ;;
esac esac