func (ch Channel) ReceiveTimeout(timeout time.Duration) Event {
	select {
	case evt := <-ch:
		return evt
	case <-time.After(timeout):
		return nil
	}
}
ReceiveTimeout returns the next event from the channel or returns nil after a timeout.
package events
import (
	"context"
	"time"
)
type Handler interface {
	Notify(Event)
}
type handlerFunc struct {
	handler func(Event)
}
func (f handlerFunc) Notify(evt Event) { f.handler(evt) }
func HandlerFunc(handler func(Event)) Handler {
	return &handlerFunc{handler}
}
type Channel chan Event
func (ch Channel) Notify(evt Event) {
	select {
	case ch <- evt:
	default:
		channelDropped.WithLabelValues(evt.Name())
	}
}