更新内容: - 移除 `dashboard.json` 文件,清理不再需要的 Grafana 仪表板配置。 - 简化项目目录结构,删除多余的监控配置以优化维护。
105 lines
2.6 KiB
Bash
Executable File
105 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# 并发控制测试脚本
|
|
|
|
set -e
|
|
|
|
BASE_URL="http://localhost:8000"
|
|
|
|
echo "=== 异步任务并发控制测试 ==="
|
|
echo ""
|
|
|
|
# 1. 检查服务是否运行
|
|
echo "1. 检查服务状态..."
|
|
if ! curl -s "${BASE_URL}/healthz" > /dev/null; then
|
|
echo "❌ 服务未运行,请先启动服务"
|
|
exit 1
|
|
fi
|
|
echo "✅ 服务正常运行"
|
|
echo ""
|
|
|
|
# 2. 查询初始并发状态
|
|
echo "2. 查询初始并发状态..."
|
|
curl -s "${BASE_URL}/jobs/concurrency/status" | jq '.'
|
|
echo ""
|
|
|
|
# 3. 创建多个任务
|
|
echo "3. 创建 15 个任务(测试并发限制)..."
|
|
JOB_IDS=()
|
|
for i in {1..15}; do
|
|
# 使用较大的质数,让任务执行时间更长
|
|
NUMBER=$((10000 + i * 1000))
|
|
RESPONSE=$(curl -s -X POST "${BASE_URL}/jobs" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"algorithm\": \"PrimeChecker\", \"params\": {\"number\": ${NUMBER}}}")
|
|
|
|
JOB_ID=$(echo "$RESPONSE" | jq -r '.job_id')
|
|
JOB_IDS+=("$JOB_ID")
|
|
echo " 创建任务 ${i}/15: job_id=${JOB_ID}"
|
|
|
|
# 短暂延迟,避免请求过快
|
|
sleep 0.1
|
|
done
|
|
echo ""
|
|
|
|
# 4. 立即查询并发状态(应该看到多个任务在运行)
|
|
echo "4. 查询并发状态(任务执行中)..."
|
|
for i in {1..5}; do
|
|
echo " 第 ${i} 次查询:"
|
|
STATUS=$(curl -s "${BASE_URL}/jobs/concurrency/status")
|
|
echo " $(echo "$STATUS" | jq -c '.')"
|
|
sleep 1
|
|
done
|
|
echo ""
|
|
|
|
# 5. 等待所有任务完成
|
|
echo "5. 等待任务完成..."
|
|
COMPLETED=0
|
|
TOTAL=${#JOB_IDS[@]}
|
|
|
|
while [ $COMPLETED -lt $TOTAL ]; do
|
|
COMPLETED=0
|
|
for JOB_ID in "${JOB_IDS[@]}"; do
|
|
STATUS=$(curl -s "${BASE_URL}/jobs/${JOB_ID}" | jq -r '.status')
|
|
if [ "$STATUS" = "completed" ] || [ "$STATUS" = "failed" ]; then
|
|
((COMPLETED++))
|
|
fi
|
|
done
|
|
|
|
echo " 进度: ${COMPLETED}/${TOTAL} 任务完成"
|
|
|
|
# 显示当前并发状态
|
|
CONCURRENCY=$(curl -s "${BASE_URL}/jobs/concurrency/status")
|
|
echo " 并发状态: $(echo "$CONCURRENCY" | jq -c '.')"
|
|
|
|
if [ $COMPLETED -lt $TOTAL ]; then
|
|
sleep 2
|
|
fi
|
|
done
|
|
echo ""
|
|
|
|
# 6. 查询最终并发状态
|
|
echo "6. 查询最终并发状态..."
|
|
curl -s "${BASE_URL}/jobs/concurrency/status" | jq '.'
|
|
echo ""
|
|
|
|
# 7. 显示任务结果统计
|
|
echo "7. 任务结果统计..."
|
|
COMPLETED_COUNT=0
|
|
FAILED_COUNT=0
|
|
|
|
for JOB_ID in "${JOB_IDS[@]}"; do
|
|
STATUS=$(curl -s "${BASE_URL}/jobs/${JOB_ID}" | jq -r '.status')
|
|
if [ "$STATUS" = "completed" ]; then
|
|
((COMPLETED_COUNT++))
|
|
elif [ "$STATUS" = "failed" ]; then
|
|
((FAILED_COUNT++))
|
|
fi
|
|
done
|
|
|
|
echo " 总任务数: ${TOTAL}"
|
|
echo " 成功: ${COMPLETED_COUNT}"
|
|
echo " 失败: ${FAILED_COUNT}"
|
|
echo ""
|
|
|
|
echo "=== 测试完成 ==="
|