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