Files
Linux-Server-Management-Too…/modules/backup/acronis-logs.sh
T
cschantz f92a07923a Fix final 3 HIGH integer comparisons - ALL HIGH ISSUES RESOLVED!
FIXES:
acronis-logs.sh:
- Line 278: $choice → ${choice:-0} (2 instances)

acronis-register.sh:
- Line 174: $REG_EXIT_CODE → ${REG_EXIT_CODE:-0}

acronis-uninstall.sh:
- Line 217: $remaining → ${remaining:-0}

MILESTONE ACHIEVED:
🎉 ALL HIGH-PRIORITY INTEGER COMPARISON ISSUES FIXED! 🎉

QA STATUS:
- CRITICAL issues: 0 (was 8)  ✓ FIXED
- HIGH issues: 0 (was 20+)    ✓ FIXED
- MEDIUM issues: 9            (pending)
- LOW issues: 11              (pending)
- Total issues: 20 (was 41 originally)

STATISTICS:
- Files fixed: 25+
- Integer comparisons fixed: 60+
- Commits in this session: 6
- All critical bash errors eliminated!

Remaining work:
- 9 MEDIUM: Hardcoded /var/cpanel paths (multi-panel support)
- 11 LOW: bc command usage + undefined color variable
2025-12-03 20:16:00 -05:00

297 lines
9.1 KiB
Bash
Executable File

#!/bin/bash
################################################################################
# Acronis Log Viewer
################################################################################
# Purpose: View and tail Acronis Cyber Protect logs
# Log location: /var/lib/Acronis/BackupAndRecovery/MMS/
# Primary log: mms.0.log
################################################################################
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
source "$SCRIPT_DIR/lib/common-functions.sh"
source "$SCRIPT_DIR/lib/system-detect.sh"
# Require root
if [ "$EUID" -ne 0 ]; then
print_error "This script must be run as root"
exit 1
fi
# Log directory
LOG_DIR="/var/lib/Acronis/BackupAndRecovery/MMS"
PRIMARY_LOG="$LOG_DIR/mms.0.log"
print_banner "Acronis Logs Viewer"
# Check if Acronis is installed
if [ ! -d "$LOG_DIR" ]; then
echo ""
print_error "Acronis log directory not found"
echo ""
echo "Acronis may not be installed or logs are in a different location."
echo ""
press_enter
exit 1
fi
echo ""
echo -e "${BOLD}Acronis Log Management${NC}"
echo ""
echo "Log directory: ${LOG_DIR}"
echo ""
# Show log menu
show_log_menu() {
clear
print_banner "Acronis Logs Viewer"
echo ""
echo -e "${BOLD}Available Logs:${NC}"
echo ""
# List all log files with sizes
if [ -d "$LOG_DIR" ]; then
local log_count=0
while IFS= read -r log_file; do
((log_count++))
local size=$(du -h "$log_file" 2>/dev/null | awk '{print $1}')
local filename=$(basename "$log_file")
local mod_time=$(stat -c %y "$log_file" 2>/dev/null | cut -d'.' -f1)
echo -e " ${CYAN}${log_count})${NC} ${filename}"
echo -e " Size: ${size} | Modified: ${mod_time}"
done < <(find "$LOG_DIR" -name "*.log" -type f | sort)
if [ "${log_count:-0}" -eq 0 ]; then
echo -e " ${DIM}No log files found${NC}"
fi
fi
echo ""
echo -e "${BOLD}Actions:${NC}"
echo ""
echo -e " ${GREEN}v)${NC} View Primary Log (last 100 lines)"
echo -e " ${GREEN}t)${NC} Tail Primary Log (live follow)"
echo -e " ${GREEN}s)${NC} Search Logs"
echo -e " ${GREEN}e)${NC} Show Errors Only"
echo -e " ${GREEN}a)${NC} Archive Old Logs"
echo ""
echo -e " ${RED}0)${NC} Return to Menu"
echo ""
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
echo -n "Select option: "
}
# View primary log
view_primary_log() {
clear
print_banner "Acronis Primary Log (Last 100 Lines)"
echo ""
if [ -f "$PRIMARY_LOG" ]; then
tail -100 "$PRIMARY_LOG"
echo ""
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
echo ""
press_enter
else
print_error "Primary log file not found: $PRIMARY_LOG"
press_enter
fi
}
# Tail primary log
tail_primary_log() {
clear
print_banner "Acronis Live Log (Ctrl+C to Exit)"
echo ""
echo "Following: $PRIMARY_LOG"
echo ""
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
echo ""
if [ -f "$PRIMARY_LOG" ]; then
tail -f "$PRIMARY_LOG"
else
print_error "Primary log file not found: $PRIMARY_LOG"
press_enter
fi
}
# Search logs
search_logs() {
clear
print_banner "Search Acronis Logs"
echo ""
echo -n "Enter search term: "
read -r search_term
if [ -z "$search_term" ]; then
print_error "No search term provided"
press_enter
return
fi
echo ""
echo "Searching for: ${search_term}"
echo ""
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
echo ""
# Search all log files
local found=false
while IFS= read -r log_file; do
if grep -qi "$search_term" "$log_file" 2>/dev/null; then
found=true
echo -e "${BOLD}$(basename "$log_file"):${NC}"
grep -i --color=always "$search_term" "$log_file" | tail -20
echo ""
fi
done < <(find "$LOG_DIR" -name "*.log" -type f)
if [ "$found" = false ]; then
echo "No matches found for: $search_term"
fi
echo ""
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
echo ""
press_enter
}
# Show errors only
show_errors() {
clear
print_banner "Acronis Errors (Last 50)"
echo ""
if [ -f "$PRIMARY_LOG" ]; then
echo "Filtering for ERROR, WARN, FAIL, CRITICAL..."
echo ""
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
echo ""
grep -iE "error|warn|fail|critical" "$PRIMARY_LOG" | tail -50 | while IFS= read -r line; do
# Color code by severity
if echo "$line" | grep -qi "critical"; then
echo -e "${RED}${BOLD}${line}${NC}"
elif echo "$line" | grep -qi "error"; then
echo -e "${RED}${line}${NC}"
elif echo "$line" | grep -qi "warn"; then
echo -e "${YELLOW}${line}${NC}"
else
echo "$line"
fi
done
echo ""
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
echo ""
else
print_error "Primary log file not found"
fi
press_enter
}
# Archive old logs
archive_old_logs() {
clear
print_banner "Archive Old Logs"
echo ""
# Calculate total size
local total_size=$(du -sh "$LOG_DIR" 2>/dev/null | awk '{print $1}')
local log_count=$(find "$LOG_DIR" -name "*.log" -type f | wc -l)
echo "Current log status:"
echo " Directory: $LOG_DIR"
echo " Total size: $total_size"
echo " Log files: $log_count"
echo ""
# Find old logs (older than 30 days)
local old_logs=$(find "$LOG_DIR" -name "*.log" -type f -mtime +30 2>/dev/null | wc -l)
if [ "${old_logs:-0}" -eq 0 ]; then
echo -e "${GREEN}✓ No old logs found (>30 days)${NC}"
echo ""
press_enter
return
fi
echo "Found $old_logs log file(s) older than 30 days"
echo ""
echo "Archive location: /root/acronis-logs-archive-$(date +%Y%m%d).tar.gz"
echo ""
echo -n "Create archive and remove old logs? (yes/no): "
read -r confirm
if [ "$confirm" != "yes" ]; then
echo ""
echo "Archive cancelled"
press_enter
return
fi
echo ""
echo "→ Creating archive..."
# Create archive
local archive_name="/root/acronis-logs-archive-$(date +%Y%m%d).tar.gz"
if find "$LOG_DIR" -name "*.log" -type f -mtime +30 -print0 2>/dev/null | tar -czf "$archive_name" --null -T -; then
print_success "Archive created: $archive_name"
# Remove old logs
echo ""
echo "→ Removing old logs..."
find "$LOG_DIR" -name "*.log" -type f -mtime +30 -delete 2>/dev/null
local remaining=$(find "$LOG_DIR" -name "*.log" -type f | wc -l)
echo ""
print_success "Old logs archived and removed"
echo ""
echo "Remaining log files: $remaining"
else
print_error "Failed to create archive"
fi
echo ""
press_enter
}
# Main loop
while true; do
show_log_menu
read -r choice
case $choice in
v) view_primary_log ;;
t) tail_primary_log ;;
s) search_logs ;;
e) show_errors ;;
a) archive_old_logs ;;
0) exit 0 ;;
*)
# Check if numeric selection for specific log file
if [[ "$choice" =~ ^[0-9]+$ ]]; then
log_files=($(find "$LOG_DIR" -name "*.log" -type f | sort))
if [ "${choice:-0}" -gt 0 ] && [ "${choice:-0}" -le ${#log_files[@]} ]; then
selected_log="${log_files[$((choice-1))]}"
clear
print_banner "Log: $(basename "$selected_log")"
echo ""
tail -100 "$selected_log"
echo ""
press_enter
else
print_error "Invalid log selection"
sleep 1
fi
else
print_error "Invalid option"
sleep 1
fi
;;
esac
done