From 86694da5650197a1ce9e159fbc286130e45a8572 Mon Sep 17 00:00:00 2001 From: mortharia Date: Wed, 8 Jul 2020 01:47:25 +0200 Subject: [PATCH 1/2] Add until param --- .../api/command/LogContainerCmd.java | 8 +++++ .../core/command/LogContainerCmdImpl.java | 16 ++++++++- .../core/exec/LogContainerCmdExec.java | 4 +++ .../dockerjava/cmd/LogContainerCmdIT.java | 36 +++++++++++++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java index 53674cbaaf..ca5bf5d3a0 100644 --- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java +++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java @@ -25,6 +25,9 @@ * @param since * - UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries since that timestamp. Default: * 0 (unfiltered) + * @param until + * - UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries before that timestamp. Default: + * 0 (unfiltered) */ public interface LogContainerCmd extends AsyncDockerCmd { @@ -49,6 +52,9 @@ public interface LogContainerCmd extends AsyncDockerCmd @CheckForNull Integer getSince(); + @CheckForNull + Integer getUntil(); + LogContainerCmd withContainerId(@Nonnull String containerId); /** @@ -69,6 +75,8 @@ public interface LogContainerCmd extends AsyncDockerCmd LogContainerCmd withSince(Integer since); + LogContainerCmd withUntil(Integer until); + /** * @throws com.github.dockerjava.api.NotFoundException * No such container diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java b/docker-java-core/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java index aa267fc8fd..65e337c5d0 100644 --- a/docker-java-core/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java +++ b/docker-java-core/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java @@ -24,6 +24,9 @@ * @param since * - UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries since that timestamp. Default: * 0 (unfiltered) + * @param until + * - UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries before that timestamp. Default: + * 0 (unfiltered) */ public class LogContainerCmdImpl extends AbstrAsyncDockerCmd implements LogContainerCmd { @@ -31,7 +34,7 @@ public class LogContainerCmdImpl extends AbstrAsyncDockerCmd resultCal webTarget = webTarget.queryParam("since", command.getSince()); } + if (command.getUntil() != null) { + webTarget = webTarget.queryParam("until", command.getUntil()); + } + webTarget = booleanQueryParam(webTarget, "timestamps", command.hasTimestampsEnabled()); webTarget = booleanQueryParam(webTarget, "stdout", command.hasStdoutEnabled()); webTarget = booleanQueryParam(webTarget, "stderr", command.hasStderrEnabled()); diff --git a/docker-java/src/test/java/com/github/dockerjava/cmd/LogContainerCmdIT.java b/docker-java/src/test/java/com/github/dockerjava/cmd/LogContainerCmdIT.java index 37bf5f3934..68dfeffee7 100644 --- a/docker-java/src/test/java/com/github/dockerjava/cmd/LogContainerCmdIT.java +++ b/docker-java/src/test/java/com/github/dockerjava/cmd/LogContainerCmdIT.java @@ -1,15 +1,19 @@ package com.github.dockerjava.cmd; import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.DockerClientException; import com.github.dockerjava.api.exception.NotFoundException; import com.github.dockerjava.api.model.StreamType; import com.github.dockerjava.utils.LogContainerTestCallback; +import org.apache.commons.lang.StringUtils; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.time.OffsetDateTime; import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -197,4 +201,36 @@ public void asyncLogContainerWithSince() throws Exception { assertThat(loggingCallback.toString(), containsString(snippet)); } + + @Test + public void asyncLogContainerWithUntil() throws Exception { + + CreateContainerResponse container = dockerRule.getClient().createContainerCmd("busybox") + .withCmd("/bin/sh", "-c", "while true; do echo hello; sleep 1; done") + .exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(is(emptyString()))); + + dockerRule.getClient().startContainerCmd(container.getId()).exec(); + + Thread.sleep(5000); + + int timestamp = (int) (System.currentTimeMillis() / 1000); + + LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); + + dockerRule.getClient().logContainerCmd(container.getId()) + .withStdErr(true) + .withStdOut(true) + .withUntil(timestamp) + .exec(loggingCallback); + + loggingCallback.awaitCompletion(); + + String logs = loggingCallback.toString(); + assertThat(loggingCallback.toString(), containsString("hello")); + assertEquals(5, StringUtils.countMatches(logs, "hello")); + + } } From 1f020f461ea5a4db0ec1f427c5c0bdde809ee170 Mon Sep 17 00:00:00 2001 From: mortharia Date: Wed, 8 Jul 2020 11:01:13 +0200 Subject: [PATCH 2/2] Add until param --- .../dockerjava/cmd/LogContainerCmdIT.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/docker-java/src/test/java/com/github/dockerjava/cmd/LogContainerCmdIT.java b/docker-java/src/test/java/com/github/dockerjava/cmd/LogContainerCmdIT.java index 68dfeffee7..f2b4810958 100644 --- a/docker-java/src/test/java/com/github/dockerjava/cmd/LogContainerCmdIT.java +++ b/docker-java/src/test/java/com/github/dockerjava/cmd/LogContainerCmdIT.java @@ -213,11 +213,13 @@ public void asyncLogContainerWithUntil() throws Exception { assertThat(container.getId(), not(is(emptyString()))); dockerRule.getClient().startContainerCmd(container.getId()).exec(); - Thread.sleep(5000); int timestamp = (int) (System.currentTimeMillis() / 1000); + Thread.sleep(2000); + dockerRule.getClient().stopContainerCmd(container.getId()).exec(); + LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); dockerRule.getClient().logContainerCmd(container.getId()) @@ -228,9 +230,23 @@ public void asyncLogContainerWithUntil() throws Exception { loggingCallback.awaitCompletion(); + String logs_until = loggingCallback.toString(); + assertThat(logs_until, containsString("hello")); + assertEquals(5, StringUtils.countMatches(logs_until,"hello")); + + loggingCallback = new LogContainerTestCallback(); + + dockerRule.getClient().logContainerCmd(container.getId()) + .withStdErr(true) + .withStdOut(true) + .exec(loggingCallback); + + loggingCallback.awaitCompletion(); + String logs = loggingCallback.toString(); - assertThat(loggingCallback.toString(), containsString("hello")); - assertEquals(5, StringUtils.countMatches(logs, "hello")); + assertThat(logs, containsString("hello")); + assertTrue(logs.length() > logs_until.length()); } + }