soakflow

package
v1.34.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 19, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Hostname = soakflowapi.Hostname
	Version  = 1
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Intermediate

type Intermediate struct {
	*connector.Connector
	ToDo
}

Intermediate extends and customizes the generic base connector.

func NewIntermediate

func NewIntermediate(impl ToDo) *Intermediate

NewIntermediate creates a new instance of the intermediate.

type Mock

type Mock struct {
	*Intermediate
	// contains filtered or unexported fields
}

Mock is a mockable version of the microservice, allowing functions, event sinks and web handlers to be mocked.

func NewMock

func NewMock() *Mock

NewMock creates a new mockable version of the microservice.

func (*Mock) BoomF

func (svc *Mock) BoomF(ctx context.Context, flow *workflow.Flow) (done bool, err error)

BoomF executes the mock handler.

func (*Mock) BoomR

func (svc *Mock) BoomR(ctx context.Context, flow *workflow.Flow) (done bool, err error)

BoomR executes the mock handler.

func (*Mock) Collect

func (svc *Mock) Collect(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Collect executes the mock handler.

func (*Mock) FanA

func (svc *Mock) FanA(ctx context.Context, flow *workflow.Flow) (done bool, err error)

FanA executes the mock handler.

func (*Mock) Inner

func (svc *Mock) Inner(ctx context.Context) (graph *workflow.Graph, err error)

Inner returns the workflow graph, or a mocked graph if MockInner was called.

func (*Mock) InnerEntry

func (svc *Mock) InnerEntry(ctx context.Context, flow *workflow.Flow) (done bool, err error)

InnerEntry executes the mock handler.

func (*Mock) Join

func (svc *Mock) Join(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Join executes the mock handler.

func (*Mock) Loop

func (svc *Mock) Loop(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Loop executes the mock handler.

func (*Mock) MockBoomF

func (svc *Mock) MockBoomF(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockBoomF sets up a mock handler for BoomF.

func (*Mock) MockBoomR

func (svc *Mock) MockBoomR(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockBoomR sets up a mock handler for BoomR.

func (*Mock) MockCollect

func (svc *Mock) MockCollect(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockCollect sets up a mock handler for Collect.

func (*Mock) MockFanA

func (svc *Mock) MockFanA(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockFanA sets up a mock handler for FanA.

func (*Mock) MockInner

func (svc *Mock) MockInner(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockInner sets up a mock handler for the Inner workflow. The handler receives typed inputs from the workflow's state and returns typed outputs. A nil handler clears the mock.

func (*Mock) MockInnerEntry

func (svc *Mock) MockInnerEntry(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockInnerEntry sets up a mock handler for InnerEntry.

func (*Mock) MockJoin

func (svc *Mock) MockJoin(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockJoin sets up a mock handler for Join.

func (*Mock) MockLoop

func (svc *Mock) MockLoop(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockLoop sets up a mock handler for Loop.

func (*Mock) MockRecover

func (svc *Mock) MockRecover(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockRecover sets up a mock handler for Recover.

func (*Mock) MockSeed

func (svc *Mock) MockSeed(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockSeed sets up a mock handler for Seed.

func (*Mock) MockSoak

func (svc *Mock) MockSoak(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockSoak sets up a mock handler for the Soak workflow. The handler receives typed inputs from the workflow's state and returns typed outputs. A nil handler clears the mock.

func (*Mock) MockWork

func (svc *Mock) MockWork(handler func(ctx context.Context, flow *workflow.Flow) (done bool, err error)) *Mock

MockWork sets up a mock handler for Work.

func (*Mock) OnShutdown

func (svc *Mock) OnShutdown(ctx context.Context) (err error)

OnShutdown is called when the microservice is shut down.

func (*Mock) OnStartup

func (svc *Mock) OnStartup(ctx context.Context) (err error)

OnStartup is called when the microservice is started up.

func (*Mock) Recover

func (svc *Mock) Recover(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Recover executes the mock handler.

func (*Mock) Seed

func (svc *Mock) Seed(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Seed executes the mock handler.

func (*Mock) Soak

func (svc *Mock) Soak(ctx context.Context) (graph *workflow.Graph, err error)

Soak returns the workflow graph, or a mocked graph if MockSoak was called.

func (*Mock) Work

func (svc *Mock) Work(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Work executes the mock handler.

type Service

type Service struct {
	*Intermediate // IMPORTANT: Do not remove
}

Service implements soakflow.verify: a high-volume liveness soak over a complex, input-driven workflow. Tasks are intentionally trivial (no sleeps) so flows churn fast and maximize the volume exercised; the graph's shape - not the task work - is what stresses the dispatcher.

func NewService

func NewService() *Service

NewService creates a new instance of the microservice.

func (*Service) BoomF

func (svc *Service) BoomF(ctx context.Context, flow *workflow.Flow) (done bool, err error)

BoomF always errors and the graph has no error transition for it, so the flow fails - a terminal status, which is still "finished" for the soak.

func (*Service) BoomR

func (svc *Service) BoomR(ctx context.Context, flow *workflow.Flow) (done bool, err error)

BoomR always errors; the graph's onError transition routes it to Recover, so the flow recovers and completes.

func (*Service) Collect

func (svc *Service) Collect(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Collect is the fan-in target; the reducer has merged the per-element deltas.

func (*Service) FanA

func (svc *Service) FanA(ctx context.Context, flow *workflow.Flow) (done bool, err error)

FanA is the dynamic fan-out source; the forEach transition spans `items`.

func (*Service) Init

func (svc *Service) Init(initializer func(svc *Service) (err error)) *Service

Init enables a single-statement pattern for initializing the microservice.

func (*Service) Inner

func (svc *Service) Inner(ctx context.Context) (graph *workflow.Graph, err error)

Inner defines the subgraph invoked by Soak: a single task then END.

func (*Service) InnerEntry

func (svc *Service) InnerEntry(ctx context.Context, flow *workflow.Flow) (done bool, err error)

InnerEntry is the single task of the Inner subgraph.

func (*Service) Join

func (svc *Service) Join(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Join is the convergence point before the workflow ends.

func (*Service) Loop

func (svc *Service) Loop(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Loop decrements loopsLeft and gotos itself until it reaches zero, then falls through. Bounded by Seed's clamp, so it always terminates.

func (*Service) OnShutdown

func (svc *Service) OnShutdown(ctx context.Context) (err error)

OnShutdown is called when the microservice is shut down.

func (*Service) OnStartup

func (svc *Service) OnStartup(ctx context.Context) (err error)

OnStartup is called when the microservice is started up.

func (*Service) Recover

func (svc *Service) Recover(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Recover is the onError handler; it resumes the flow to completion.

func (*Service) Seed

func (svc *Service) Seed(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Seed normalizes the random inputs into bounded state so every path terminates: branch in [0,4] selects the route, fanWidth in [1,6] sizes the fan-out array, and loops in [0,5] bounds the goto loop.

func (*Service) Soak

func (svc *Service) Soak(ctx context.Context) (graph *workflow.Graph, err error)

Soak defines the complex, input-driven workflow graph. From a clamped `branch` the entry fans into one of five mutually exclusive routes - a dynamic forEach fan-out with a sum-reducer fan-in, a bounded goto loop, a subgraph, an onError-recovered failure, and an unhandled failure - all converging at Join (except the unhandled failure, which terminates the flow as failed).

func (*Service) Work

func (svc *Service) Work(ctx context.Context, flow *workflow.Flow) (done bool, err error)

Work processes one fan-out element and contributes a delta to the sum reducer. The `sumWork` field name auto-selects the numeric-add reducer at fan-in.

type ToDo

type ToDo interface {
	OnStartup(ctx context.Context) (err error)
	OnShutdown(ctx context.Context) (err error)
	Seed(ctx context.Context, flow *workflow.Flow) (done bool, err error)       // MARKER: Seed
	FanA(ctx context.Context, flow *workflow.Flow) (done bool, err error)       // MARKER: FanA
	Work(ctx context.Context, flow *workflow.Flow) (done bool, err error)       // MARKER: Work
	Collect(ctx context.Context, flow *workflow.Flow) (done bool, err error)    // MARKER: Collect
	Loop(ctx context.Context, flow *workflow.Flow) (done bool, err error)       // MARKER: Loop
	BoomR(ctx context.Context, flow *workflow.Flow) (done bool, err error)      // MARKER: BoomR
	Recover(ctx context.Context, flow *workflow.Flow) (done bool, err error)    // MARKER: Recover
	BoomF(ctx context.Context, flow *workflow.Flow) (done bool, err error)      // MARKER: BoomF
	Join(ctx context.Context, flow *workflow.Flow) (done bool, err error)       // MARKER: Join
	InnerEntry(ctx context.Context, flow *workflow.Flow) (done bool, err error) // MARKER: InnerEntry
	Soak(ctx context.Context) (graph *workflow.Graph, err error)                // MARKER: Soak
	Inner(ctx context.Context) (graph *workflow.Graph, err error)               // MARKER: Inner
}

ToDo is implemented by the service or mock.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL