#!/bin/bash

# Interval between updates (in seconds)
INTERVAL=10
LOG_FILE="$HOME/server_health.log"   # User-level log (no sudo required)
MAX_LOG_SIZE=1048576  # 1MB

echo "---------------------------------------------"
echo "   Linux Server Health Monitor (Live View)"
echo "---------------------------------------------"
echo "Press [CTRL+C] to stop monitoring."
echo ""

while true
do
    echo "Timestamp: $(date '+%Y-%m-%d %H:%M:%S')"
    echo "---------------------------------------------"

    # CPU usage (overall)
    echo "CPU Usage (%):"
    CPU_IDLE=$(mpstat 1 1 | awk '/Average:/ && $NF ~ /[0-9.]+/ {print $NF}')
    if [[ -n "$CPU_IDLE" ]]; then
        CPU_USAGE=$(echo "scale=2; 100 - $CPU_IDLE" | bc)
        echo "Overall CPU Utilization: ${CPU_USAGE}%"
    else
        echo "Unable to read CPU usage"
        CPU_USAGE=0
    fi

    # Per-core usage
    echo "Per-Core CPU Usage (%):"
    mpstat -P ALL 1 1 | awk '/Average:/ && $2 != "CPU" {printf "Core %s: %.2f%%\n", $2, 100 - $NF}'

    # Health check & logging
    if (( $(echo "$CPU_USAGE > 90" | bc -l) )); then
        echo "System Health: ⚠️  Unstable (High CPU Usage: ${CPU_USAGE}%)"
        echo "$(date '+%Y-%m-%d %H:%M:%S') - Unstable (CPU: ${CPU_USAGE}%)" >> "$LOG_FILE"
    else
        echo "System Health: ✅ Healthy"
        echo "$(date '+%Y-%m-%d %H:%M:%S') - Healthy (CPU: ${CPU_USAGE}%)" >> "$LOG_FILE"
    fi

    # Memory usage
    echo ""
    echo "Memory Usage:"
    free -h | awk '/Mem:/ {
        used=$3; total=$2; perc=($3/$2)*100;
        printf "Used: %s / Total: %s (%.2f%%)\n", used, total, perc
    }'

    # Load averages
    echo ""
    echo "Load Average (1m, 5m, 15m):"
    uptime | awk -F'load average:' '{print $2}'

    # Disk usage
    echo ""
    echo "Disk Usage:"
    df -h --total | grep total | awk '{printf "Used: %s / Total: %s (%s used)\n", $3, $2, $5}'

    echo "---------------------------------------------"

    # Rotate log if too large
    if [[ -f "$LOG_FILE" && $(stat -c%s "$LOG_FILE") -ge $MAX_LOG_SIZE ]]; then
        mv "$LOG_FILE" "${LOG_FILE}.1"
        echo "$(date '+%Y-%m-%d %H:%M:%S') - Log rotated" > "$LOG_FILE"
    fi

    sleep $INTERVAL
done
