80 lines
2.5 KiB
Go
80 lines
2.5 KiB
Go
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: "data-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
|
|
}
|