From c36ba42333084a7e472bddbb574bffb23f58661d Mon Sep 17 00:00:00 2001 From: cschantz Date: Mon, 3 Nov 2025 21:06:18 -0500 Subject: [PATCH] Fix duplicate diagnostics and integer expression error in 500 tracker Issues fixed: - Removed duplicate diagnostic messages (was showing same error 169+ times) - Fixed bash integer expression error at line 552 - Deduplicate diagnostics by domain+url+issue combination using sort -u - Only save diagnostics when we have an actual identified cause - Skip displaying UNKNOWN causes (these are now categorized as NO_PHP_ERROR_LOGGED) - Show "X unique issues" instead of raw count to reflect deduplication Now shows each unique domain+issue combination once, with proper counts. --- modules/website/500-error-tracker.sh | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/modules/website/500-error-tracker.sh b/modules/website/500-error-tracker.sh index 8ec02c8..e2dba34 100755 --- a/modules/website/500-error-tracker.sh +++ b/modules/website/500-error-tracker.sh @@ -322,10 +322,14 @@ while IFS='|' read -r domain user status url timestamp ip; do [ -n "$specific_file" ] && diagnosis="$diagnosis - from file: $specific_file" fi - # Save detailed diagnosis - echo "$cause|$diagnosis" >> "$DETAILED_DIAGNOSIS" - ((diagnosed_causes["$cause"]++)) - [ -z "${cause_examples[$cause]}" ] && cause_examples["$cause"]="$diagnosis" + # Save detailed diagnosis only if we identified a specific cause + if [ "$cause" != "UNKNOWN" ] && [ -n "$diagnosis" ]; then + echo "$cause|$diagnosis" >> "$DETAILED_DIAGNOSIS" + ((diagnosed_causes["$cause"]++)) + [ -z "${cause_examples[$cause]}" ] && cause_examples["$cause"]="$diagnosis" + else + ((diagnosed_causes["NO_PHP_ERROR_LOGGED"]++)) + fi else ((diagnosed_causes["NO_PHP_ERROR_LOGGED"]++)) fi @@ -510,6 +514,9 @@ done | sort -rn | while IFS='|' read count cause; do echo -e "${YELLOW}$clean_cause${NC} - $count occurrences" echo -e " ${YELLOW}Note:${NC} 500 error but no PHP error in log - likely .htaccess or Apache config" ;; + UNKNOWN) + # Skip - these are errors we couldn't diagnose + ;; *) echo -e "${INFO_COLOR}$clean_cause${NC} - $count occurrences" ;; @@ -544,17 +551,20 @@ echo " SPECIFIC DIAGNOSTICS (per URL/file)" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" -# Show detailed diagnostics grouped by cause +# Show detailed diagnostics grouped by cause - deduplicate by domain+url+issue if [ -f "$DETAILED_DIAGNOSIS" ] && [ -s "$DETAILED_DIAGNOSIS" ]; then for cause_type in PHP_MEMORY_EXHAUSTED PERMISSION_ERROR HTACCESS_ERROR PHP_FATAL_ERROR PHP_SYNTAX_ERROR MISSING_PHP_FUNCTION DATABASE_CONNECTION; do - cause_count=$(grep -c "^${cause_type}|" "$DETAILED_DIAGNOSIS" 2>/dev/null || echo "0") + # Get unique diagnostics (deduplicate identical domain+issue combinations) + unique_diags=$(grep "^${cause_type}|" "$DETAILED_DIAGNOSIS" 2>/dev/null | cut -d'|' -f2 | sort -u) + cause_count=$(echo "$unique_diags" | grep -c "^" 2>/dev/null || echo "0") - if [ "$cause_count" -gt 0 ]; then + if [ "$cause_count" -gt 0 ] && [ -n "$unique_diags" ]; then cause_display=$(echo "$cause_type" | tr '_' ' ') - echo -e "${RED}${BOLD}$cause_display ($cause_count)${NC}" + echo -e "${RED}${BOLD}$cause_display ($cause_count unique issues)${NC}" echo "" - grep "^${cause_type}|" "$DETAILED_DIAGNOSIS" | cut -d'|' -f2 | head -20 | while read -r diag_line; do + echo "$unique_diags" | head -20 | while read -r diag_line; do + [ -z "$diag_line" ] && continue echo -e " ${YELLOW}•${NC} $diag_line" done