#!/bin/bash
# 系统健康检查脚本
# 可以设置为定时任务运行

LOG_FILE="/root/.openclaw/workspace/monitor/health-check.log"
ALERT_FILE="/root/.openclaw/workspace/monitor/alerts.log"

# 创建日志目录
mkdir -p /root/.openclaw/workspace/monitor

# 当前时间
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')

echo "========================================" >> $LOG_FILE
echo "健康检查: $TIMESTAMP" >> $LOG_FILE
echo "========================================" >> $LOG_FILE

# 检查nginx状态
echo "[1/6] 检查nginx..." >> $LOG_FILE
if systemctl is-active nginx > /dev/null 2>&1; then
    echo "✓ nginx: 运行正常" >> $LOG_FILE
else
    echo "✗ nginx: 未运行!" >> $LOG_FILE
    echo "$TIMESTAMP [ALERT] nginx未运行" >> $ALERT_FILE
fi

# 检查ERP后端
echo "[2/6] 检查ERP后端..." >> $LOG_FILE
if pgrep -f "node.*server" > /dev/null; then
    echo "✓ ERP后端: 运行正常" >> $LOG_FILE
else
    echo "✗ ERP后端: 未运行!" >> $LOG_FILE
    echo "$TIMESTAMP [ALERT] ERP后端未运行" >> $ALERT_FILE
fi

# 检查网站可访问性
echo "[3/6] 检查网站访问..." >> $LOG_FILE

# 检查各个页面
PAGES=(
    "http://127.0.0.1/login.html:统一登录"
    "http://127.0.0.1/erp/login.html:ERP登录"
    "http://127.0.0.1/external/index.html:文件中心"
    "http://127.0.0.1/company/index.html:公司官网"
    "http://127.0.0.1/mobile-test.html:手机测试"
    "http://127.0.0.1/versions/index.html:版本管理"
)

for page in "${PAGES[@]}"; do
    IFS=':' read -r url name <<< "$page"
    STATUS=$(curl -s -o /dev/null -w "%{http_code}" $url)
    if [ "$STATUS" = "200" ]; then
        echo "✓ $name: 正常 ($STATUS)" >> $LOG_FILE
    else
        echo "✗ $name: 异常 ($STATUS)" >> $LOG_FILE
        echo "$TIMESTAMP [ALERT] $name 返回 $STATUS" >> $ALERT_FILE
    fi
done

# 检查数据库
echo "[4/6] 检查数据库..." >> $LOG_FILE
cd /root/.openclaw/workspace/erp-backend
if sqlite3 database/erp.db "SELECT COUNT(*) FROM users;" > /dev/null 2>&1; then
    USER_COUNT=$(sqlite3 database/erp.db "SELECT COUNT(*) FROM users;")
    echo "✓ 数据库: 正常 ($USER_COUNT 用户)" >> $LOG_FILE
else
    echo "✗ 数据库: 异常!" >> $LOG_FILE
    echo "$TIMESTAMP [ALERT] 数据库异常" >> $ALERT_FILE
fi

# 检查磁盘空间
echo "[5/6] 检查磁盘空间..." >> $LOG_FILE
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $DISK_USAGE -lt 80 ]; then
    echo "✓ 磁盘空间: 正常 ($DISK_USAGE%)" >> $LOG_FILE
else
    echo "⚠ 磁盘空间: 警告 ($DISK_USAGE%)" >> $LOG_FILE
    echo "$TIMESTAMP [WARNING] 磁盘空间不足 $DISK_USAGE%" >> $ALERT_FILE
fi

# 检查内存
echo "[6/6] 检查内存..." >> $LOG_FILE
MEM_USAGE=$(free | grep Mem | awk '{printf("%.0f", $3/$2 * 100.0)}')
if [ $MEM_USAGE -lt 85 ]; then
    echo "✓ 内存使用: 正常 ($MEM_USAGE%)" >> $LOG_FILE
else
    echo "⚠ 内存使用: 警告 ($MEM_USAGE%)" >> $LOG_FILE
    echo "$TIMESTAMP [WARNING] 内存使用过高 $MEM_USAGE%" >> $ALERT_FILE
fi

echo "" >> $LOG_FILE
echo "检查完成: $TIMESTAMP" >> $LOG_FILE
echo "" >> $LOG_FILE

# 如果有告警，发送通知（这里可以扩展为钉钉通知）
if [ -s $ALERT_FILE ]; then
    echo "发现告警，请检查: $ALERT_FILE"
fi

echo "健康检查完成: $TIMESTAMP"
