diff --git a/go.mod b/go.mod index 885672c..56fe507 100644 --- a/go.mod +++ b/go.mod @@ -26,6 +26,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/nsqio/go-nsq v1.1.0 // indirect github.com/pelletier/go-toml/v2 v2.0.1 // indirect + github.com/robfig/cron v1.2.0 // indirect github.com/ugorji/go/codec v1.2.7 // indirect golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect diff --git a/go.sum b/go.sum index c432da2..a2dbbe3 100644 --- a/go.sum +++ b/go.sum @@ -73,6 +73,8 @@ github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsK github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= +github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= diff --git a/xserver/cron.go b/xserver/cron.go new file mode 100644 index 0000000..85556a3 --- /dev/null +++ b/xserver/cron.go @@ -0,0 +1,39 @@ +package xserver + +import ( + "context" + "github.com/robfig/cron" +) + +type cronServer struct { + cr *cron.Cron + err error +} + +func NewCron() *cronServer { + cr := cron.New() + return &cronServer{ + cr: cr, + } +} + +func (c *cronServer) Register(spec string, fun func()) error { + return c.cr.AddFunc(spec, fun) +} + +func (c *cronServer) Start() error { + if c.err != nil { + return c.err + } + c.cr.Start() + return nil +} + +func (c *cronServer) Shutdown(ctx context.Context) error { + c.cr.Stop() + return nil +} + +func (c *cronServer) Name() string { + return "cron" +}