#!/bin/bash
#=====================================================
# 网站可用性监控脚本
# 来源: 整合自运维社区最佳实践
# 用法: ./website-monitor.sh [URL列表文件]
#=====================================================

URL_FILE=${1:-}
LOG_FILE="/var/log/website-monitor.log"

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

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# 默认检查列表
if [ -z "$URL_FILE" ]; then
    URLS=(
        "https://www.baidu.com"
        "https://www.google.com"
    )
else
    mapfile -t URLS < "$URL_FILE"
fi

echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}    网站可用性监控${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""

SUCCESS=0
FAIL=0

for url in "${URLS[@]}"; do
    # 跳过空行和注释
    [[ -z "$url" || "$url" =~ ^# ]] && continue

    echo -n "检查: $url ... "

    # 使用curl检查
    HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 10 --max-time 30 "$url" 2>/dev/null)
    CURL_EXIT=$?

    if [ $CURL_EXIT -eq 0 ] && [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 400 ]; then
        # 获取响应时间
        RESP_TIME=$(curl -s -o /dev/null -w "%{time_total}" --connect-timeout 10 --max-time 30 "$url" 2>/dev/null)
        echo -e "${GREEN}[✓]${NC} HTTP $HTTP_CODE (${RESP_TIME}s)"
        SUCCESS=$((SUCCESS + 1))
    elif [ $CURL_EXIT -eq 0 ] && [ "$HTTP_CODE" -ge 400 ]; then
        echo -e "${RED}[✗]${NC} HTTP $HTTP_CODE"
        log "FAIL: $url -> HTTP $HTTP_CODE"
        FAIL=$((FAIL + 1))
    else
        echo -e "${RED}[✗]${NC} 连接失败 (curl code: $CURL_EXIT)"
        log "FAIL: $url -> curl error $CURL_EXIT"
        FAIL=$((FAIL + 1))
    fi
done

echo ""
echo -e "${GREEN}========================================${NC}"
echo "  总计: $((SUCCESS + FAIL)) | ${GREEN}成功: ${SUCCESS}${NC} | ${RED}失败: ${FAIL}${NC}"
echo -e "${GREEN}========================================${NC}"

[ $FAIL -eq 0 ] && exit 0 || exit 1