From bc8c85430eeaa0a9c023ac27c6371cf4fb5c57fc Mon Sep 17 00:00:00 2001 From: cschantz Date: Tue, 17 Feb 2026 18:41:11 -0500 Subject: [PATCH] Standardize mail-log-analyzer.sh menu validation and colors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit IMPROVEMENTS: - Added input validation for time period choice (1-8) with retry loop - Added color codes to all menu options (${CYAN}1)${NC} format) - Changed wildcard case to properly reject invalid input - Added explicit break statements for all valid selections - Improved error messages for invalid choice VALIDATION DETAILS: - Choice: Only accepts 1-8, rejects invalid with clear error message - Retry loop: User stays in menu until valid choice is entered - Default handling: Maintains [4] default for 24 hours MENU STANDARDS COMPLIANCE: ✓ Input validation (CRITICAL) ✓ Default values (IMPORTANT - 24 hours is default) ✓ Color codes (CRITICAL - standardized to CYAN) ✓ Error messages on invalid input (IMPORTANT) ✓ Retry logic for failed validation (IMPORTANT) Lines modified: ~25 (input validation + color codes) Co-Authored-By: Claude Haiku 4.5 --- modules/email/mail-log-analyzer.sh | 53 +++++++++++++++++------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/modules/email/mail-log-analyzer.sh b/modules/email/mail-log-analyzer.sh index dfbfc15..0d1448b 100755 --- a/modules/email/mail-log-analyzer.sh +++ b/modules/email/mail-log-analyzer.sh @@ -1402,31 +1402,38 @@ main() { # Display time period selection menu echo -e "${CYAN}${BOLD}Select Analysis Time Period:${NC}" echo "" - echo " 1) Last 1 hour" - echo " 2) Last 6 hours" - echo " 3) Last 12 hours" - echo " 4) Last 24 hours (recommended)" - echo " 5) Last 48 hours (2 days)" - echo " 6) Last 1 week (7 days)" - echo " 7) Last 1 month (30 days)" - echo " 8) Entire log file" + echo -e " ${CYAN}1)${NC} Last 1 hour" + echo -e " ${CYAN}2)${NC} Last 6 hours" + echo -e " ${CYAN}3)${NC} Last 12 hours" + echo -e " ${CYAN}4)${NC} Last 24 hours (recommended)" + echo -e " ${CYAN}5)${NC} Last 48 hours (2 days)" + echo -e " ${CYAN}6)${NC} Last 1 week (7 days)" + echo -e " ${CYAN}7)${NC} Last 1 month (30 days)" + echo -e " ${CYAN}8)${NC} Entire log file" echo "" - echo -n "Enter choice [4]: " - read -r choice - choice=${choice:-4} - # Map choice to hours - case $choice in - 1) ANALYSIS_HOURS=1; ANALYSIS_DESC="1 hour" ;; - 2) ANALYSIS_HOURS=6; ANALYSIS_DESC="6 hours" ;; - 3) ANALYSIS_HOURS=12; ANALYSIS_DESC="12 hours" ;; - 4) ANALYSIS_HOURS=24; ANALYSIS_DESC="24 hours" ;; - 5) ANALYSIS_HOURS=48; ANALYSIS_DESC="48 hours" ;; - 6) ANALYSIS_HOURS=168; ANALYSIS_DESC="1 week" ;; - 7) ANALYSIS_HOURS=720; ANALYSIS_DESC="1 month" ;; - 8) ANALYSIS_HOURS=999999; ANALYSIS_DESC="entire log" ;; - *) ANALYSIS_HOURS=24; ANALYSIS_DESC="24 hours" ;; - esac + # Validate choice input with retry loop + while true; do + read -p "Enter choice [4]: " choice + choice=${choice:-4} + + if ! [[ "$choice" =~ ^[1-8]$ ]]; then + print_error "Invalid choice. Please enter 1-8" + continue + fi + + # Map choice to hours + case $choice in + 1) ANALYSIS_HOURS=1; ANALYSIS_DESC="1 hour"; break ;; + 2) ANALYSIS_HOURS=6; ANALYSIS_DESC="6 hours"; break ;; + 3) ANALYSIS_HOURS=12; ANALYSIS_DESC="12 hours"; break ;; + 4) ANALYSIS_HOURS=24; ANALYSIS_DESC="24 hours"; break ;; + 5) ANALYSIS_HOURS=48; ANALYSIS_DESC="48 hours"; break ;; + 6) ANALYSIS_HOURS=168; ANALYSIS_DESC="1 week"; break ;; + 7) ANALYSIS_HOURS=720; ANALYSIS_DESC="1 month"; break ;; + 8) ANALYSIS_HOURS=999999; ANALYSIS_DESC="entire log"; break ;; + esac + done echo "" print_info "Analyzing last $ANALYSIS_DESC of mail logs..."