gosuki/utils/events.go

41 lines
762 B
Go
Raw Normal View History

package utils
2018-11-09 17:25:50 +00:00
import (
"time"
2020-11-06 17:50:36 +00:00
"git.sp4ke.xyz/sp4ke/gomark/logging"
"git.sp4ke.xyz/sp4ke/gomark/watch"
2020-08-12 18:13:01 +00:00
2018-11-09 17:25:50 +00:00
"github.com/fsnotify/fsnotify"
)
var log = logging.GetLogger("WATCH")
2018-11-13 18:57:07 +00:00
// Run reducer in its own thread when the watcher is started
2018-11-09 17:25:50 +00:00
// It receives a struct{event, func} and runs the func only once in the interval
func ReduceEvents(interval time.Duration,
input chan fsnotify.Event,
w watch.Watchable) {
2018-11-09 17:25:50 +00:00
log.Debug("Running reducer")
timer := time.NewTimer(interval)
var events []bool
for {
select {
case <-input:
timer.Reset(interval)
events = append(events, true)
case <-timer.C:
if len(events) > 0 {
log.Debug("<reduce>: running run event")
2018-11-09 17:25:50 +00:00
w.Run()
// Empty events queue
events = make([]bool, 0)
}
}
}
}