mirror of
https://github.com/rancher/steve.git
synced 2025-09-13 22:09:31 +00:00
Only send counts every second if there is a change
This commit is contained in:
40
pkg/resources/counts/buffer.go
Normal file
40
pkg/resources/counts/buffer.go
Normal file
@@ -0,0 +1,40 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user