package services // Go 服务端入口,触发 Workflow import ( "beacon/pkg/pb" "beacon/workflows" "context" "github.com/google/uuid" "go.temporal.io/sdk/client" "go.uber.org/zap" ) type WorkflowService struct { } func (s *WorkflowService) Start(compositeCaseId string) error { // 创建 Temporal 客户端 c, err := client.Dial(client.Options{ HostPort: "temporal.newai.day:17233", // 根据你的 Temporal Server 配置 Namespace: "default", }) if err != nil { zap.L().Error("Unable to create Temporal client", zap.Error(err)) return err } defer c.Close() // 模拟一个触发测试的事件 (例如来自 Web UI 或 CI/CD) runID := uuid.New().String() testInput := &pb.DynamicTestRunInput{ RunId: runID, CompositeCaseId: compositeCaseId, } workflowOptions := client.StartWorkflowOptions{ ID: "test_workflow_" + runID, TaskQueue: "test-task-queue", // 保持与 Python Worker 一致 } zap.L().Info("Starting TestRunWorkflow", zap.String("runID", runID)) we, err := c.ExecuteWorkflow(context.Background(), workflowOptions, workflows.DynamicTestSuiteWorkflow, testInput) if err != nil { zap.L().Error("Unable to execute workflows", zap.Error(err)) return err } zap.L().Info("Workflow started", zap.String("workflowID", we.GetID()), zap.String("runID", we.GetRunID())) // 等待 Workflow 完成并获取结果 var result pb.TestRunOutput err = we.Get(context.Background(), &result) if err != nil { zap.L().Error("Unable to get workflows result", zap.Error(err)) return err } zap.L().Info("Workflow finished", zap.Bool("OverallSuccess", result.OverallSuccess), zap.String("Message", result.CompletionMessage)) zap.L().Debug("API Test Results", zap.Any("ApiResults", result.ApiResults)) zap.L().Debug("UI Test Results", zap.Any("UiResults", result.UiResults)) // 后续可以根据 result 生成报告、发送通知等 return nil } func (s *WorkflowService) GetWorkflowResults(workflowID string) (status string, err error) { // 这里可以实现获取工作流结果的逻辑 // 例如,查询 Temporal Server 获取指定工作流的结果 // 可以使用 WorkflowID 或 RunID 来查询 zap.L().Debug("GetWorkflowResults", zap.Any("workflowID", workflowID)) return } func (s *WorkflowService) GetWorkflowStatus(workflowID string) (status string, err error) { // 这里可以实现获取工作流状态的逻辑 // 例如,查询 Temporal Server 获取指定工作流的状态 // 可以使用 WorkflowID 或 RunID 来查询 zap.L().Debug("GetWorkflowStatus", zap.Any("workflowID", workflowID)) return }