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()
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()
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()
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()
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()
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()
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()
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
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))
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