From ee0b7db93537bfaf26983d02ea4fed4a1608e217 Mon Sep 17 00:00:00 2001 From: Yongxing Wang Date: Thu, 10 Sep 2015 17:42:51 -0700 Subject: [PATCH 1/2] This add the support for "since" field for logs command. --- .../dockerjava/api/command/LogContainerCmd.java | 6 ++++++ .../core/command/LogContainerCmdImpl.java | 17 ++++++++++++++++- .../dockerjava/jaxrs/LogContainerCmdExec.java | 1 + 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java b/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java index a97393aa5..b1c22283c 100644 --- a/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java @@ -18,6 +18,8 @@ * - true or false, if true, print timestamps for every log line. Defaults to false. * @param tail * - `all` or ``, Output specified number of lines at the end of logs + * @param since + * - UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries since that timestamp. Default: 0 (unfiltered) */ public interface LogContainerCmd extends AsyncDockerCmd { @@ -33,6 +35,8 @@ public interface LogContainerCmd extends AsyncDockerCmd public boolean hasStderrEnabled(); + public int getSince(); + public LogContainerCmd withContainerId(String containerId); /** @@ -63,6 +67,8 @@ public interface LogContainerCmd extends AsyncDockerCmd public LogContainerCmd withTail(int tail); + public LogContainerCmd withSince(int since); + public static interface Exec extends DockerCmdAsyncExec { } diff --git a/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java index a9d923635..afc6a0754 100644 --- a/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/LogContainerCmdImpl.java @@ -18,6 +18,8 @@ * - true or false, if true, print timestamps for every log line. Defaults to false. * @param tail * - `all` or ``, Output specified number of lines at the end of logs + * @param since + * - UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries since that timestamp. Default: 0 (unfiltered) */ public class LogContainerCmdImpl extends AbstrAsyncDockerCmd implements LogContainerCmd { @@ -27,6 +29,8 @@ public class LogContainerCmdImpl extends AbstrAsyncDockerCmd 0 ? "--since=" + since : "") + .append(containerId).toString(); } } diff --git a/src/main/java/com/github/dockerjava/jaxrs/LogContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/LogContainerCmdExec.java index 0ab3da7a5..b2c1691b6 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/LogContainerCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/LogContainerCmdExec.java @@ -31,6 +31,7 @@ protected AbstractCallbackNotifier callbackNotifier(LogContainerCmd comma .queryParam("stdout", command.hasStdoutEnabled() ? "1" : "0") .queryParam("stderr", command.hasStderrEnabled() ? "1" : "0") .queryParam("follow", command.hasFollowStreamEnabled() ? "1" : "0") + .queryParam("since", command.getSince()) .queryParam("tail", command.getTail() < 0 ? "all" : "" + command.getTail()); LOGGER.trace("GET: {}", webTarget); From 2625bca90566801cb64557755728cf525892c5b8 Mon Sep 17 00:00:00 2001 From: Yongxing Wang Date: Thu, 10 Sep 2015 23:33:29 -0700 Subject: [PATCH 2/2] add a test for the since field --- .../core/command/LogContainerCmdImplTest.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java index 2e2dedb45..16b0266ac 100644 --- a/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/LogContainerCmdImplTest.java @@ -62,6 +62,7 @@ public void asyncLogContainer() throws Exception { LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); + //this essentially test the since=0 case dockerClient.logContainerCmd(container.getId()).withStdErr().withStdOut().exec(loggingCallback); loggingCallback.awaitCompletion(); @@ -69,6 +70,8 @@ public void asyncLogContainer() throws Exception { assertTrue(loggingCallback.toString().contains(snippet)); } + + @Test public void asyncLogNonExistingContainer() throws Exception { @@ -135,4 +138,30 @@ public void asyncMultipleLogContainer() throws Exception { assertTrue(loggingCallback.toString().contains(snippet)); } + @Test + public void asyncLogContainerWithSince() throws Exception { + String snippet = "hello world"; + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("/bin/echo", snippet) + .exec(); + + LOG.info("Created container: {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + int exitCode = dockerClient.waitContainerCmd(container.getId()).exec(); + + assertThat(exitCode, equalTo(0)); + + LogContainerTestCallback loggingCallback = new LogContainerTestCallback(); + + int oneMinuteIntoFuture = (int)(System.currentTimeMillis()/1000) + 60; + dockerClient.logContainerCmd(container.getId()).withStdErr().withStdOut().withSince(oneMinuteIntoFuture).exec(loggingCallback); + + loggingCallback.awaitCompletion(); + + assertFalse(loggingCallback.toString().contains(snippet)); + } + }