Compare commits

...

3 Commits

Author SHA1 Message Date
cschantz 182f74ae4b Add optimization status indicators to domain selection
- Show [NEEDS OPTIMIZATION] or [OK] status next to each domain
- Helps users quickly identify which domains require work
- Uses detect_php_config_issues to check critical/high severity issues
- Provides visual cues for faster domain selection
- Only shows status for optimize action to reduce processing overhead

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-02-17 23:01:14 -05:00
cschantz 329772532d Add comprehensive report generation to batch analyzer
- Prompts user to save detailed report after analysis
- Generates formatted text report with full domain breakdown
- Includes server info, domain analysis, summary, and recommendations
- Shows memory impact, traffic data, and optimization potential
- Saves to /tmp with timestamp for easy reference
- Provides actionable recommendations based on findings

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-02-17 23:00:53 -05:00
cschantz ddb8136f79 Add traffic analysis (peak concurrent requests) to batch analyzer
- Display peak concurrent requests for each domain
- Helps identify which domains are busiest
- Provides context for optimization decisions
- Uses get_domain_peak_concurrent from php-scanner module
- Shows traffic alongside current/recommended max_children

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-02-17 23:00:28 -05:00
2 changed files with 104 additions and 11 deletions
+87 -9
View File
@@ -82,6 +82,7 @@ declare -a current_max_children
declare -a recommended_max_children declare -a recommended_max_children
declare -a memory_impact declare -a memory_impact
declare -a needs_optimization declare -a needs_optimization
declare -a peak_concurrent
TOTAL_DOMAINS=0 TOTAL_DOMAINS=0
TOTAL_CURRENT_MEMORY=0 TOTAL_CURRENT_MEMORY=0
@@ -126,6 +127,11 @@ while IFS= read -r username; do
impact=$((current_memory - recommended_memory)) impact=$((current_memory - recommended_memory))
memory_impact[$TOTAL_DOMAINS]="$impact" memory_impact[$TOTAL_DOMAINS]="$impact"
# Get peak concurrent requests for this domain
local peak
peak=$(get_domain_peak_concurrent "$domain" 2>/dev/null || echo "?")
peak_concurrent[$TOTAL_DOMAINS]="$peak"
# Track totals # Track totals
TOTAL_CURRENT_MEMORY=$((TOTAL_CURRENT_MEMORY + current_memory)) TOTAL_CURRENT_MEMORY=$((TOTAL_CURRENT_MEMORY + current_memory))
TOTAL_RECOMMENDED_MEMORY=$((TOTAL_RECOMMENDED_MEMORY + recommended_memory)) TOTAL_RECOMMENDED_MEMORY=$((TOTAL_RECOMMENDED_MEMORY + recommended_memory))
@@ -153,6 +159,7 @@ for idx in $(seq 1 $TOTAL_DOMAINS); do
recommended="${recommended_max_children[$idx]}" recommended="${recommended_max_children[$idx]}"
impact="${memory_impact[$idx]}" impact="${memory_impact[$idx]}"
optimize="${needs_optimization[$idx]}" optimize="${needs_optimization[$idx]}"
peak="${peak_concurrent[$idx]}"
if [ "$current" == "ERROR" ]; then if [ "$current" == "ERROR" ]; then
continue continue
@@ -162,6 +169,7 @@ for idx in $(seq 1 $TOTAL_DOMAINS); do
if [ "$optimize" == "YES" ]; then if [ "$optimize" == "YES" ]; then
cecho "${YELLOW}[$idx]${NC} $domain" cecho "${YELLOW}[$idx]${NC} $domain"
cecho " Owner: $owner" cecho " Owner: $owner"
cecho " Peak concurrent requests: ${WHITE}$peak${NC}"
cecho " Current max_children: ${RED}$current${NC} → Recommended: ${GREEN}$recommended${NC}" cecho " Current max_children: ${RED}$current${NC} → Recommended: ${GREEN}$recommended${NC}"
cecho " Memory impact: ${GREEN}+${impact}MB${NC} if optimized" cecho " Memory impact: ${GREEN}+${impact}MB${NC} if optimized"
cecho " Status: ${YELLOW}NEEDS OPTIMIZATION${NC}" cecho " Status: ${YELLOW}NEEDS OPTIMIZATION${NC}"
@@ -169,6 +177,7 @@ for idx in $(seq 1 $TOTAL_DOMAINS); do
else else
cecho "${GREEN}[$idx]${NC} $domain" cecho "${GREEN}[$idx]${NC} $domain"
cecho " Owner: $owner" cecho " Owner: $owner"
cecho " Peak concurrent requests: ${WHITE}$peak${NC}"
cecho " max_children: $current (already optimized)" cecho " max_children: $current (already optimized)"
cecho " Status: ${GREEN}OK${NC}" cecho " Status: ${GREEN}OK${NC}"
fi fi
@@ -247,27 +256,96 @@ cecho "${WHITE}${BOLD}Report complete${NC}"
cecho " Generated: $(date '+%Y-%m-%d %H:%M:%S')" cecho " Generated: $(date '+%Y-%m-%d %H:%M:%S')"
echo "" echo ""
# Optional: save to file # Ask if user wants to save report
echo ""
cecho "${CYAN}─────────────────────────────────────────────────────────────────────${NC}"
read -p "Save detailed report to file? (y/n): " save_report
echo ""
REPORT_FILE="/tmp/php-fpm-analysis-$(date +%Y%m%d-%H%M%S).txt" REPORT_FILE="/tmp/php-fpm-analysis-$(date +%Y%m%d-%H%M%S).txt"
if [ -w /tmp ]; then
if [[ "$save_report" =~ ^[yY]$ ]] && [ -w /tmp ]; then
{ {
echo "PHP-FPM BATCH ANALYSIS REPORT" echo "╔════════════════════════════════════════════════════════════════════════╗"
echo "Generated: $(date)" echo "║ PHP-FPM BATCH ANALYSIS REPORT ║"
echo "╚════════════════════════════════════════════════════════════════════════╝"
echo "" echo ""
echo "REPORT GENERATED: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
echo "═══════════════════════════════════════════════════════════════════════════"
echo "SERVER INFORMATION" echo "SERVER INFORMATION"
echo "═══════════════════════════════════════════════════════════════════════════"
echo "Total RAM: ${TOTAL_RAM_MB}MB" echo "Total RAM: ${TOTAL_RAM_MB}MB"
echo "CPU Cores: ${CPU_CORES}" echo "CPU Cores: ${CPU_CORES}"
echo "Control Panel: ${CONTROL_PANEL}" echo "Control Panel: ${CONTROL_PANEL}"
echo "" echo ""
echo "═══════════════════════════════════════════════════════════════════════════"
echo "DOMAIN-BY-DOMAIN ANALYSIS"
echo "═══════════════════════════════════════════════════════════════════════════"
echo ""
# Output domain details
for idx in $(seq 1 $TOTAL_DOMAINS); do
domain="${domain_list[$idx]}"
owner="${domain_owner[$idx]}"
current="${current_max_children[$idx]}"
recommended="${recommended_max_children[$idx]}"
impact="${memory_impact[$idx]}"
peak="${peak_concurrent[$idx]}"
if [ "$current" == "ERROR" ]; then
continue
fi
echo "[$idx] $domain"
echo " Owner: $owner"
echo " Peak concurrent requests: $peak"
echo " Current max_children: $current"
echo " Recommended max_children: $recommended"
echo " Memory impact: ${impact}MB"
echo ""
done
echo "═══════════════════════════════════════════════════════════════════════════"
echo "SUMMARY" echo "SUMMARY"
echo "Total domains: $TOTAL_DOMAINS" echo "═══════════════════════════════════════════════════════════════════════════"
echo ""
echo "Total domains analyzed: $TOTAL_DOMAINS"
echo "Domains needing optimization: $OPTIMIZATION_COUNT" echo "Domains needing optimization: $OPTIMIZATION_COUNT"
echo "Current memory allocation: ${TOTAL_CURRENT_MEMORY}MB (${CURRENT_PERCENT}%)" echo "Domains already optimized: $((TOTAL_DOMAINS - OPTIMIZATION_COUNT))"
echo "Recommended memory allocation: ${TOTAL_RECOMMENDED_MEMORY}MB (${RECOMMENDED_PERCENT}%)" echo ""
echo "Potential savings: ${POTENTIAL_SAVINGS}MB (${POTENTIAL_SAVINGS_PERCENT}%)" echo "Current memory allocation: ${TOTAL_CURRENT_MEMORY}MB (${CURRENT_PERCENT}% of RAM)"
echo "Recommended memory allocation: ${TOTAL_RECOMMENDED_MEMORY}MB (${RECOMMENDED_PERCENT}% of RAM)"
echo "Potential savings: ${POTENTIAL_SAVINGS}MB (${POTENTIAL_SAVINGS_PERCENT}% reduction)"
echo ""
echo "Memory available after optimization: $((TOTAL_RAM_MB - TOTAL_RECOMMENDED_MEMORY))MB"
echo ""
echo "═══════════════════════════════════════════════════════════════════════════"
echo "RECOMMENDATIONS"
echo "═══════════════════════════════════════════════════════════════════════════"
echo ""
if [ "$OPTIMIZATION_COUNT" -gt 0 ]; then
echo "Action: Optimize $OPTIMIZATION_COUNT domain(s)"
echo "Run: php-optimizer.sh → Option 5 (Optimize Server-Wide PHP Settings)"
echo "Expected outcome: Free up ${POTENTIAL_SAVINGS}MB of RAM"
else
echo "Status: All domains are already optimally configured"
echo "No optimization needed at this time"
fi
if [ "$(echo "$AVAILABLE_AFTER_RECOMMENDED < 2048" | bc)" -eq 1 ] 2>/dev/null; then
echo ""
echo "WARNING: Memory headroom after optimization is limited (${AVAILABLE_AFTER_RECOMMENDED}MB)"
echo "Consider reducing some domain limits further or upgrading server RAM"
fi
} > "$REPORT_FILE" } > "$REPORT_FILE"
cecho "Report saved to: ${CYAN}$REPORT_FILE${NC}" cecho "${GREEN}${NC} Detailed report saved to: ${CYAN}$REPORT_FILE${NC}"
echo ""
fi fi
echo "" echo ""
+17 -2
View File
@@ -110,7 +110,7 @@ select_domain() {
return 1 return 1
fi fi
# Display numbered list # Display numbered list with optimization status
cecho "${CYAN}Available domains:${NC}" cecho "${CYAN}Available domains:${NC}"
echo "" echo ""
@@ -120,7 +120,22 @@ select_domain() {
local php_version local php_version
php_version=$(detect_php_version_for_domain "$username" "$domain" 2>/dev/null || echo "unknown") php_version=$(detect_php_version_for_domain "$username" "$domain" 2>/dev/null || echo "unknown")
printf " ${GREEN}%-3d${NC}) %-40s ${CYAN}[${username}]${NC} ${YELLOW}(${php_version})${NC}\n" "$index" "$domain" # Check optimization status (only for optimize action to reduce noise)
local status_indicator=""
if [[ "$action" == "optimize" ]]; then
local issues
issues=$(detect_php_config_issues "$username" "$domain" 2>/dev/null || echo "NONE|NONE|None")
local has_high_issues
has_high_issues=$(echo "$issues" | grep -cE "^[^|]*\|(CRITICAL|HIGH)\|" 2>/dev/null || echo "0")
if [ "$has_high_issues" -gt 0 ]; then
status_indicator="${YELLOW}[NEEDS OPTIMIZATION]${NC}"
else
status_indicator="${GREEN}[OK]${NC}"
fi
fi
printf " ${GREEN}%-3d${NC}) %-40s ${CYAN}[${username}]${NC} ${YELLOW}(${php_version})${NC} %s\n" "$index" "$domain" "$(echo -e "$status_indicator")"
index=$((index + 1)) index=$((index + 1))
done done