This repository has been archived on 2020-09-27. You can view files and clone it, but cannot push or open issues or pull requests.
2017-04-28 10:27:36 +02:00
|
|
|
// A little lib for cronjobs to run it in background
|
2017-04-05 20:23:29 +02:00
|
|
|
package worker
|
2017-04-05 19:03:44 +02:00
|
|
|
|
|
|
|
import "time"
|
|
|
|
|
2017-04-28 10:27:36 +02:00
|
|
|
// a struct which handle the job
|
2017-04-05 19:03:44 +02:00
|
|
|
type Worker struct {
|
|
|
|
every time.Duration
|
|
|
|
run func()
|
|
|
|
quit chan struct{}
|
|
|
|
}
|
|
|
|
|
2017-04-28 10:27:36 +02:00
|
|
|
// create a new Worker with timestamp run every and his function
|
2017-04-05 19:03:44 +02:00
|
|
|
func NewWorker(every time.Duration, f func()) (w *Worker) {
|
|
|
|
w = &Worker{
|
|
|
|
every: every,
|
|
|
|
run: f,
|
|
|
|
quit: make(chan struct{}),
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2017-04-28 10:27:36 +02:00
|
|
|
// start the worker
|
|
|
|
// please us it as a goroutine: go w.Start()
|
2017-04-05 19:03:44 +02:00
|
|
|
func (w *Worker) Start() {
|
|
|
|
ticker := time.NewTicker(w.every)
|
|
|
|
for {
|
|
|
|
select {
|
|
|
|
case <-ticker.C:
|
|
|
|
w.run()
|
|
|
|
case <-w.quit:
|
|
|
|
ticker.Stop()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-04-28 10:27:36 +02:00
|
|
|
|
|
|
|
// stop the worker
|
2017-04-05 19:03:44 +02:00
|
|
|
func (w *Worker) Close() {
|
|
|
|
close(w.quit)
|
|
|
|
}
|