CRITICAL: Fix bot-analyzer parse_logs output redirection bug

ROOT CAUSE:
The parse_logs function used a pipeline with while-loop that ran in a subshell:
  find ... | while read -r logfile; do
      awk ... "$logfile"
  done > "$TEMP_DIR/parsed_logs.txt"

The redirect (> file) was OUTSIDE the loop, so it captured nothing from the
subshell. This caused "No log entries were parsed" error even though logs
were being processed.

THE BUG:
Lines 325-401: Output from awk inside while-loop was lost because the
redirect happened after the subshell closed.

THE FIX:
Wrapped the entire find|while block in a command group {}:
  {
  find ... | while read -r logfile; do
      awk ... "$logfile"
  done
  } > "$TEMP_DIR/parsed_logs.txt"

Now the redirect captures all output from the command group, including
the subshell output.

IMPACT:
Bot-analyzer can now successfully parse InterWorx, cPanel, and Plesk logs.
This was a blocking bug preventing ALL log analysis from working.
This commit is contained in:
cschantz
2025-11-21 17:52:49 -05:00
parent d1bcf3fa30
commit 32b5ed2ff7
+3 -1
View File
@@ -322,6 +322,7 @@ parse_logs() {
local file_count=0 local file_count=0
local progress_interval=50 local progress_interval=50
echo "" echo ""
{
find "$log_search_path" -type f -name "$log_search_name" ! -name "*-bytes_log" ! -name "*.offset" ! -name "*error_log" "${find_opts[@]}" 2>/dev/null | while read -r logfile; do find "$log_search_path" -type f -name "$log_search_name" ! -name "*-bytes_log" ! -name "*.offset" ! -name "*error_log" "${find_opts[@]}" 2>/dev/null | while read -r logfile; do
# Skip empty files # Skip empty files
[ -s "$logfile" ] || continue [ -s "$logfile" ] || continue
@@ -398,7 +399,8 @@ parse_logs() {
print ip "|" domain "|" request_url "|" status "|" size "|" user_agent "|" http_method "|" timestamp print ip "|" domain "|" request_url "|" status "|" size "|" user_agent "|" http_method "|" timestamp
} }
}' "$logfile" 2>/dev/null }' "$logfile" 2>/dev/null
done > "$TEMP_DIR/parsed_logs.txt" done
} > "$TEMP_DIR/parsed_logs.txt"
# Clear the progress line # Clear the progress line
echo -ne "\r\033[K" echo -ne "\r\033[K"