summaryrefslogtreecommitdiff
path: root/libpod/events/journal_linux.go
diff options
context:
space:
mode:
Diffstat (limited to 'libpod/events/journal_linux.go')
-rw-r--r--libpod/events/journal_linux.go23
1 files changed, 19 insertions, 4 deletions
diff --git a/libpod/events/journal_linux.go b/libpod/events/journal_linux.go
index 9a514e302..8b7e448b1 100644
--- a/libpod/events/journal_linux.go
+++ b/libpod/events/journal_linux.go
@@ -8,6 +8,7 @@ import (
"strconv"
"time"
+ "github.com/containers/podman/v2/pkg/util"
"github.com/coreos/go-systemd/v22/journal"
"github.com/coreos/go-systemd/v22/sdjournal"
"github.com/pkg/errors"
@@ -72,11 +73,22 @@ func (e EventJournalD) Read(ctx context.Context, options ReadOptions) error {
if err != nil {
return errors.Wrapf(err, "failed to generate event options")
}
+ var untilTime time.Time
+ if len(options.Until) > 0 {
+ untilTime, err = util.ParseInputTime(options.Until)
+ if err != nil {
+ return err
+ }
+ }
j, err := sdjournal.NewJournal()
if err != nil {
return err
}
-
+ defer func() {
+ if err := j.Close(); err != nil {
+ logrus.Errorf("Unable to close journal :%v", err)
+ }
+ }()
// match only podman journal entries
podmanJournal := sdjournal.Match{Field: "SYSLOG_IDENTIFIER", Value: "podman"}
if err := j.AddMatch(podmanJournal.String()); err != nil {
@@ -104,7 +116,6 @@ func (e EventJournalD) Read(ctx context.Context, options ReadOptions) error {
if err != nil {
return errors.Wrap(err, "failed to get journal cursor")
}
-
for {
select {
case <-ctx.Done():
@@ -122,10 +133,14 @@ func (e EventJournalD) Read(ctx context.Context, options ReadOptions) error {
return errors.Wrap(err, "failed to get journal cursor")
}
if prevCursor == newCursor {
- if len(options.Until) > 0 || !options.Stream {
+ if !options.Stream || (len(options.Until) > 0 && time.Now().After(untilTime)) {
break
}
- _ = j.Wait(sdjournal.IndefiniteWait)
+ t := sdjournal.IndefiniteWait
+ if len(options.Until) > 0 {
+ t = time.Until(untilTime)
+ }
+ _ = j.Wait(t)
continue
}
prevCursor = newCursor