Przeglądaj źródła

feat: 测试脚本新增任务中心功能

新增任务中心测试命令:
- --task        获取任务详情(按文档ID)
- --task-list   获取任务列表
- --task-stats  获取任务统计
- --task-poll   轮询任务进度直到完成

任务详情显示:
- 总进度百分比
- 当前执行阶段
- 各阶段状态图标(✓完成 ●进行中 ○等待 ✗失败)
- 阶段结果摘要(如:240个实体, 113个关系)

轮询功能:
- 实时显示进度变化
- 自动检测完成/失败状态
- 完成后显示最终结果摘要
何文松 1 miesiąc temu
rodzic
commit
4447490e40
1 zmienionych plików z 262 dodań i 0 usunięć
  1. 262 0
      test/test_upload_api.sh

+ 262 - 0
test/test_upload_api.sh

@@ -22,6 +22,7 @@ STRUCTURED_URL="${BASE_URL}/parse/structured"
 ELEMENTS_URL="${BASE_URL}/parse/elements"
 DATASOURCE_URL="${BASE_URL}/api/v1/datasource"
 GRAPH_URL="${BASE_URL}/api/graph"
+TASK_CENTER_URL="${BASE_URL}/api/v1/tasks"
 
 # 测试文件路径(相对于脚本所在目录)
 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -877,6 +878,196 @@ test_datasource_flow() {
     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() {
     echo "使用方法: $0 [选项] [host] [port]"
@@ -900,6 +1091,12 @@ show_help() {
     echo "  --ds-value        获取数据源的值"
     echo "  --ds-flow         执行数据源完整测试流程"
     echo ""
+    echo "  === 任务中心 ==="
+    echo "  --task            获取任务详情(按文档ID)"
+    echo "  --task-list       获取任务列表"
+    echo "  --task-stats      获取任务统计"
+    echo "  --task-poll       轮询任务进度直到完成"
+    echo ""
     echo "数据源相关参数:"
     echo "  --name NAME       数据源名称"
     echo "  --type TYPE       数据源类型 (entity/paragraph/image/table)"
@@ -920,6 +1117,12 @@ show_help() {
     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-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"
                 shift
                 ;;
+            --task)
+                MODE="task"
+                shift
+                ;;
+            --task-list)
+                MODE="task-list"
+                shift
+                ;;
+            --task-stats)
+                MODE="task-stats"
+                shift
+                ;;
+            --task-poll)
+                MODE="task-poll"
+                shift
+                ;;
             --name)
                 DS_NAME="$2"
                 shift 2
@@ -1057,6 +1276,7 @@ main() {
     ELEMENTS_URL="${BASE_URL}/parse/elements"
     DATASOURCE_URL="${BASE_URL}/api/v1/datasource"
     GRAPH_URL="${BASE_URL}/api/graph"
+    TASK_CENTER_URL="${BASE_URL}/api/v1/tasks"
     
     print_header "文件上传端到端测试"
     echo "目标服务: $BASE_URL"
@@ -1229,6 +1449,42 @@ main() {
             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)
             # 仅上传
             check_test_file
@@ -1310,6 +1566,12 @@ main() {
     echo "  $0 --ds-create --name '名称' --type entity"
     echo "  $0 --ds-bind --node-ids 'id1,id2'"
     echo "  $0 --ds-value"
+    echo ""
+    echo "  === 任务中心 ==="
+    echo "  $0 --task        # 获取任务详情"
+    echo "  $0 --task-list   # 获取任务列表"
+    echo "  $0 --task-stats  # 获取任务统计"
+    echo "  $0 --task-poll   # 轮询任务进度直到完成"
 }
 
 # 运行主函数