#!/bin/bash # LiteSpeed Cache Critical Metrics Monitor # Captures the 4 most important performance metrics # Find WP-CLI location WP_CLI_PATH="" if [ -f "/home/litespeed/bin/wp" ]; then WP_CLI_PATH="/home/litespeed/bin/wp" elif command -v wp >/dev/null 2>&1; then WP_CLI_PATH="wp" else echo '{"error": "WP-CLI not found. Please ensure WP-CLI is installed and accessible."}' exit 1 fi # Function to run WP-CLI commands run_wp_command() { $WP_CLI_PATH --path=/var/www/webroot/ROOT "$@" 2>/dev/null } # Initialize JSON output echo "{" echo ' "timestamp": "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'",' echo ' "litespeed_metrics": {' # 1. CACHE STATUS & HIT RATE echo ' "cache_status": {' cache_enabled=$(run_wp_command litespeed-option get cache) cache_ttl_pub=$(run_wp_command litespeed-option get cache-ttl_pub) cache_ttl_priv=$(run_wp_command litespeed-option get cache-ttl_priv) cache_browser=$(run_wp_command litespeed-option get cache-browser) echo ' "enabled": "'${cache_enabled:-"unknown"}'",' echo ' "public_ttl_seconds": "'${cache_ttl_pub:-"0"}'",' echo ' "private_ttl_seconds": "'${cache_ttl_priv:-"0"}'",' echo ' "browser_cache": "'${cache_browser:-"unknown"}'",' # Get cache effectiveness from debug if available cache_effectiveness="unknown" if run_wp_command litespeed-option get debug 2>/dev/null | grep -q "1"; then cache_effectiveness="debug_enabled" fi echo ' "effectiveness": "'$cache_effectiveness'"' echo ' },' # 2. IMAGE OPTIMIZATION METRICS echo ' "image_optimization": {' img_status=$(run_wp_command litespeed-image status 2>/dev/null) # Parse image optimization status if [[ -n "$img_status" ]]; then # Extract key metrics from status output total_images=$(echo "$img_status" | grep -o "Total.*[0-9]\+" | grep -o "[0-9]\+" | head -1) optimized_images=$(echo "$img_status" | grep -o "Optimized.*[0-9]\+" | grep -o "[0-9]\+" | head -1) pending_images=$(echo "$img_status" | grep -o "Pending.*[0-9]\+" | grep -o "[0-9]\+" | head -1) echo ' "total_images": "'${total_images:-"0"}'",' echo ' "optimized_images": "'${optimized_images:-"0"}'",' echo ' "pending_images": "'${pending_images:-"0"}'",' # Calculate optimization percentage if [[ -n "$total_images" && "$total_images" -gt 0 && -n "$optimized_images" ]]; then optimization_percentage=$(awk "BEGIN {printf \"%.1f\", ($optimized_images / $total_images) * 100}") else optimization_percentage="0.0" fi echo ' "optimization_percentage": "'$optimization_percentage'%",' echo ' "status": "available"' else echo ' "total_images": "0",' echo ' "optimized_images": "0",' echo ' "pending_images": "0",' echo ' "optimization_percentage": "0.0%",' echo ' "status": "unavailable"' fi echo ' },' # 3. CDN STATUS & PERFORMANCE echo ' "cdn_performance": {' cdn_status=$(run_wp_command litespeed-online cdn_status 2>/dev/null) active_nodes=$(run_wp_command litespeed-online nodes 2>/dev/null) if [[ -n "$cdn_status" ]]; then # Parse CDN status if echo "$cdn_status" | grep -q -i "enabled\|active"; then cdn_enabled="true" else cdn_enabled="false" fi # Count active nodes node_count=$(echo "$active_nodes" | wc -l) if [[ "$node_count" -le 1 ]]; then node_count="0" fi echo ' "enabled": "'$cdn_enabled'",' echo ' "active_nodes": "'$node_count'",' echo ' "status": "connected"' else echo ' "enabled": "false",' echo ' "active_nodes": "0",' echo ' "status": "disconnected"' fi echo ' },' # 4. QUIC.CLOUD SERVICE USAGE echo ' "quic_cloud_services": {' # Sync service data first run_wp_command litespeed-online sync >/dev/null 2>&1 services_list=$(run_wp_command litespeed-online services 2>/dev/null) if [[ -n "$services_list" ]]; then # Parse services - look for common service indicators img_optm_available="false" cdn_available="false" if echo "$services_list" | grep -q -i "image\|img_optm"; then img_optm_available="true" fi if echo "$services_list" | grep -q -i "cdn"; then cdn_available="true" fi # Count total services service_count=$(echo "$services_list" | grep -c ":" 2>/dev/null || echo "0") echo ' "image_optimization_available": "'$img_optm_available'",' echo ' "cdn_available": "'$cdn_available'",' echo ' "total_services": "'$service_count'",' echo ' "connection_status": "connected",' echo ' "last_sync": "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'"' else echo ' "image_optimization_available": "false",' echo ' "cdn_available": "false",' echo ' "total_services": "0",' echo ' "connection_status": "disconnected",' echo ' "last_sync": "never"' fi echo ' }' echo ' },' # SUMMARY HEALTH SCORE echo ' "health_summary": {' # Calculate overall health score (0-100) health_score=0 # Cache enabled adds 30 points if [[ "$cache_enabled" == "1" ]]; then health_score=$((health_score + 30)) fi # Image optimization adds 25 points if [[ "$optimization_percentage" != "0.0%" ]]; then health_score=$((health_score + 25)) fi # CDN enabled adds 25 points if [[ "$cdn_enabled" == "true" ]]; then health_score=$((health_score + 25)) fi # QUIC.cloud connected adds 20 points if [[ "$service_count" -gt 0 ]]; then health_score=$((health_score + 20)) fi # Determine health status if [[ $health_score -ge 80 ]]; then health_status="excellent" elif [[ $health_score -ge 60 ]]; then health_status="good" elif [[ $health_score -ge 40 ]]; then health_status="fair" else health_status="poor" fi echo ' "score": "'$health_score'/100",' echo ' "status": "'$health_status'",' # Recommendations recommendations=() if [[ "$cache_enabled" != "1" ]]; then recommendations+=("Enable LiteSpeed Cache") fi if [[ "$optimization_percentage" == "0.0%" ]]; then recommendations+=("Configure Image Optimization") fi if [[ "$cdn_enabled" != "true" ]]; then recommendations+=("Enable CDN") fi if [[ "$service_count" -eq 0 ]]; then recommendations+=("Connect to QUIC.cloud Services") fi echo ' "recommendations": [' for i in "${!recommendations[@]}"; do echo -n ' "'${recommendations[$i]}'"' if [[ $i -lt $((${#recommendations[@]} - 1)) ]]; then echo "," else echo "" fi done echo ' ]' echo ' }' echo "}"