#!/bin/bash

# DNS压力测试脚本
SERVER="127.0.0.1"
DOMAIN="example.com"
THREADS=20
QUERIES=1000

# 创建临时文件存储进程ID
pids=()

echo "开始DNS压力测试..."
echo "服务器: $SERVER"
echo "域名: $DOMAIN"
echo "线程数: $THREADS"
echo "总查询数: $QUERIES"
echo "--------------------------------------"

# 记录开始时间（秒）
start_time=$SECONDS

# 运行并发查询
for ((i=1; i<=THREADS; i++)); do
  for ((j=1; j<=$((QUERIES/THREADS)); j++)); do
    dig @$SERVER $DOMAIN A +short > /dev/null &
    pids+=($!)
  done
  # 每启动5个线程暂停一下，避免系统资源瞬间耗尽
  if (( $i % 5 == 0 )); then
    echo "线程 $i 已启动，已完成 $i/$THREADS 个线程..."
    sleep 0.5
  fi
done

echo "所有 $THREADS 个线程已启动，共执行 $QUERIES 个查询，等待完成..."

# 等待所有查询完成
for pid in "${pids[@]}"; do
  wait $pid
done

# 计算执行时间
elapsed=$((SECONDS - start_time))

# 计算QPS（每秒查询数）
if [ $elapsed -eq 0 ]; then
  elapsed=1  # 避免除以零
fi
qps=$((QUERIES / elapsed))

echo "--------------------------------------"
echo "所有查询已完成！"
echo "执行时间: $elapsed 秒"
echo "QPS: $qps 次/秒"
echo "--------------------------------------"
