diff options
author | cdoern <cdoern@redhat.com> | 2021-07-06 14:53:56 -0400 |
---|---|---|
committer | cdoern <cdoern@redhat.com> | 2021-07-09 12:21:46 -0400 |
commit | 4624142c2db039343efc8c9b8070cf1e0d3a7262 (patch) | |
tree | ca5af233eb2ed67036eeffa05f939743196fac38 /libpod | |
parent | 1a9cb93f16cf19e14581319e2fd1b60e791f74dd (diff) | |
download | podman-4624142c2db039343efc8c9b8070cf1e0d3a7262.tar.gz podman-4624142c2db039343efc8c9b8070cf1e0d3a7262.tar.bz2 podman-4624142c2db039343efc8c9b8070cf1e0d3a7262.zip |
Implemented Until Query Parameter for Containers/logs
compat containers/logs was missing actual usage of until query param.
fixes #10859
Signed-off-by: cdoern <cdoern@redhat.com>
Diffstat (limited to 'libpod')
-rw-r--r-- | libpod/container_log.go | 4 | ||||
-rw-r--r-- | libpod/container_log_linux.go | 8 | ||||
-rw-r--r-- | libpod/logs/log.go | 8 |
3 files changed, 17 insertions, 3 deletions
diff --git a/libpod/container_log.go b/libpod/container_log.go index 43b3f7736..743c9c61b 100644 --- a/libpod/container_log.go +++ b/libpod/container_log.go @@ -56,7 +56,7 @@ func (c *Container) readFromLogFile(ctx context.Context, options *logs.LogOption for _, nll := range tailLog { nll.CID = c.ID() nll.CName = c.Name() - if nll.Since(options.Since) { + if nll.Since(options.Since) && nll.Until(options.Until) { logChannel <- nll } } @@ -88,7 +88,7 @@ func (c *Container) readFromLogFile(ctx context.Context, options *logs.LogOption } nll.CID = c.ID() nll.CName = c.Name() - if nll.Since(options.Since) { + if nll.Since(options.Since) && nll.Until(options.Until) { logChannel <- nll } } diff --git a/libpod/container_log_linux.go b/libpod/container_log_linux.go index 892ee34e3..9f9dd3b0d 100644 --- a/libpod/container_log_linux.go +++ b/libpod/container_log_linux.go @@ -97,6 +97,7 @@ func (c *Container) readFromJournal(ctx context.Context, options *logs.LogOption } }() + beforeTimeStamp := true afterTimeStamp := false // needed for options.Since tailQueue := []*logs.LogLine{} // needed for options.Tail doTail := options.Tail > 0 @@ -156,6 +157,13 @@ func (c *Container) readFromJournal(ctx context.Context, options *logs.LogOption } afterTimeStamp = true } + if beforeTimeStamp { + entryTime := time.Unix(0, int64(entry.RealtimeTimestamp)*int64(time.Microsecond)) + if entryTime.Before(options.Until) || !options.Until.IsZero() { + continue + } + beforeTimeStamp = false + } // If we're reading an event and the container exited/died, // then we're done and can return. diff --git a/libpod/logs/log.go b/libpod/logs/log.go index 308053b47..1a0223edc 100644 --- a/libpod/logs/log.go +++ b/libpod/logs/log.go @@ -34,6 +34,7 @@ type LogOptions struct { Details bool Follow bool Since time.Time + Until time.Time Tail int64 Timestamps bool Multi bool @@ -184,7 +185,12 @@ func (l *LogLine) String(options *LogOptions) string { // Since returns a bool as to whether a log line occurred after a given time func (l *LogLine) Since(since time.Time) bool { - return l.Time.After(since) + return l.Time.After(since) || since.IsZero() +} + +// Until returns a bool as to whether a log line occurred before a given time +func (l *LogLine) Until(until time.Time) bool { + return l.Time.Before(until) || until.IsZero() } // NewLogLine creates a logLine struct from a container log string |