mirror of https://github.com/containers/podman.git
50 lines
999 B
Go
50 lines
999 B
Go
package events
|
|
|
|
import (
|
|
"context"
|
|
)
|
|
|
|
// EventMemory is the structure for event writing to a channel. It contains the eventer
|
|
// options and the event itself. Methods for reading and writing are also defined from it.
|
|
type EventMemory struct {
|
|
options EventerOptions
|
|
elements chan *Event
|
|
}
|
|
|
|
// Write event to memory queue
|
|
func (e EventMemory) Write(event Event) (err error) {
|
|
e.elements <- &event
|
|
return
|
|
}
|
|
|
|
// Read event(s) from memory queue
|
|
func (e EventMemory) Read(ctx context.Context, options ReadOptions) (err error) {
|
|
select {
|
|
case <-ctx.Done():
|
|
return
|
|
default:
|
|
}
|
|
|
|
select {
|
|
case event := <-e.elements:
|
|
options.EventChannel <- event
|
|
default:
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// String returns eventer type
|
|
func (e EventMemory) String() string {
|
|
return e.options.EventerType
|
|
}
|
|
|
|
// NewMemoryEventer returns configured MemoryEventer
|
|
func NewMemoryEventer() Eventer {
|
|
return EventMemory{
|
|
options: EventerOptions{
|
|
EventerType: Memory.String(),
|
|
},
|
|
elements: make(chan *Event, 100),
|
|
}
|
|
}
|