42 lines
703 B
Go
42 lines
703 B
Go
|
// Adapted from https://codereview.stackexchange.com/questions/144273/watchdog-in-golang
|
||
|
|
||
|
package watchdog
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type watchdog struct {
|
||
|
interval time.Duration
|
||
|
callback func()
|
||
|
timer *time.Timer
|
||
|
}
|
||
|
|
||
|
func New(interval time.Duration, callback func()) *watchdog {
|
||
|
w := watchdog{
|
||
|
interval: interval,
|
||
|
callback: callback,
|
||
|
timer: nil,
|
||
|
}
|
||
|
return &w
|
||
|
}
|
||
|
|
||
|
func (w *watchdog) Start() {
|
||
|
w.timer = time.AfterFunc(w.interval, w.callback)
|
||
|
}
|
||
|
|
||
|
// Helper to allow the watchdog to be started by a call to Kick directly
|
||
|
func (w *watchdog) DeferredStart() {
|
||
|
w.Start()
|
||
|
w.Stop()
|
||
|
}
|
||
|
|
||
|
func (w *watchdog) Stop() {
|
||
|
w.timer.Stop()
|
||
|
}
|
||
|
|
||
|
func (w *watchdog) Kick() {
|
||
|
w.Stop()
|
||
|
w.timer.Reset(w.interval)
|
||
|
}
|