文件
hyb-oa/server/scripts/benchmark-dashboard.sh
wangsli 3b221a2202 feat(P11-P12): 落地治理开关与移动端MVP(G0-G6/H1/M1-M4)
- 新增 Feature Flag 模型、评估服务与管理 API(erp_sync/invoice_verification)\n- 完成 ERP 与验真灰度收口(路由/服务/作业统一判定)\n- 补齐 pay 与手动 sync 的 department_id 灰度上下文\n- 增加管理后台开关页、PWA 基础设施与移动拍照/审批页面\n- 增加回归脚本、安全基线与压测脚本,更新文档与执行合同\n\nIssue: G0,G1,G2,G3,G4,G5,G6,H1,M1,M2,M3,M4
2026-02-11 20:33:30 +08:00

89 行
2.2 KiB
Bash
可执行文件

#!/usr/bin/env bash
set -euo pipefail
BASE_URL="${BASE_URL:-http://127.0.0.1:3000}"
DEVICE_FINGERPRINT="${DEVICE_FINGERPRINT:-benchmark-dashboard}"
ADMIN_IDENTIFIER="${ADMIN_IDENTIFIER:-finance_mgr@hyinda.com}"
ADMIN_PASSWORD="${ADMIN_PASSWORD:-FinanceMgrPassword1234}"
ITERATIONS="${ITERATIONS:-10}"
if ! command -v curl >/dev/null 2>&1; then
echo "[ERROR] curl not found" >&2
exit 1
fi
if ! command -v jq >/dev/null 2>&1; then
echo "[ERROR] jq not found" >&2
exit 1
fi
TMP_DIR="$(mktemp -d)"
cleanup() {
rm -rf "$TMP_DIR"
}
trap cleanup EXIT
login() {
local out_file="$1"
local status
status="$(curl -sS -o "$out_file" -w "%{http_code}" \
-X POST "$BASE_URL/api/auth/login" \
-H "content-type: application/json" \
-H "x-device-fingerprint: $DEVICE_FINGERPRINT" \
-d "{\"identifier\":\"$ADMIN_IDENTIFIER\",\"password\":\"$ADMIN_PASSWORD\"}")"
if [[ "$status" != "200" ]]; then
echo "[ERROR] login failed: HTTP $status" >&2
cat "$out_file" >&2
exit 1
fi
jq -er '.data.accessToken' "$out_file"
}
benchmark_endpoint() {
local endpoint="$1"
local token="$2"
local total_ms=0
local max_ms=0
local min_ms=999999
for _ in $(seq 1 "$ITERATIONS"); do
local body_file="$TMP_DIR/$(basename "$endpoint").json"
local elapsed
elapsed="$(curl -sS -o "$body_file" -w "%{time_total}" \
-H "authorization: Bearer $token" \
"$BASE_URL$endpoint")"
local elapsed_ms
elapsed_ms="$(python3 - <<PY
value = float("$elapsed")
print(int(round(value * 1000)))
PY
)"
total_ms=$((total_ms + elapsed_ms))
if (( elapsed_ms > max_ms )); then
max_ms=$elapsed_ms
fi
if (( elapsed_ms < min_ms )); then
min_ms=$elapsed_ms
fi
done
local avg_ms=$((total_ms / ITERATIONS))
echo "$endpoint avg=${avg_ms}ms min=${min_ms}ms max=${max_ms}ms iterations=$ITERATIONS"
}
echo "[1/2] Login"
TOKEN="$(login "$TMP_DIR/login.json")"
echo "[2/2] Dashboard endpoint benchmarks"
benchmark_endpoint "/api/dashboard/expense-overview" "$TOKEN"
benchmark_endpoint "/api/dashboard/trends" "$TOKEN"
benchmark_endpoint "/api/dashboard/top-categories" "$TOKEN"
benchmark_endpoint "/api/dashboard/approval-efficiency" "$TOKEN"
echo "[OK] Dashboard benchmark completed"