Beacon/services/workflow.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
}