mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-08 05:29:51 +00:00
93 lines
2.6 KiB
Go
93 lines
2.6 KiB
Go
package nodeprocessor
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"time"
|
|
|
|
"github.com/usual2970/certimate/internal/domain"
|
|
)
|
|
|
|
type NodeProcessor interface {
|
|
Process(ctx context.Context) error
|
|
|
|
GetLog(ctx context.Context) *domain.WorkflowRunLog
|
|
AppendLogRecord(ctx context.Context, level domain.WorkflowRunLogLevel, content string, err ...string)
|
|
}
|
|
|
|
type nodeLogger struct {
|
|
log *domain.WorkflowRunLog
|
|
}
|
|
|
|
type certificateRepository interface {
|
|
GetByWorkflowNodeId(ctx context.Context, workflowNodeId string) (*domain.Certificate, error)
|
|
}
|
|
|
|
type workflowOutputRepository interface {
|
|
GetByNodeId(ctx context.Context, workflowNodeId string) (*domain.WorkflowOutput, error)
|
|
Save(ctx context.Context, workflowOutput *domain.WorkflowOutput) (*domain.WorkflowOutput, error)
|
|
SaveWithCertificate(ctx context.Context, workflowOutput *domain.WorkflowOutput, certificate *domain.Certificate) (*domain.WorkflowOutput, error)
|
|
}
|
|
|
|
type settingsRepository interface {
|
|
GetByName(ctx context.Context, name string) (*domain.Settings, error)
|
|
}
|
|
|
|
func newNodeLogger(node *domain.WorkflowNode) *nodeLogger {
|
|
return &nodeLogger{
|
|
log: &domain.WorkflowRunLog{
|
|
NodeId: node.Id,
|
|
NodeName: node.Name,
|
|
Records: make([]domain.WorkflowRunLogRecord, 0),
|
|
},
|
|
}
|
|
}
|
|
|
|
func (l *nodeLogger) GetLog(ctx context.Context) *domain.WorkflowRunLog {
|
|
return l.log
|
|
}
|
|
|
|
func (l *nodeLogger) AppendLogRecord(ctx context.Context, level domain.WorkflowRunLogLevel, content string, err ...string) {
|
|
record := domain.WorkflowRunLogRecord{
|
|
Time: time.Now().UTC().Format(time.RFC3339),
|
|
Level: level,
|
|
Content: content,
|
|
}
|
|
if len(err) > 0 {
|
|
record.Error = err[0]
|
|
l.log.Error = err[0]
|
|
}
|
|
|
|
l.log.Records = append(l.log.Records, record)
|
|
}
|
|
|
|
func GetProcessor(node *domain.WorkflowNode) (NodeProcessor, error) {
|
|
switch node.Type {
|
|
case domain.WorkflowNodeTypeStart:
|
|
return NewStartNode(node), nil
|
|
case domain.WorkflowNodeTypeCondition:
|
|
return NewConditionNode(node), nil
|
|
case domain.WorkflowNodeTypeApply:
|
|
return NewApplyNode(node), nil
|
|
case domain.WorkflowNodeTypeUpload:
|
|
return NewUploadNode(node), nil
|
|
case domain.WorkflowNodeTypeDeploy:
|
|
return NewDeployNode(node), nil
|
|
case domain.WorkflowNodeTypeNotify:
|
|
return NewNotifyNode(node), nil
|
|
case domain.WorkflowNodeTypeExecuteSuccess:
|
|
return NewExecuteSuccessNode(node), nil
|
|
case domain.WorkflowNodeTypeExecuteFailure:
|
|
return NewExecuteFailureNode(node), nil
|
|
}
|
|
return nil, errors.New("not implemented")
|
|
}
|
|
|
|
func getContextWorkflowId(ctx context.Context) string {
|
|
return ctx.Value("workflow_id").(string)
|
|
}
|
|
|
|
func getContextWorkflowRunId(ctx context.Context) string {
|
|
return ctx.Value("workflow_run_id").(string)
|
|
}
|