#!/bin/bash

# Script kiểm tra vòng đời SSD/NVMe và gửi cảnh báo Telegram nếu còn <30%
# Hỗ trợ CentOS 7 & Ubuntu

# === CẤU HÌNH TELEGRAM ===
TELEGRAM_BOT_TOKEN="6820256008:AAE0j_AC_fTRHfMQ9KK4uPAs_ngpVsme9u0"
TELEGRAM_CHAT_ID="-4092838030"
TELEGRAM_API="http://51.79.144.182/bot${TELEGRAM_BOT_TOKEN}/sendMessage"

# === THÔNG TIN SERVER ===
SERVER_NAME=$(hostname)
IP_PUBLIC=$(curl -s ifconfig.me)

# Hàm gửi cảnh báo đến Telegram
send_telegram_alert() {
    local message="$1"
    curl -s -X POST "$TELEGRAM_API" \
        -d chat_id="$TELEGRAM_CHAT_ID" \
        -d parse_mode="Markdown" \
        -d text="$message" >/dev/null
}

# Kiểm tra smartctl
if ! command -v smartctl &> /dev/null; then
    echo "❌ Yêu cầu cài đặt smartmontools. Cài đặt bằng:"
    echo "  CentOS: sudo yum install smartmontools -y"
    echo "  Ubuntu: sudo apt install smartmontools -y"
    exit 1
fi

echo ""
echo "📊 Báo cáo vòng đời thiết bị SSD/NVMe trên $SERVER_NAME ($IP_PUBLIC):"
echo "====================================================================="

# Lấy danh sách thiết bị lưu trữ
devices=($(lsblk -d -n -o NAME | grep -E '^sd|^nvme'))

if [ ${#devices[@]} -eq 0 ]; then
    echo "❌ Không tìm thấy thiết bị SSD/NVMe nào."
    exit 1
fi

for dev in "${devices[@]}"; do
    device_path="/dev/$dev"
    echo ""
    echo "📦 Thiết bị: $device_path"

    if [[ "$dev" =~ ^nvme ]]; then
        output=$(sudo smartctl -a "$device_path" 2>/dev/null)
        percent_used=$(echo "$output" | grep -i "Percentage Used" | awk '{print $3}' | sed 's/%//g')
        model=$(echo "$output" | grep -i "Model Number" | cut -d ':' -f2 | sed 's/^[ \t]*//')
        serial=$(echo "$output" | grep -i "Serial Number" | cut -d ':' -f2 | sed 's/^[ \t]*//')

        if [[ -n "$percent_used" ]]; then
            remaining=$((100 - percent_used))
            echo "  🧾 Model : $model"
            echo "  🔢 Serial: $serial"
            echo "  ⏳ Life Used: ${percent_used}%"
            echo "  ✅ Life Remaining: ${remaining}%"

            if [ "$remaining" -lt 30 ]; then
                alert_msg="⚠️ *SSD WARNING*\n*Server:* ${SERVER_NAME}\n*Public IP:* ${IP_PUBLIC}\n*Device:* $device_path\n*Model:* $model\n*Serial:* $serial\n*Life Remaining:* *${remaining}%*"
                send_telegram_alert "$alert_msg"
            fi
        else
            echo "⚠️ Không thể đọc thông tin life cycle của thiết bị NVMe này."
        fi

    else
        output=$(sudo smartctl -A "$device_path" 2>/dev/null)
        model=$(sudo smartctl -i "$device_path" | grep "Device Model" | cut -d ':' -f2 | sed 's/^[ \t]*//')
        serial=$(sudo smartctl -i "$device_path" | grep "Serial Number" | cut -d ':' -f2 | sed 's/^[ \t]*//')

        # Dò attribute thông dụng
        life_attr=$(echo "$output" | egrep "^(177|202|231|233|241|246|250)" | head -n1)
        value=$(echo "$life_attr" | awk '{print $10}')

        echo "  🧾 Model : $model"
        echo "  🔢 Serial: $serial"

        if [[ -n "$value" && "$value" -le 100 ]]; then
            remaining="$value"
            used=$((100 - remaining))
            echo "  ⏳ Life Used: ${used}%"
            echo "  ✅ Life Remaining: ${remaining}%"

            if [ "$remaining" -lt 30 ]; then
                alert_msg="⚠️ *SSD WARNING*\n*Server:* ${SERVER_NAME}\n*Public IP:* ${IP_PUBLIC}\n*Device:* $device_path\n*Model:* $model\n*Serial:* $serial\n*Life Remaining:* *${remaining}%*"
                send_telegram_alert "$alert_msg"
            fi
        else
            echo "⚠️ Không thể đọc thông tin life cycle từ SMART attribute."
        fi
    fi
done

echo ""

