mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-08 13:39:53 +00:00
70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package nodeprocessor
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/usual2970/certimate/internal/domain"
|
|
)
|
|
|
|
type RunLog struct {
|
|
NodeName string `json:"node_name"`
|
|
Err string `json:"err"`
|
|
Outputs []RunLogOutput `json:"outputs"`
|
|
}
|
|
|
|
type RunLogOutput struct {
|
|
Time string `json:"time"`
|
|
Title string `json:"title"`
|
|
Content string `json:"content"`
|
|
Error string `json:"error"`
|
|
}
|
|
|
|
type NodeProcessor interface {
|
|
Run(ctx context.Context) error
|
|
Log(ctx context.Context) *RunLog
|
|
AddOutput(ctx context.Context, time, title, content string, err ...string)
|
|
}
|
|
|
|
type Logger struct {
|
|
log *RunLog
|
|
}
|
|
|
|
func NewLogger(node *domain.WorkflowNode) *Logger {
|
|
return &Logger{
|
|
log: &RunLog{
|
|
NodeName: node.Name,
|
|
Outputs: make([]RunLogOutput, 0),
|
|
},
|
|
}
|
|
}
|
|
|
|
func (l *Logger) Log(ctx context.Context) *RunLog {
|
|
return l.log
|
|
}
|
|
|
|
func (l *Logger) AddOutput(ctx context.Context, time, title, content string, err ...string) {
|
|
output := RunLogOutput{
|
|
Time: time,
|
|
Title: title,
|
|
Content: content,
|
|
}
|
|
if len(err) > 0 {
|
|
output.Error = err[0]
|
|
l.log.Err = err[0]
|
|
}
|
|
l.log.Outputs = append(l.log.Outputs, output)
|
|
}
|
|
|
|
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
|
|
}
|
|
return nil, errors.New("not implemented")
|
|
}
|