Documentation ¶
Overview ¶
Package daemon for the run job background and manage them.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type JOption ¶
type JOption func(*job)
JOption configure job
func WithJClose ¶
WithJClose set func which execute after job stop
func WithJMiddleware ¶
func WithJMiddleware(f ...Middleware) JOption
WithJMiddleware add middleware to job
type Job ¶
type Job interface { RunCtx(ctx context.Context) error CloseCtx(ctx context.Context) error fmt.Stringer Configure(opts ...Option) Setting }
Job interface for the do by manager
func NewJob ¶
NewJob create new job with options
Example ¶
ctx := context.Background() m := NewManager() j := NewJob(func(ctx context.Context) error { //do some return nil }, WithJName("my awesome job")) m.DoCtx(ctx, j) m.Wait()
Output:
Example (Delay) ¶
run job after delay once ignore freq
ctx := context.Background() m := NewManager() j := NewJob(func(ctx context.Context) error { //do some return DelayJob(time.Hour, errors.New("some reason")) }) m.DoCtx(ctx, j) m.Wait()
Output:
Example (Option) ¶
all option may replace then DoCtx
ctx := context.Background() m := NewManager() j := NewJob(func(ctx context.Context) error { //do some return nil }, //set freq run job WithJOption(WithFreq(time.Minute)), //set delay to start job WithJOption(WithDelay(time.Minute)), ) m.DoCtx(ctx, j) m.Wait()
Output:
Example (Stop) ¶
ctx := context.Background() m := NewManager() j := NewJob(func(ctx context.Context) error { //do some return StopJob(errors.New("some reason")) }) m.DoCtx(ctx, j) m.Wait()
Output:
Example (WithClose) ¶
ctx := context.Background() m := NewManager() j := NewJob(func(ctx context.Context) error { //do some return nil }, WithJClose(func(ctx context.Context) error { //do some after job stop return nil })) m.DoCtx(ctx, j) m.Wait()
Output:
Example (WithMiddleware) ¶
ctx := context.Background() m := NewManager() mw := NewMiddleware(func(ctx context.Context, next Run) error { //do some before run func err := next(ctx) //do some after run func return err }, func(ctx context.Context, next Run) error { //do some before close func err := next(ctx) //do some after close func return err }) //middleware execute only run func mwr := NewMiddleware(func(ctx context.Context, next Run) error { return next(ctx) }, nil) j := NewJob(func(ctx context.Context) error { //do some return nil }, WithJMiddleware(mw, mwr)) m.DoCtx(ctx, j) m.Wait()
Output:
type MOption ¶
type MOption func(*manager)
MOption configure manager
func WithHandleCloseErr ¶
WithHandleCloseErr Handle close err
func WithMMiddleware ¶
func WithMMiddleware(m ...Middleware) MOption
WithMMiddleware set middleware to manager
type Manager ¶
Manager monitoring do job
func NewManager ¶
NewManager create new manager with options
Example ¶
ctx := context.Background() m := NewManager() j := NewJob(func(ctx context.Context) error { //do some job return nil }, WithJName("awesome job")) m.DoCtx(ctx, j, // set frequency run job WithFreq(time.Minute), //set delay for first run job WithDelay(time.Second), //set handler if run job return err WithHandleErr(func(err error) { log.Println(err) }), ) m.Wait()
Output:
Example (WithClose) ¶
ctx := context.Background() m := NewManager() defer func() { _ = m.Close() }() j := NewJob(func(ctx context.Context) error { //do some job return nil }, WithJName("awesome job")) m.DoCtx(ctx, j, WithFreq(time.Minute)) exDone := make(chan struct{}) //some blocked process <-exDone
Output:
Example (WithOptions) ¶
ctx := context.Background() middleware := NewMiddleware(func(ctx context.Context, next Run) error { //do some before run all job err := next(ctx) //do some after run all job return err }, func(ctx context.Context, next Run) error { //do some before close job err := next(ctx) //do some after close job return err }) m := NewManager( WithMMiddleware(middleware), WithHandleCloseErr(func(err error) { //do some if close return err log.Println(err) }), ) j := NewJob(func(ctx context.Context) error { //do some job return nil }, WithJName("awesome job")) m.DoCtx(ctx, j, WithFreq(time.Minute))
Output:
type Middleware ¶
type Middleware struct {
// contains filtered or unexported fields
}
Middleware midleware to set manager or job
func NewMiddleware ¶
func NewMiddleware(run Handle, close Handle) Middleware
NewMiddleware create new Middleware
func RetryMiddleware ¶
func RetryMiddleware(max uint8, handleRetry func(err error) error) Middleware
RetryMiddleware set retry job and change return after max retry
type Option ¶
type Option func(*config)
Option for the do job
func WithHandleErr ¶
WithHandleErr replace Handle errors