#!/bin/bash
#=====================================================
# 磁盘空间监控脚本 - 超过阈值自动告警
# 来源: 整合自 aqzt/kjyw 快捷运维
# 用法: ./monitor-disk.sh [阈值%] [挂载点...]
# 示例: ./monitor-disk.sh 85 / /data /home
#=====================================================

THRESHOLD=${1:-85}
shift 2>/dev/null
MOUNTS=${*:-/}

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}     磁盘空间监控报告${NC}"
echo -e "${GREEN}========================================${NC}"
echo "检查时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "告警阈值: ${THRESHOLD}%"
echo ""

ALERT_FLAG=0

for mount in $MOUNTS; do
    if ! df -h "$mount" &>/dev/null; then
        echo -e "${YELLOW}[跳过] 挂载点 $mount 不存在${NC}"
        continue
    fi

    # 获取使用率
    USAGE=$(df -h "$mount" | tail -1 | awk '{print $5}' | sed 's/%//')
    TOTAL=$(df -h "$mount" | tail -1 | awk '{print $2}')
    USED=$(df -h "$mount" | tail -1 | awk '{print $3}')
    AVAIL=$(df -h "$mount" | tail -1 | awk '{print $4}')

    if [ "$USAGE" -ge "$THRESHOLD" ]; then
        echo -e "${RED}[告警] $mount  使用率: ${USAGE}%  总量: ${TOTAL}  已用: ${USED}  剩余: ${AVAIL}${NC}"
        ALERT_FLAG=1

        # 列出该分区最大的10个目录
        echo -e "${YELLOW}  占用空间最大的目录:${NC}"
        du -sh "$mount"/* 2>/dev/null | sort -rh | head -10 | while read line; do
            echo "    $line"
        done
    else
        echo -e "${GREEN}[正常] $mount  使用率: ${USAGE}%  总量: ${TOTAL}  已用: ${USED}  剩余: ${AVAIL}${NC}"
    fi
    echo ""
done

# Inode 检查
echo -e "${GREEN}[ Inode 检查 ]${NC}"
for mount in $MOUNTS; do
    if df -i "$mount" &>/dev/null; then
        INODE_USAGE=$(df -i "$mount" | tail -1 | awk '{print $5}' | sed 's/%//')
        if [ "$INODE_USAGE" -ge "$THRESHOLD" ]; then
            echo -e "${RED}  [告警] $mount Inode使用率: ${INODE_USAGE}%${NC}"
            ALERT_FLAG=1
        else
            echo -e "${GREEN}  [正常] $mount Inode使用率: ${INODE_USAGE}%${NC}"
        fi
    fi
done

if [ $ALERT_FLAG -eq 1 ]; then
    echo ""
    echo -e "${RED}⚠ 存在磁盘空间告警，请及时处理！${NC}"
    exit 1
else
    echo ""
    echo -e "${GREEN}✓ 所有磁盘空间正常${NC}"
    exit 0
fi