github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/pkg/varlinkapi/events.go (about) 1 // +build varlink 2 3 package varlinkapi 4 5 import ( 6 "time" 7 8 "github.com/containers/libpod/libpod/events" 9 iopodman "github.com/containers/libpod/pkg/varlink" 10 ) 11 12 // GetEvents is a remote endpoint to get events from the event log 13 func (i *VarlinkAPI) GetEvents(call iopodman.VarlinkCall, filter []string, since string, until string) error { 14 var ( 15 fromStart bool 16 eventsError error 17 event *events.Event 18 stream bool 19 ) 20 if call.WantsMore() { 21 stream = true 22 call.Continues = true 23 } 24 if len(since) > 0 || len(until) > 0 { 25 fromStart = true 26 } 27 eventChannel := make(chan *events.Event) 28 go func() { 29 readOpts := events.ReadOptions{FromStart: fromStart, Stream: stream, Filters: filter, EventChannel: eventChannel} 30 eventsError = i.Runtime.Events(readOpts) 31 }() 32 if eventsError != nil { 33 return call.ReplyErrorOccurred(eventsError.Error()) 34 } 35 for { 36 event = <-eventChannel 37 if event == nil { 38 call.Continues = false 39 break 40 } 41 call.ReplyGetEvents(iopodman.Event{ 42 Id: event.ID, 43 Image: event.Image, 44 Name: event.Name, 45 Status: string(event.Status), 46 Time: event.Time.Format(time.RFC3339Nano), 47 Type: string(event.Type), 48 }) 49 if !call.Continues { 50 // For a one-shot on events, we break out here 51 break 52 } 53 } 54 return nil 55 }