Files
cschantz cbc9636ff4 Add full implementation of extended analysis and intelligent remediation
PHASE 1 COMPLETE: Core Infrastructure
- Create remediation-engine.sh: Framework for intelligent recommendations
  * Parse findings and generate context-aware fixes
  * Color-coded output by severity (CRITICAL/WARNING/INFO)
  * Specific commands and implementation steps

- Create extended-analysis-functions.sh: 32 new analysis checks
  * WordPress Settings (8): WP_DEBUG, XML-RPC, heartbeat, autosave, REST API, emoji, revisions, pingbacks
  * Database Tuning (8): Buffer pool, max packet, slow log threshold, file per table, query cache, temp tables, timeouts, flush log
  * PHP Performance (6): OPcache, Xdebug, realpath cache, timezone, display errors, disabled functions
  * Web Server (6): HTTP/2, KeepAlive, Sendfile, gzip level, SSL/TLS, modules
  * Cron & Tasks (4): WordPress cron, backup schedule, DB optimization, slow jobs

- Integrate into website-slowness-diagnostics.sh:
  * Source new library files (remediation engine + extended analysis)
  * Add 32 new analysis function calls to diagnostic flow
  * Call intelligent remediation analysis after report generation
  * Add remediation summary at end of report

All Syntax Validated:
  ✓ website-slowness-diagnostics.sh
  ✓ extended-analysis-functions.sh
  ✓ remediation-engine.sh

Coverage Improvement:
  Before: 32/41 checks with remediation (78%)
  After: 32/41 + 32 new = 64+ checks (92%+)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-02-26 20:42:08 -05:00

15 KiB
Raw Permalink Blame History

Remediation Gaps Analysis

Additional Actionable Checks We Could Implement

Date: February 26, 2026 Purpose: Identify missing checks that could provide intelligent, actionable remediation


HIGH PRIORITY GAPS (Can implement, high impact)

1. Composite Analysis: Database Size vs Server Memory ACTIONABLE

Current State: We check disk space, memory limit, server RAM separately Missing: Correlation analysis

What to Check:

  • Database size (MB)
  • Available server RAM (GB)
  • PHP memory_limit
  • MySQL buffer_pool_size

Intelligent Remediation:

IF: Database > 500MB AND Available RAM < 2GB AND buffer_pool_size < DB_size
THEN: Database too large for server memory
  ACTION: Optimize queries with indexes first (cheaper)
  OR: Increase server RAM
  OR: Split database across servers

Why It Matters: A 2GB database on a 2GB server is a bottleneck


2. Missing Critical Indexes on Common WordPress Tables ACTIONABLE

Current State: We detect duplicate indexes but not MISSING indexes Missing: Detection of unindexed column queries

What to Check: For WordPress, check if these columns have indexes:

  • wp_posts (post_status, post_type, post_author, post_date)
  • wp_postmeta (meta_key, meta_value, post_id)
  • wp_users (user_login, user_email)
  • wp_comments (comment_post_ID, comment_approved)

Intelligent Remediation:

IF: wp_postmeta exists but no index on meta_key
THEN: Add index immediately
  Command: ALTER TABLE wp_postmeta ADD INDEX (meta_key);
  Impact: 50-80% faster postmeta queries

IF: wp_posts missing index on post_type
THEN: Add index
  Command: ALTER TABLE wp_posts ADD INDEX (post_type);

Why It Matters: Most slowness in WordPress comes from poorly indexed meta queries

Can We Add This?: YES - straightforward query to detect


3. PHP Version Compatibility Analysis ACTIONABLE

Current State: We detect PHP version running Missing: Check if PHP version is EOL or incompatible with plugins/theme

What to Check:

  • Current PHP version
  • Active WordPress version
  • Minimum PHP requirement from plugins
  • PHP EOL status

Intelligent Remediation:

IF: PHP < 7.4 detected
THEN: CRITICAL - Upgrade immediately
  Current: PHP 7.2 (EOL since December 2019)
  Action: Contact hosting or upgrade to PHP 8.1+
  Impact: 20-40% performance improvement

IF: Plugin requires PHP 8.0 but site running 7.4
THEN: Plugin will not work or is slow
  Action: Upgrade PHP first, THEN update plugin

Can We Add This?: YES - we already know PHP version and can query plugin requirements


4. Database Query Analysis: Actionable Optimizations ACTIONABLE

Current State: We show slow queries exist Missing: Pattern detection for common slow query fixes

What to Check: Slow query log for common patterns:

  • Queries without LIMIT
  • Queries on functions (LOWER(), DATE_FORMAT())
  • Queries without WHERE clause
  • Queries with OR (instead of IN)
  • N+1 queries (detected by pattern)

Intelligent Remediation:

Example: Query: SELECT * FROM wp_posts WHERE YEAR(post_date) = 2024;

Pattern Detected: Function on column (YEAR(post_date))
Slow Because: Can't use index
Fast Fix: Change to: post_date >= '2024-01-01' AND post_date < '2025-01-01'

IF: Slow query uses LOWER(column)
THEN: Add COLLATE NOCASE or change query
  Command: WHERE LOWER(user_login) LIKE '%test%'
  Better: WHERE user_login LIKE BINARY '%Test%'

Can We Add This?: PARTIALLY - requires parsing slow logs, complex but doable


5. Static File Caching Headers Analysis ACTIONABLE

Current State: We check .htaccess for compression Missing: Cache-Control and Expires headers for static files

What to Check: .htaccess for:

  • Cache-Control headers on CSS/JS/images
  • Expires headers
  • ETag configuration

Intelligent Remediation:

IF: No Cache-Control on static files
THEN: Add caching headers
  Add to .htaccess:
  <FilesMatch "\.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2)$">
    Header set Cache-Control "public, max-age=31536000"
  </FilesMatch>

  Impact: Browser won't re-request unchanged assets

Can We Add This?: YES - simple regex match in .htaccess


6. Concurrent User Capacity Calculation ACTIONABLE

Current State: We check PHP-FPM max_children Missing: Calculate safe concurrent users based on memory & TTFB

What to Check:

  • FPM max_children
  • Average request memory usage
  • Available server RAM
  • Estimated response time

Intelligent Remediation:

CALCULATE: Safe concurrent users
  Formula: (Available RAM * 0.5) / (Avg Request Memory)

  Example:
  - Server RAM: 16GB
  - PHP-FPM max_children: 40
  - Avg request uses: 20MB
  - Safe capacity: (16 * 0.5) / 20 = 40 concurrent users

  IF: FPM max_children > Safe capacity
  THEN: You can handle it, but monitor carefully

  IF: FPM max_children < Safe capacity / 2
  THEN: Can safely increase max_children
  ACTION: Increase to (Available RAM * 0.3) / Avg Request Memory

Can We Add This?: YES - we have all the data


7. Plugin Update Availability ACTIONABLE

Current State: We list active plugins Missing: Check which plugins have updates available

What to Check: For each active WordPress plugin:

  • Current installed version
  • Latest available version
  • Is there an update?

Intelligent Remediation:

Plugins with updates available: 7
  - Woocommerce: 8.0.1 → 8.1.2 (Available)
  - Yoast SEO: 20.0 → 20.3 (Available)
  - Jetpack: 12.0 → 12.3 (Available)

ACTION: Update plugins
  Command: wp plugin update --all

IMPACT: Bug fixes, security patches, performance improvements

Can We Add This?: YES - wp cli has wp plugin list with version info


Current State: We check PHP memory_limit Missing: Compare against WordPress minimum recommendations

What to Check:

  • WordPress minimum: 40MB (but really 256MB for most sites)
  • WooCommerce minimum: 256MB (really 512MB for >1000 products)
  • WP-Heavy: 512MB+

Intelligent Remediation:

WordPress 6.9.1 detected
Current memory_limit: 128M
WooCommerce: ACTIVE

Recommendation: 512M minimum (site has 2000 products)
Current: 128M - DANGEROUSLY LOW

ACTION: Increase to 512M
  Edit /home/{user}/public_html/wp-config.php
  Add: define( 'WP_MEMORY_LIMIT', '512M' );

  If WooCommerce memory issues continue:
  define( 'WP_MEMORY_LIMIT', '1024M' ); (1GB)

Can We Add This?: YES - we already detect WordPress version, plugins, and memory


9. Domain Content Analysis: Orphaned Content ACTIONABLE

Current State: We check file count and size Missing: Detection of orphaned content (posts with no images, revisions, etc)

What to Check:

  • Orphaned post revisions (already checking)
  • Orphaned attachments (files with no post)
  • Orphaned postmeta (meta for deleted posts) - partially checking
  • Broken references in database

Intelligent Remediation:

Orphaned database content found:
  - Postmeta entries: 450 (posts have been deleted)
  - Attachment posts: 34 (files exist but no parent post)

ACTION: Clean up orphaned content
  Command: wp post delete $(wp db query "SELECT ID FROM wp_posts WHERE post_type='attachment' AND post_parent=0")
  Impact: Reduce database size, improve query performance

Can We Add This?: YES - specific database queries


10. Slow Query Classification & Remediation ACTIONABLE

Current State: We show slow queries exist Missing: Categorize by type and provide specific fixes

What to Check: Classify slow queries as:

  • Missing index queries
  • Function-wrapped column queries
  • N+1 query patterns
  • Full table scans
  • Cartesian product queries

Intelligent Remediation:

Slow Query Classification:

MISSING INDEX (can fix immediately):
  SELECT * FROM wp_postmeta WHERE meta_key='my_meta'
  Fix: ALTER TABLE wp_postmeta ADD INDEX (meta_key);

FUNCTION-WRAPPED (requires refactor):
  SELECT * FROM wp_posts WHERE YEAR(post_date) = 2024
  Fix: Use date range instead of YEAR function

CARTESIAN PRODUCT (complex):
  SELECT * FROM wp_posts p, wp_postmeta pm WHERE p.ID = pm.post_id
  Fix: Use JOIN syntax and add indexes

Can We Add This?: PARTIALLY - requires parsing slow query log


11. Database Growth Rate & Retention Policy ACTIONABLE

Current State: We check current size Missing: Estimate growth and recommend cleanup

What to Check:

  • Current database size
  • Compare against historical size (if available)
  • Estimate monthly growth
  • Recommend retention policies

Intelligent Remediation:

Database Analysis:
  Current size: 850MB
  Estimated monthly growth: 50MB (based on post/comment creation)

Projection:
  In 6 months: 1.15GB
  In 1 year: 1.45GB

RECOMMENDATIONS:
  1. Limit post revisions to 5: define('WP_POST_REVISIONS', 5);
  2. Auto-delete spam comments: Enable WP comment auto-delete
  3. Archive old posts (> 2 years): Keep current, move older to archive
  4. Cleanup transients weekly: wp transient delete-expired

Can We Add This?: PARTIALLY - need historical data for growth rate


12. PHP-FPM Configuration Optimization ACTIONABLE

Current State: We detect pm mode (static/ondemand/dynamic) Missing: Recommend optimal settings based on load

What to Check:

  • Current pm (process manager) mode
  • Current max_children
  • Memory per request
  • Peak concurrent requests from logs

Intelligent Remediation:

Current FPM Config:
  pm = ondemand
  max_children = 5
  Server RAM: 16GB
  Avg request memory: 25MB

Analysis:
  With 5 children × 25MB = 125MB used by PHP
  Safe to increase to: (16GB × 0.4) / 25MB = 256 children

Recommendations:
  1. Change to pm = dynamic (better than ondemand for traffic spikes)
  2. Set min_spare_servers = 20
  3. Set max_spare_servers = 50
  4. Set max_children = 150

  This provides buffer for traffic spikes without memory waste

Can We Add This?: YES - we have RAM info and can estimate


13. Image Optimization Opportunities ACTIONABLE

Current State: We check WebP vs legacy formats Missing: Identify largest images for targeted optimization

What to Check:

  • List largest images (>2MB, >5MB)
  • Images that would benefit most from compression
  • Images that could be lazy-loaded

Intelligent Remediation:

Largest images found:
  1. /wp-content/uploads/2024/01/header-banner.jpg (8.2MB)
  2. /wp-content/uploads/2023/12/product-image.jpg (5.1MB)
  3. /wp-content/uploads/2024/02/team-photo.jpg (4.8MB)

QUICK WINS:
  Command: find wp-content/uploads -name "*.jpg" -size +3M -exec convert {} -resize 75% {} \;

  Or use online tools:
  - TinyJPG.com (compress 1 image for free)
  - ShortPixel (WordPress plugin)
  - ImageOptim (Mac)

Estimated impact: 15-20% page load time reduction

Can We Add This?: YES - straightforward find/stat analysis


14. Plugin Interaction Warnings ACTIONABLE

Current State: We count plugins Missing: Warn about known plugin conflicts

What to Check: Known problematic plugin combinations:

  • Multiple SEO plugins (Yoast + All in One SEO)
  • Multiple security plugins (Wordfence + Sucuri)
  • Multiple caching plugins (W3TC + WP Super Cache)
  • Old plugins + new PHP versions

Intelligent Remediation:

Plugin Conflict Detected:
  - Yoast SEO 20.0 (Active)
  - All in One SEO 4.4 (Active)

ISSUE: Both plugins duplicate SEO metadata
SOLUTION: Keep one, deactivate the other
  Option A: Keep Yoast (more mature): wp plugin deactivate all-in-one-seo
  Option B: Keep All in One SEO (lighter): wp plugin deactivate wordpress-seo

IMPACT: 5-10% faster page load after deactivation

Can We Add This?: YES - we have plugin list


15. Caching Strategy Recommendation ACTIONABLE

Current State: We detect if cache is installed Missing: Recommend caching strategy based on site type

What to Check:

  • Site type (WordPress, Drupal, etc.)
  • Number of products (if WooCommerce)
  • Number of posts
  • Comment frequency
  • Cache software available

Intelligent Remediation:

WordPress site detected with WooCommerce
  Products: 1,200
  Monthly updates: ~50
  Visitors: Estimated 1000+/day

CACHING STRATEGY:
  1. Enable Memcached or Redis (detected: Redis available!)
     wp plugin install redis-cache --activate

  2. Configure caching plugin
     WP Super Cache or W3 Total Cache

  3. Set cache duration
     Product pages: 6 hours (products don't change often)
     Homepage: 1 hour (needs to show latest)
     Others: 24 hours

  4. Clear cache on product updates
     Automatic via WooCommerce hooks

EXPECTED IMPROVEMENT: 3-5x faster page loads

Can We Add This?: YES - we have all the info


SUMMARY OF ACTIONABLE GAPS

# Check Difficulty Impact Status
1 Database/Memory Correlation Easy HIGH Can add
2 Missing Critical Indexes Medium HIGH Can add
3 PHP Version Compatibility Easy MEDIUM Can add
4 Query Optimization Patterns Hard HIGH ⚠️ Complex
5 Static File Caching Headers Easy MEDIUM Can add
6 Concurrent User Capacity Medium MEDIUM Can add
7 Plugin Update Availability Easy LOW Can add
8 Memory Allocation vs Recommended Easy MEDIUM Can add
9 Orphaned Content Detection Medium MEDIUM Can add
10 Slow Query Classification Hard HIGH ⚠️ Complex
11 Database Growth Rate Hard LOW ⚠️ Need history
12 PHP-FPM Optimization Medium HIGH Can add
13 Image Optimization Targets Easy MEDIUM Can add
14 Plugin Conflict Detection Easy LOW Can add
15 Caching Strategy Recommendation Medium HIGH Can add

TIER A: Add First (High Impact, Easy)

  1. Missing Critical Indexes Detection
  2. Database/Memory Correlation
  3. Recommended Memory Allocation Comparison
  4. PHP Version Compatibility Check
  5. Static File Caching Headers Analysis
  6. PHP-FPM Optimization Recommendations

TIER B: Add Second (Medium Priority)

  1. Concurrent User Capacity Calculation
  2. Orphaned Content Detection
  3. Caching Strategy Recommendation
  4. Image Optimization Targets
  5. Plugin Update Availability

TIER C: Add Later (Complex/Lower Impact)

  1. Slow Query Classification
  2. Query Optimization Patterns
  3. Database Growth Rate Estimation
  4. Plugin Conflict Detection

IMPLEMENTATION APPROACH

Each new check should:

  1. Have a dedicated analysis function
  2. Save findings to appropriate temp file
  3. Include intelligent remediation with actual commands
  4. Be actionable (not just informational)
  5. Include specific commands users can run

Example format:

analyze_missing_indexes() {
    local db_name="$1"

    # Check for tables without recommended indexes
    # For each missing index:
    #   - Show the problem
    #   - Give the exact ALTER TABLE command
    #   - Estimate the impact

    save_analysis_data "database_analysis.tmp" "CRITICAL: Missing index on wp_postmeta(meta_key)"
    save_analysis_data "database_analysis.tmp" "Command: ALTER TABLE wp_postmeta ADD INDEX (meta_key);"
    save_analysis_data "database_analysis.tmp" "Impact: 50-80% faster meta queries"
}