Commit Graph

9 Commits

Author SHA1 Message Date
cschantz abdcb906d8 Add IP filtering and reorganize Website Management menu
IP Filtering enhancements to 500 error tracker:
- Filter localhost/internal IPs (127.x, 10.x, 172.16-31.x, 192.168.x)
- Detect cloud scanner IPs from AWS, GCP, Azure with user agent validation
- Skip known bot network IP ranges to reduce noise
- More aggressive filtering of non-relevant traffic

Website Management menu reorganization:
Reduced from 16 options to 7 logical categories:

Main menu now has:
1. Website Error Analyzer
2. Fast 500 Error Tracker
3. Debug Log Analyzer
4. Health & Maintenance → (5 tools: health check, DB optimizer, cache, plugin/theme audit)
5. WP-Cron Management → (3 tools: status, mass fix, system cron setup)
6. Mass Updates → (3 tools: core, plugins, themes updates)
7. Security & Compliance → (3 tools: malware scanner, permissions, login audit)

Benefits:
- Cleaner, more organized menu structure
- Related tools grouped together
- Easier navigation with logical subcategories
- Reduced cognitive load (7 vs 16 options)
2025-11-03 21:21:44 -05:00
cschantz 222dc08415 Fix: Scan logs in subdirectories to catch all domain errors
Issue: Was missing 500 errors from logs stored in subdirectories like
/var/log/apache2/domlogs/username/domain.com

Changed from simple glob (domlogs/*) to recursive find command that:
- Scans all files in domlogs directory AND subdirectories
- Excludes system files (bytes_log, offset, error_log, ftpxferlog, ssl_log)
- Finds ALL domain access logs regardless of location

This ensures we catch errors like "GET /ay.php HTTP/1.1" 500 that were
previously missed in subdirectory logs.
2025-11-03 21:17:45 -05:00
cschantz c36ba42333 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.
2025-11-03 21:06:18 -05:00
cschantz 9b7cdc704d Enhance 500 error tracker: bot filtering, comprehensive validation, specific diagnostics
Major improvements to provide actionable, specific diagnostics instead of generic advice:

- Add bot/scanner filtering to reduce noise (monitors, SEO tools, security scanners, HTTP clients)
- Track and display filtered bot count in summary
- Remove all emojis from output
- Fix ANSI escape codes with echo -e for proper color rendering

Comprehensive file/permission validation:
- Resolve URLs to actual file paths being requested
- Test .htaccess readability by Apache (nobody user)
- Validate .htaccess syntax with apache2ctl -t
- Detect invalid PHP directives (php_value/php_flag without mod_php)
- Find malformed RewriteRule and orphaned RewriteCond
- Check document root and specific file permissions
- Test if files are readable by Apache user

Enhanced error extraction:
- Extract exact file paths from PHP errors
- Get line numbers for syntax errors
- Extract function names for missing function errors
- Get database usernames/names from DB errors
- Show current memory limits for memory exhaustion
- Identify specific files with permission issues

Add detailed per-URL diagnostics section:
- Show domain + URL + specific issue + file path + exact problem
- Group by error type with up to 20 examples per type
- Examples: "example.com/wp-admin - Permission denied on: /home/user/wp-config.php (perms: 600, owner: root:root) - NOT readable by Apache"
2025-11-03 21:00:27 -05:00
cschantz 037885011f Fix color variable display in 500 tracker output
ISSUE: Example text was showing raw ANSI codes like:
  \033[2mExample: domain.com...\033[0m

FIX: Added DIM and BOLD color variable definitions
  - These weren't being loaded from common-functions.sh
  - Now examples display properly with dim gray text
2025-11-03 20:44:45 -05:00
cschantz 85a17d7b4c Filter out cPanel system logs from 500 error tracker
FILTERED LOG FILES:
- proxy (Apache reverse proxy logs)
- localhost (local connections)
- default (default vhost)
- cpanel, webmail, whm (cPanel services)
- cpcalendars, cpcontacts, webdisk (cPanel apps)

These are cPanel system services, not actual customer domains.
They were showing as 'unknown' user and cluttering results.

Now only tracks actual customer domain 500 errors.
2025-11-03 20:42:56 -05:00
cschantz 472a9f3f88 Enhance 500 tracker error log detection and .htaccess diagnosis
IMPROVED ERROR LOG DETECTION:
- Now checks 5 different locations for error logs:
  • /home/USER/public_html/error_log
  • /home/USER/logs/error_log
  • /home/USER/error_log
  • /var/log/apache2/domlogs/DOMAIN-error_log
  • /usr/local/apache/domlogs/DOMAIN
- Increased tail from 100 to 500 lines for better error capture

NEW .HTACCESS DETECTION:
- If no error_log found, checks for .htaccess file
- Looks for RewriteRules, php_value, php_flag directives
- If found, classifies as 'HTACCESS_LIKELY' instead of 'NO_ERROR_LOG_FILE'
- Provides specific .htaccess troubleshooting steps

BETTER ROOT CAUSE CATEGORIES:
- HTACCESS_LIKELY: Has .htaccess with rules, likely syntax error
- NO_ERROR_LOG_FILE: Checked all locations, truly not found
- NO_PHP_ERROR_LOGGED: Error log exists but empty (Apache/config issue)

This should catch most of the 'NO_ERROR_LOG_FILE' cases and
correctly identify them as .htaccess syntax errors.
2025-11-03 20:42:19 -05:00
cschantz adce5ab148 Add 30-day option to Fast 500 Error Tracker
- Added time range selection: 24 hours, 7 days, 30 days
- Default still 24 hours for speed
- Uses same time filtering as full analyzer
2025-11-03 20:33:27 -05:00
cschantz 4843e163aa Add Fast 500 Error Tracker + Fix awk error in analyzer
NEW SCRIPT: modules/website/500-error-tracker.sh
- FAST-ONLY 500 error detection (no menus, no options)
- Scans access logs for 500 errors
- Maps domains to cPanel usernames
- Automatically diagnoses root causes by checking error_log files
- Shows actual PHP errors causing the 500s

ROOT CAUSE DETECTION:
- PHP Memory Exhausted (shows current limit)
- PHP Fatal Errors
- PHP Syntax Errors
- Missing PHP Functions/Extensions
- Database Connection Failures
- .htaccess Issues
- Shows ACTUAL error examples, not just suggestions

FIXES:
- Fixed awk error in website-error-analyzer.sh:
  • Changed "next" in END block to "if (length > 0)"
  • "next" cannot be used in END block in awk

- Added option 2 in Website Management menu
- Renumbered all WordPress tools (3-16)

DIFFERENCE FROM FULL ANALYZER:
Full Analyzer: All errors, filters, time ranges, user choices
Fast Tracker: ONLY 500s, auto-diagnosis, shows WHY not suggestions

Use Fast Tracker when you need to quickly find which domains
are getting 500 errors and the exact PHP errors causing them.
2025-11-03 20:32:19 -05:00