248 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package flow
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"go.unistack.org/micro/v3/client"
 | 
						|
	"go.unistack.org/micro/v3/logger"
 | 
						|
	"go.unistack.org/micro/v3/meter"
 | 
						|
	"go.unistack.org/micro/v3/store"
 | 
						|
	"go.unistack.org/micro/v3/tracer"
 | 
						|
)
 | 
						|
 | 
						|
// Option func
 | 
						|
type Option func(*Options)
 | 
						|
 | 
						|
// Options server struct
 | 
						|
type Options struct {
 | 
						|
	// Context holds the external options and can be used for flow shutdown
 | 
						|
	Context context.Context
 | 
						|
	// Client holds the client.Client
 | 
						|
	Client client.Client
 | 
						|
	// Tracer holds the tracer
 | 
						|
	Tracer tracer.Tracer
 | 
						|
	// Logger holds the logger
 | 
						|
	Logger logger.Logger
 | 
						|
	// Meter holds the meter
 | 
						|
	Meter meter.Meter
 | 
						|
	// Store used for intermediate results
 | 
						|
	Store store.Store
 | 
						|
}
 | 
						|
 | 
						|
// NewOptions returns new options struct with default or passed values
 | 
						|
func NewOptions(opts ...Option) Options {
 | 
						|
	options := Options{
 | 
						|
		Context: context.Background(),
 | 
						|
		Logger:  logger.DefaultLogger,
 | 
						|
		Meter:   meter.DefaultMeter,
 | 
						|
		Tracer:  tracer.DefaultTracer,
 | 
						|
		Client:  client.DefaultClient,
 | 
						|
	}
 | 
						|
 | 
						|
	for _, o := range opts {
 | 
						|
		o(&options)
 | 
						|
	}
 | 
						|
 | 
						|
	return options
 | 
						|
}
 | 
						|
 | 
						|
// Logger sets the logger option
 | 
						|
func Logger(l logger.Logger) Option {
 | 
						|
	return func(o *Options) {
 | 
						|
		o.Logger = l
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Meter sets the meter option
 | 
						|
func Meter(m meter.Meter) Option {
 | 
						|
	return func(o *Options) {
 | 
						|
		o.Meter = m
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Client to use for sync/async communication
 | 
						|
func Client(c client.Client) Option {
 | 
						|
	return func(o *Options) {
 | 
						|
		o.Client = c
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Context specifies a context for the service.
 | 
						|
// Can be used to signal shutdown of the flow
 | 
						|
// or can be used for extra option values.
 | 
						|
func Context(ctx context.Context) Option {
 | 
						|
	return func(o *Options) {
 | 
						|
		o.Context = ctx
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Tracer mechanism for distributed tracking
 | 
						|
func Tracer(t tracer.Tracer) Option {
 | 
						|
	return func(o *Options) {
 | 
						|
		o.Tracer = t
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Store used for intermediate results
 | 
						|
func Store(s store.Store) Option {
 | 
						|
	return func(o *Options) {
 | 
						|
		o.Store = s
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WorkflowOption func signature
 | 
						|
type WorkflowOption func(*WorkflowOptions)
 | 
						|
 | 
						|
// WorkflowOptions holds workflow options
 | 
						|
type WorkflowOptions struct {
 | 
						|
	Context context.Context
 | 
						|
	ID      string
 | 
						|
}
 | 
						|
 | 
						|
// WorkflowID set workflow id
 | 
						|
func WorkflowID(id string) WorkflowOption {
 | 
						|
	return func(o *WorkflowOptions) {
 | 
						|
		o.ID = id
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// ExecuteOptions holds execute options
 | 
						|
type ExecuteOptions struct {
 | 
						|
	// Client holds the client.Client
 | 
						|
	Client client.Client
 | 
						|
	// Tracer holds the tracer
 | 
						|
	Tracer tracer.Tracer
 | 
						|
	// Logger holds the logger
 | 
						|
	Logger logger.Logger
 | 
						|
	// Meter holds the meter
 | 
						|
	Meter meter.Meter
 | 
						|
	// Context can be used to abort execution or pass additional opts
 | 
						|
	Context context.Context
 | 
						|
	// Start step
 | 
						|
	Start string
 | 
						|
	// Timeout for execution
 | 
						|
	Timeout time.Duration
 | 
						|
	// Reverse execution
 | 
						|
	Reverse bool
 | 
						|
	// Async enables async execution
 | 
						|
	Async bool
 | 
						|
}
 | 
						|
 | 
						|
// ExecuteOption func signature
 | 
						|
type ExecuteOption func(*ExecuteOptions)
 | 
						|
 | 
						|
// ExecuteClient pass client.Client to ExecuteOption
 | 
						|
func ExecuteClient(c client.Client) ExecuteOption {
 | 
						|
	return func(o *ExecuteOptions) {
 | 
						|
		o.Client = c
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// ExecuteTracer pass tracer.Tracer to ExecuteOption
 | 
						|
func ExecuteTracer(t tracer.Tracer) ExecuteOption {
 | 
						|
	return func(o *ExecuteOptions) {
 | 
						|
		o.Tracer = t
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// ExecuteLogger pass logger.Logger to ExecuteOption
 | 
						|
func ExecuteLogger(l logger.Logger) ExecuteOption {
 | 
						|
	return func(o *ExecuteOptions) {
 | 
						|
		o.Logger = l
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// ExecuteMeter pass meter.Meter to ExecuteOption
 | 
						|
func ExecuteMeter(m meter.Meter) ExecuteOption {
 | 
						|
	return func(o *ExecuteOptions) {
 | 
						|
		o.Meter = m
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// ExecuteContext pass context.Context ot ExecuteOption
 | 
						|
func ExecuteContext(ctx context.Context) ExecuteOption {
 | 
						|
	return func(o *ExecuteOptions) {
 | 
						|
		o.Context = ctx
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// ExecuteReverse says that dag must be run in reverse order
 | 
						|
func ExecuteReverse(b bool) ExecuteOption {
 | 
						|
	return func(o *ExecuteOptions) {
 | 
						|
		o.Reverse = b
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// ExecuteTimeout pass timeout time.Duration for execution
 | 
						|
func ExecuteTimeout(td time.Duration) ExecuteOption {
 | 
						|
	return func(o *ExecuteOptions) {
 | 
						|
		o.Timeout = td
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// ExecuteAsync says that caller does not wait for execution complete
 | 
						|
func ExecuteAsync(b bool) ExecuteOption {
 | 
						|
	return func(o *ExecuteOptions) {
 | 
						|
		o.Async = b
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// NewExecuteOptions create new ExecuteOptions struct
 | 
						|
func NewExecuteOptions(opts ...ExecuteOption) ExecuteOptions {
 | 
						|
	options := ExecuteOptions{
 | 
						|
		Client:  client.DefaultClient,
 | 
						|
		Logger:  logger.DefaultLogger,
 | 
						|
		Tracer:  tracer.DefaultTracer,
 | 
						|
		Meter:   meter.DefaultMeter,
 | 
						|
		Context: context.Background(),
 | 
						|
	}
 | 
						|
	for _, o := range opts {
 | 
						|
		o(&options)
 | 
						|
	}
 | 
						|
	return options
 | 
						|
}
 | 
						|
 | 
						|
// StepOptions holds step options
 | 
						|
type StepOptions struct {
 | 
						|
	Context  context.Context
 | 
						|
	Fallback string
 | 
						|
	ID       string
 | 
						|
	Requires []string
 | 
						|
}
 | 
						|
 | 
						|
// StepOption func signature
 | 
						|
type StepOption func(*StepOptions)
 | 
						|
 | 
						|
// NewStepOptions create new StepOptions struct
 | 
						|
func NewStepOptions(opts ...StepOption) StepOptions {
 | 
						|
	options := StepOptions{
 | 
						|
		Context: context.Background(),
 | 
						|
	}
 | 
						|
	for _, o := range opts {
 | 
						|
		o(&options)
 | 
						|
	}
 | 
						|
	return options
 | 
						|
}
 | 
						|
 | 
						|
// StepID sets the step id for dag
 | 
						|
func StepID(id string) StepOption {
 | 
						|
	return func(o *StepOptions) {
 | 
						|
		o.ID = id
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// StepRequires specifies required steps
 | 
						|
func StepRequires(steps ...string) StepOption {
 | 
						|
	return func(o *StepOptions) {
 | 
						|
		o.Requires = steps
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// StepFallback set the step to run on error
 | 
						|
func StepFallback(step string) StepOption {
 | 
						|
	return func(o *StepOptions) {
 | 
						|
		o.Fallback = step
 | 
						|
	}
 | 
						|
}
 |