Skip to content

Commit f9c9921

Browse files
committed
Expose a beat interface to put a generic event on a channel after a certain time
1 parent 43caae6 commit f9c9921

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

pkg/beat/beat.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package beat
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"sigs.k8s.io/controller-runtime/pkg/event"
8+
)
9+
10+
// Beat put a generic event on a channel after a certain time (e.g.: every day).
11+
type Beat struct {
12+
C chan event.GenericEvent
13+
TickerDuration time.Duration
14+
}
15+
16+
// NewBeat instantiate a beat.
17+
func NewBeat(tickerDuration time.Duration) *Beat {
18+
return &Beat{
19+
C: make(chan event.GenericEvent),
20+
TickerDuration: tickerDuration,
21+
}
22+
}
23+
24+
// Start watches for events on a channel after a certain time (e.g.: every day). It's designed to be run by a manager.
25+
func (b *Beat) Start(ctx context.Context) error {
26+
ticker := time.NewTicker(b.TickerDuration)
27+
28+
go func() {
29+
b.C <- event.GenericEvent{}
30+
31+
for {
32+
select {
33+
case <-ctx.Done():
34+
return
35+
36+
case <-ticker.C:
37+
b.C <- event.GenericEvent{}
38+
}
39+
}
40+
}()
41+
42+
return nil
43+
}

0 commit comments

Comments
 (0)