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..."