diff --git a/mbadmin.jps b/mbadmin.jps index 7de363b..1a27e73 100644 --- a/mbadmin.jps +++ b/mbadmin.jps @@ -275,6 +275,11 @@ menu: caption: Get LiteSpeed TTL Values action: get_litespeed_ttl_values successText: "${response.out}" + - confirmText: Get comprehensive LiteSpeed metrics? + loadingText: Gathering metrics... + caption: Get LiteSpeed Metrics + action: litespeed_metrics + successText: "${response.out}" - confirmText: Are you sure you want to diagnose LiteSpeed configuration? loadingText: Analyzing configuration... caption: Diagnose LiteSpeed Config @@ -744,6 +749,14 @@ actions: - return: type: info message: "${response.out}" + litespeed_metrics: + - cmd[cp]: + user: root + commands: + - bash /home/litespeed/mbmanager/scripts/litespeed_metrics.sh + - return: + type: info + message: "${response.out}" db_import_preparation: - cmd[cp]: user: root diff --git a/scripts/litespeed_metrics.sh b/scripts/litespeed_metrics.sh new file mode 100644 index 0000000..53bde9e --- /dev/null +++ b/scripts/litespeed_metrics.sh @@ -0,0 +1,215 @@ +#!/bin/bash + +# LiteSpeed Cache Critical Metrics Monitor +# Captures the 4 most important performance metrics + +# Check if WP-CLI is available +if [ ! -f "/home/litespeed/bin/wp" ]; then + echo '{"error": "WP-CLI not found at /home/litespeed/bin/wp"}' + exit 1 +fi + +# Function to run WP-CLI commands +run_wp_command() { + /home/litespeed/bin/wp --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 "}" \ No newline at end of file