1
0
mirror of https://github.com/rancher/steve.git synced 2025-06-25 22:42:08 +00:00
steve/pkg/resources/counts/buffer.go

41 lines
600 B
Go
Raw Normal View History

package counts
import (
"time"
"github.com/rancher/apiserver/pkg/types"
)
func buffer(c chan types.APIEvent) chan types.APIEvent {
result := make(chan types.APIEvent)
go func() {
defer close(result)
debounce(result, c)
}()
return result
}
func debounce(result, input chan types.APIEvent) {
t := time.NewTicker(time.Second)
defer t.Stop()
var (
lastEvent *types.APIEvent
)
for {
select {
case event, ok := <-input:
if ok {
lastEvent = &event
} else {
return
}
case <-t.C:
if lastEvent != nil {
result <- *lastEvent
lastEvent = nil
}
}
}
}