|
@@ -22,6 +22,7 @@ STRUCTURED_URL="${BASE_URL}/parse/structured"
|
|
|
ELEMENTS_URL="${BASE_URL}/parse/elements"
|
|
ELEMENTS_URL="${BASE_URL}/parse/elements"
|
|
|
DATASOURCE_URL="${BASE_URL}/api/v1/datasource"
|
|
DATASOURCE_URL="${BASE_URL}/api/v1/datasource"
|
|
|
GRAPH_URL="${BASE_URL}/api/graph"
|
|
GRAPH_URL="${BASE_URL}/api/graph"
|
|
|
|
|
+TASK_CENTER_URL="${BASE_URL}/api/v1/tasks"
|
|
|
|
|
|
|
|
# 测试文件路径(相对于脚本所在目录)
|
|
# 测试文件路径(相对于脚本所在目录)
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
@@ -877,6 +878,196 @@ test_datasource_flow() {
|
|
|
fi
|
|
fi
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+# ============================================
|
|
|
|
|
+# 任务中心相关测试函数
|
|
|
|
|
+# ============================================
|
|
|
|
|
+
|
|
|
|
|
+# 获取任务详情(按文档ID)
|
|
|
|
|
+test_get_task_detail() {
|
|
|
|
|
+ local DOC_ID=$1
|
|
|
|
|
+
|
|
|
|
|
+ print_step "获取任务详情"
|
|
|
|
|
+
|
|
|
|
|
+ print_info "文档ID: $DOC_ID"
|
|
|
|
|
+ print_info "请求URL: ${TASK_CENTER_URL}/by-document/${DOC_ID}"
|
|
|
|
|
+
|
|
|
|
|
+ RESPONSE=$(curl -s -w "\n%{http_code}" \
|
|
|
|
|
+ -X GET "${TASK_CENTER_URL}/by-document/${DOC_ID}" \
|
|
|
|
|
+ --connect-timeout 10)
|
|
|
|
|
+
|
|
|
|
|
+ HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
|
|
|
|
|
+ BODY=$(echo "$RESPONSE" | sed '$d')
|
|
|
|
|
+
|
|
|
|
|
+ echo -e "${YELLOW}响应状态码:${NC} $HTTP_CODE"
|
|
|
|
|
+
|
|
|
|
|
+ if [ "$HTTP_CODE" = "200" ]; then
|
|
|
|
|
+ if [ "$JQ_AVAILABLE" = true ]; then
|
|
|
|
|
+ # 提取关键信息
|
|
|
|
|
+ STATUS=$(echo "$BODY" | jq -r '.data.status // "unknown"' 2>/dev/null)
|
|
|
|
|
+ PROGRESS=$(echo "$BODY" | jq -r '.data.progress // 0' 2>/dev/null)
|
|
|
|
|
+ CURRENT_STEP=$(echo "$BODY" | jq -r '.data.currentStep // "-"' 2>/dev/null)
|
|
|
|
|
+
|
|
|
|
|
+ print_success "获取任务详情成功!"
|
|
|
|
|
+ echo -e "${CYAN}══════════════════════════════════════════${NC}"
|
|
|
|
|
+ echo -e " 状态: ${GREEN}$STATUS${NC}"
|
|
|
|
|
+ echo -e " 总进度: ${GREEN}${PROGRESS}%${NC}"
|
|
|
|
|
+ echo -e " 当前步骤: ${GREEN}$CURRENT_STEP${NC}"
|
|
|
|
|
+ echo -e "${CYAN}══════════════════════════════════════════${NC}"
|
|
|
|
|
+
|
|
|
|
|
+ # 显示各阶段详情
|
|
|
|
|
+ echo -e "\n${YELLOW}阶段详情:${NC}"
|
|
|
|
|
+ echo "$BODY" | jq -r '.data.stages[] | " [\(.status | if . == "completed" then "✓" elif . == "in_progress" then "●" elif . == "failed" then "✗" else "○" end)] \(.displayName) - \(.progress)%" + (if .resultSummary then " (\(.resultSummary))" else "" end)' 2>/dev/null
|
|
|
|
|
+
|
|
|
|
|
+ else
|
|
|
|
|
+ print_success "获取任务详情成功!"
|
|
|
|
|
+ echo "$BODY"
|
|
|
|
|
+ fi
|
|
|
|
|
+ return 0
|
|
|
|
|
+ else
|
|
|
|
|
+ print_error "获取任务详情失败 (HTTP $HTTP_CODE)"
|
|
|
|
|
+ if [ "$JQ_AVAILABLE" = true ]; then
|
|
|
|
|
+ echo "$BODY" | jq . 2>/dev/null || echo "$BODY"
|
|
|
|
|
+ else
|
|
|
|
|
+ echo "$BODY"
|
|
|
|
|
+ fi
|
|
|
|
|
+ return 1
|
|
|
|
|
+ fi
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+# 获取任务列表
|
|
|
|
|
+test_get_task_list() {
|
|
|
|
|
+ local STATUS_FILTER=${1:-}
|
|
|
|
|
+ local PAGE_NUM=${2:-1}
|
|
|
|
|
+ local PAGE_SIZE=${3:-10}
|
|
|
|
|
+
|
|
|
|
|
+ print_step "获取任务列表"
|
|
|
|
|
+
|
|
|
|
|
+ local URL="${TASK_CENTER_URL}/list?pageNum=${PAGE_NUM}&pageSize=${PAGE_SIZE}"
|
|
|
|
|
+ if [ -n "$STATUS_FILTER" ]; then
|
|
|
|
|
+ URL="${URL}&status=${STATUS_FILTER}"
|
|
|
|
|
+ fi
|
|
|
|
|
+
|
|
|
|
|
+ print_info "请求URL: $URL"
|
|
|
|
|
+
|
|
|
|
|
+ RESPONSE=$(curl -s -w "\n%{http_code}" \
|
|
|
|
|
+ -X GET "$URL" \
|
|
|
|
|
+ --connect-timeout 10)
|
|
|
|
|
+
|
|
|
|
|
+ HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
|
|
|
|
|
+ BODY=$(echo "$RESPONSE" | sed '$d')
|
|
|
|
|
+
|
|
|
|
|
+ echo -e "${YELLOW}响应状态码:${NC} $HTTP_CODE"
|
|
|
|
|
+
|
|
|
|
|
+ if [ "$HTTP_CODE" = "200" ]; then
|
|
|
|
|
+ if [ "$JQ_AVAILABLE" = true ]; then
|
|
|
|
|
+ TOTAL=$(echo "$BODY" | jq -r '.data.total // 0' 2>/dev/null)
|
|
|
|
|
+ print_success "获取任务列表成功! 共 $TOTAL 条"
|
|
|
|
|
+
|
|
|
|
|
+ # 显示任务列表
|
|
|
|
|
+ echo -e "\n${YELLOW}任务列表:${NC}"
|
|
|
|
|
+ echo "$BODY" | jq -r '.data.records[] | " [\(.status)] \(.documentId) - 进度: \(.progress)% - \(.currentStep // "-")"' 2>/dev/null
|
|
|
|
|
+ else
|
|
|
|
|
+ print_success "获取任务列表成功!"
|
|
|
|
|
+ echo "$BODY"
|
|
|
|
|
+ fi
|
|
|
|
|
+ return 0
|
|
|
|
|
+ else
|
|
|
|
|
+ print_error "获取任务列表失败 (HTTP $HTTP_CODE)"
|
|
|
|
|
+ return 1
|
|
|
|
|
+ fi
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+# 获取任务统计
|
|
|
|
|
+test_get_task_statistics() {
|
|
|
|
|
+ print_step "获取任务统计"
|
|
|
|
|
+
|
|
|
|
|
+ print_info "请求URL: ${TASK_CENTER_URL}/statistics"
|
|
|
|
|
+
|
|
|
|
|
+ RESPONSE=$(curl -s -w "\n%{http_code}" \
|
|
|
|
|
+ -X GET "${TASK_CENTER_URL}/statistics" \
|
|
|
|
|
+ --connect-timeout 10)
|
|
|
|
|
+
|
|
|
|
|
+ HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
|
|
|
|
|
+ BODY=$(echo "$RESPONSE" | sed '$d')
|
|
|
|
|
+
|
|
|
|
|
+ echo -e "${YELLOW}响应状态码:${NC} $HTTP_CODE"
|
|
|
|
|
+
|
|
|
|
|
+ if [ "$HTTP_CODE" = "200" ]; then
|
|
|
|
|
+ if [ "$JQ_AVAILABLE" = true ]; then
|
|
|
|
|
+ print_success "获取任务统计成功!"
|
|
|
|
|
+ echo -e "${CYAN}══════════════════════════════════════════${NC}"
|
|
|
|
|
+ echo "$BODY" | jq -r '.data | " 总数: \(.total)\n 等待中: \(.pending)\n 处理中: \(.processing)\n 已完成: \(.completed)\n 失败: \(.failed)"' 2>/dev/null
|
|
|
|
|
+ echo -e "${CYAN}══════════════════════════════════════════${NC}"
|
|
|
|
|
+ else
|
|
|
|
|
+ print_success "获取任务统计成功!"
|
|
|
|
|
+ echo "$BODY"
|
|
|
|
|
+ fi
|
|
|
|
|
+ return 0
|
|
|
|
|
+ else
|
|
|
|
|
+ print_error "获取任务统计失败 (HTTP $HTTP_CODE)"
|
|
|
|
|
+ return 1
|
|
|
|
|
+ fi
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+# 轮询任务进度(带实时显示)
|
|
|
|
|
+poll_task_progress() {
|
|
|
|
|
+ local DOC_ID=$1
|
|
|
|
|
+ local MAX_ATTEMPTS=${2:-120} # 默认最多等待6分钟(120 * 3秒)
|
|
|
|
|
+ local INTERVAL=${3:-3}
|
|
|
|
|
+
|
|
|
|
|
+ print_step "轮询任务进度 (最多${MAX_ATTEMPTS}次, 间隔${INTERVAL}秒)"
|
|
|
|
|
+
|
|
|
|
|
+ local LAST_PROGRESS=-1
|
|
|
|
|
+ local LAST_STAGE=""
|
|
|
|
|
+
|
|
|
|
|
+ for ((i=1; i<=MAX_ATTEMPTS; i++)); do
|
|
|
|
|
+ RESPONSE=$(curl -s "${TASK_CENTER_URL}/by-document/${DOC_ID}" --connect-timeout 10)
|
|
|
|
|
+
|
|
|
|
|
+ if [ "$JQ_AVAILABLE" = true ]; then
|
|
|
|
|
+ STATUS=$(echo "$RESPONSE" | jq -r '.data.status // "unknown"' 2>/dev/null)
|
|
|
|
|
+ PROGRESS=$(echo "$RESPONSE" | jq -r '.data.progress // 0' 2>/dev/null)
|
|
|
|
|
+ CURRENT_STEP=$(echo "$RESPONSE" | jq -r '.data.currentStep // "-"' 2>/dev/null)
|
|
|
|
|
+
|
|
|
|
|
+ # 只在进度变化时显示
|
|
|
|
|
+ if [ "$PROGRESS" != "$LAST_PROGRESS" ] || [ "$CURRENT_STEP" != "$LAST_STAGE" ]; then
|
|
|
|
|
+ # 获取当前阶段的详细进度
|
|
|
|
|
+ STAGE_INFO=$(echo "$RESPONSE" | jq -r '.data.stages[] | select(.status == "in_progress") | "\(.displayName): \(.progress)%"' 2>/dev/null | head -1)
|
|
|
|
|
+
|
|
|
|
|
+ echo -e "\r\033[K${CYAN}[${i}/${MAX_ATTEMPTS}]${NC} 总进度: ${GREEN}${PROGRESS}%${NC} | 阶段: ${YELLOW}${CURRENT_STEP}${NC} | ${STAGE_INFO:-等待中...}"
|
|
|
|
|
+
|
|
|
|
|
+ LAST_PROGRESS=$PROGRESS
|
|
|
|
|
+ LAST_STAGE=$CURRENT_STEP
|
|
|
|
|
+ fi
|
|
|
|
|
+
|
|
|
|
|
+ if [ "$STATUS" = "completed" ]; then
|
|
|
|
|
+ echo ""
|
|
|
|
|
+ print_success "任务完成!"
|
|
|
|
|
+
|
|
|
|
|
+ # 显示最终结果
|
|
|
|
|
+ echo -e "\n${YELLOW}最终结果:${NC}"
|
|
|
|
|
+ echo "$RESPONSE" | jq -r '.data.stages[] | select(.resultSummary != null) | " \(.displayName): \(.resultSummary)"' 2>/dev/null
|
|
|
|
|
+
|
|
|
|
|
+ return 0
|
|
|
|
|
+ elif [ "$STATUS" = "failed" ]; then
|
|
|
|
|
+ echo ""
|
|
|
|
|
+ print_error "任务失败!"
|
|
|
|
|
+ ERROR_MSG=$(echo "$RESPONSE" | jq -r '.data.errorMessage // "未知错误"' 2>/dev/null)
|
|
|
|
|
+ echo -e "${RED}错误信息: $ERROR_MSG${NC}"
|
|
|
|
|
+ return 1
|
|
|
|
|
+ fi
|
|
|
|
|
+ else
|
|
|
|
|
+ echo "第 $i 次查询..."
|
|
|
|
|
+ echo "$RESPONSE"
|
|
|
|
|
+ fi
|
|
|
|
|
+
|
|
|
|
|
+ sleep $INTERVAL
|
|
|
|
|
+ done
|
|
|
|
|
+
|
|
|
|
|
+ echo ""
|
|
|
|
|
+ print_error "轮询超时,任务未完成"
|
|
|
|
|
+ return 1
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
# 显示使用帮助
|
|
# 显示使用帮助
|
|
|
show_help() {
|
|
show_help() {
|
|
|
echo "使用方法: $0 [选项] [host] [port]"
|
|
echo "使用方法: $0 [选项] [host] [port]"
|
|
@@ -900,6 +1091,12 @@ show_help() {
|
|
|
echo " --ds-value 获取数据源的值"
|
|
echo " --ds-value 获取数据源的值"
|
|
|
echo " --ds-flow 执行数据源完整测试流程"
|
|
echo " --ds-flow 执行数据源完整测试流程"
|
|
|
echo ""
|
|
echo ""
|
|
|
|
|
+ echo " === 任务中心 ==="
|
|
|
|
|
+ echo " --task 获取任务详情(按文档ID)"
|
|
|
|
|
+ echo " --task-list 获取任务列表"
|
|
|
|
|
+ echo " --task-stats 获取任务统计"
|
|
|
|
|
+ echo " --task-poll 轮询任务进度直到完成"
|
|
|
|
|
+ echo ""
|
|
|
echo "数据源相关参数:"
|
|
echo "数据源相关参数:"
|
|
|
echo " --name NAME 数据源名称"
|
|
echo " --name NAME 数据源名称"
|
|
|
echo " --type TYPE 数据源类型 (entity/paragraph/image/table)"
|
|
echo " --type TYPE 数据源类型 (entity/paragraph/image/table)"
|
|
@@ -920,6 +1117,12 @@ show_help() {
|
|
|
echo " $0 --ds-create --name '报告编号' --type entity"
|
|
echo " $0 --ds-create --name '报告编号' --type entity"
|
|
|
echo " $0 --ds-bind --ds-id xxx --node-type graph_node --node-ids 'id1,id2'"
|
|
echo " $0 --ds-bind --ds-id xxx --node-type graph_node --node-ids 'id1,id2'"
|
|
|
echo " $0 --ds-value --ds-id xxx"
|
|
echo " $0 --ds-value --ds-id xxx"
|
|
|
|
|
+ echo ""
|
|
|
|
|
+ echo " === 任务中心示例 ==="
|
|
|
|
|
+ echo " $0 --task # 获取上次文档的任务详情"
|
|
|
|
|
+ echo " $0 --task-list # 获取任务列表"
|
|
|
|
|
+ echo " $0 --task-stats # 获取任务统计"
|
|
|
|
|
+ echo " $0 --task-poll # 轮询任务进度直到完成"
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
# 主函数
|
|
# 主函数
|
|
@@ -998,6 +1201,22 @@ main() {
|
|
|
MODE="ds-flow"
|
|
MODE="ds-flow"
|
|
|
shift
|
|
shift
|
|
|
;;
|
|
;;
|
|
|
|
|
+ --task)
|
|
|
|
|
+ MODE="task"
|
|
|
|
|
+ shift
|
|
|
|
|
+ ;;
|
|
|
|
|
+ --task-list)
|
|
|
|
|
+ MODE="task-list"
|
|
|
|
|
+ shift
|
|
|
|
|
+ ;;
|
|
|
|
|
+ --task-stats)
|
|
|
|
|
+ MODE="task-stats"
|
|
|
|
|
+ shift
|
|
|
|
|
+ ;;
|
|
|
|
|
+ --task-poll)
|
|
|
|
|
+ MODE="task-poll"
|
|
|
|
|
+ shift
|
|
|
|
|
+ ;;
|
|
|
--name)
|
|
--name)
|
|
|
DS_NAME="$2"
|
|
DS_NAME="$2"
|
|
|
shift 2
|
|
shift 2
|
|
@@ -1057,6 +1276,7 @@ main() {
|
|
|
ELEMENTS_URL="${BASE_URL}/parse/elements"
|
|
ELEMENTS_URL="${BASE_URL}/parse/elements"
|
|
|
DATASOURCE_URL="${BASE_URL}/api/v1/datasource"
|
|
DATASOURCE_URL="${BASE_URL}/api/v1/datasource"
|
|
|
GRAPH_URL="${BASE_URL}/api/graph"
|
|
GRAPH_URL="${BASE_URL}/api/graph"
|
|
|
|
|
+ TASK_CENTER_URL="${BASE_URL}/api/v1/tasks"
|
|
|
|
|
|
|
|
print_header "文件上传端到端测试"
|
|
print_header "文件上传端到端测试"
|
|
|
echo "目标服务: $BASE_URL"
|
|
echo "目标服务: $BASE_URL"
|
|
@@ -1229,6 +1449,42 @@ main() {
|
|
|
fi
|
|
fi
|
|
|
;;
|
|
;;
|
|
|
|
|
|
|
|
|
|
+ task)
|
|
|
|
|
+ # 获取任务详情
|
|
|
|
|
+ if [ -f "${SCRIPT_DIR}/.last_document_id" ]; then
|
|
|
|
|
+ DOCUMENT_ID=$(cat "${SCRIPT_DIR}/.last_document_id")
|
|
|
|
|
+ print_header "任务详情"
|
|
|
|
|
+ test_get_task_detail "$DOCUMENT_ID"
|
|
|
|
|
+ else
|
|
|
|
|
+ print_error "未找到上次上传的文档ID"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ fi
|
|
|
|
|
+ ;;
|
|
|
|
|
+
|
|
|
|
|
+ task-list)
|
|
|
|
|
+ # 获取任务列表
|
|
|
|
|
+ print_header "任务列表"
|
|
|
|
|
+ test_get_task_list
|
|
|
|
|
+ ;;
|
|
|
|
|
+
|
|
|
|
|
+ task-stats)
|
|
|
|
|
+ # 获取任务统计
|
|
|
|
|
+ print_header "任务统计"
|
|
|
|
|
+ test_get_task_statistics
|
|
|
|
|
+ ;;
|
|
|
|
|
+
|
|
|
|
|
+ task-poll)
|
|
|
|
|
+ # 轮询任务进度
|
|
|
|
|
+ if [ -f "${SCRIPT_DIR}/.last_document_id" ]; then
|
|
|
|
|
+ DOCUMENT_ID=$(cat "${SCRIPT_DIR}/.last_document_id")
|
|
|
|
|
+ print_header "轮询任务进度"
|
|
|
|
|
+ poll_task_progress "$DOCUMENT_ID"
|
|
|
|
|
+ else
|
|
|
|
|
+ print_error "未找到上次上传的文档ID"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ fi
|
|
|
|
|
+ ;;
|
|
|
|
|
+
|
|
|
upload)
|
|
upload)
|
|
|
# 仅上传
|
|
# 仅上传
|
|
|
check_test_file
|
|
check_test_file
|
|
@@ -1310,6 +1566,12 @@ main() {
|
|
|
echo " $0 --ds-create --name '名称' --type entity"
|
|
echo " $0 --ds-create --name '名称' --type entity"
|
|
|
echo " $0 --ds-bind --node-ids 'id1,id2'"
|
|
echo " $0 --ds-bind --node-ids 'id1,id2'"
|
|
|
echo " $0 --ds-value"
|
|
echo " $0 --ds-value"
|
|
|
|
|
+ echo ""
|
|
|
|
|
+ echo " === 任务中心 ==="
|
|
|
|
|
+ echo " $0 --task # 获取任务详情"
|
|
|
|
|
+ echo " $0 --task-list # 获取任务列表"
|
|
|
|
|
+ echo " $0 --task-stats # 获取任务统计"
|
|
|
|
|
+ echo " $0 --task-poll # 轮询任务进度直到完成"
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
# 运行主函数
|
|
# 运行主函数
|