
#!/bin/bash

# CentOS 终极极速安装 wrk 脚本 (多源自动测速版)
# 特点：全网镜像集成、自动清理、多核加速、失败重试

set -e

echo "============================================"
echo "   🚀 开始 wrk 终极极速安装程序"
echo "============================================"

# 1. 环境预检与清理
if [ "$EUID" -ne 0 ]; then 
  echo "❌ 错误：请使用 sudo 运行此脚本"
  exit 1
fi

echo ">>> 正在清理历史残留环境..."
rm -rf /tmp/wrk_build
rm -rf ./wrk
rm -f /usr/local/bin/wrk

# 2. 安装基础依赖 (bc 用于浮点数比较)
echo ">>> 正在准备核心编译环境 (yum)..."
yum install -y gcc make openssl-devel git curl bc

# 3. 定义全网镜像列表 (包含代理源和直接镜像源)
# 格式说明：部分是前缀代理，部分是直接替换域名的镜像
MIRRORS=(
    "https://github.com/wg/wrk.git"                                # 官方
    "https://ghproxy.com/https://github.com/wg/wrk.git"            # ghproxy (常用)
    "https://mirror.ghproxy.com/https://github.com/wg/wrk.git"     # ghproxy 镜像
    "https://gh-proxy.com/https://github.com/wg/wrk.git"           # gh-proxy
    "https://ghproxy.net/https://github.com/wg/wrk.git"            # ghproxy.net
    "https://kkgithub.com/wg/wrk.git"                              # KKGitHub (国内快)
    "https://gitclone.com/github.com/wg/wrk.git"                   # GitClone
    "https://hub.nuaa.cf/wg/wrk.git"                               # NUAA 镜像
    "https://github.moeyy.xyz/https://github.com/wg/wrk.git"       # Moeyy 代理
)

# 4. 自动化测速逻辑
echo ">>> 正在全网探测最快镜像源 (请稍候)..."

BEST_MIRROR=""
MIN_TIME=999

for url in "${MIRRORS[@]}"; do
    # 提取域名显示给用户
    DOMAIN=$(echo "$url" | awk -F[/:] '{print $4}')
    [ -z "$DOMAIN" ] && DOMAIN="github.com"
    
    echo -n "测速中: [$DOMAIN] ... "
    
    # 尝试连接，超时时间设为 2 秒
    # 使用 curl 获取连接总时间
    TIME=$(curl -o /dev/null -s -k -w '%{time_connect}\n' --connect-timeout 2 "$url" || echo 999)
    
    # 验证返回的时间是否有效
    if [[ "$TIME" == "0.000" ]]; then TIME=999; fi

    echo "${TIME}s"

    # 浮点数比较
    if (( $(echo "$TIME < $MIN_TIME" | bc -l) )); then
        MIN_TIME=$TIME
        BEST_MIRROR=$url
    fi
done

if [ "$BEST_MIRROR" == "" ] || [ "$MIN_TIME" == "999" ]; then
    echo "❌ 无法连接任何镜像源。可能您的服务器完全无法访问外网，请检查防火墙或 DNS。"
    exit 1
fi

echo ">>> 胜出镜像: $BEST_MIRROR (响应: ${MIN_TIME}s)"

# 5. 执行浅层克隆 (带有重试机制)
echo ">>> 正在下载源码 (depth=1)..."
MAX_RETRIES=3
COUNT=0
while [ $COUNT -lt $MAX_RETRIES ]; do
    if git clone --depth 1 "$BEST_MIRROR" /tmp/wrk_build; then
        echo "✅ 下载成功！"
        break
    else
        COUNT=$((COUNT+1))
        echo "⚠️ 下载失败，正在进行第 $COUNT 次重试..."
        sleep 1
    fi
done

if [ ! -d "/tmp/wrk_build" ]; then
    echo "❌ 源码下载彻底失败。"
    exit 1
fi

# 6. 多核加速编译
echo ">>> 正在利用 $(nproc) 核心进行并行编译..."
cd /tmp/wrk_build
make -j "$(nproc)"

# 7. 安装与全局化
echo ">>> 正在完成最后部署..."
cp wrk /usr/local/bin/
chmod +x /usr/local/bin/wrk

# 8. 深度清理
cd ~
rm -rf /tmp/wrk_build

echo "============================================"
if command -v wrk >/dev/null 2>&1; then
    echo "🎉 wrk 安装成功！"
    echo "执行 'wrk --version' 检查结果。"
    wrk --version
else
    echo "❌ 安装异常，请检查上述编译日志。"
fi
echo "============================================"