From 445e1d77b0d7a949a19f56906f9ac6e5df385793 Mon Sep 17 00:00:00 2001 From: Carlos Sanchez Date: Mon, 6 Jul 2015 20:11:05 +0200 Subject: [PATCH] Add filters option to events operation --- .../dockerjava/api/command/EventsCmd.java | 4 ++++ .../core/command/EventsCmdImpl.java | 19 ++++++++++++++++++- .../dockerjava/jaxrs/EventsCmdExec.java | 4 ++++ .../core/command/EventsCmdImplTest.java | 19 +++++++++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/dockerjava/api/command/EventsCmd.java b/src/main/java/com/github/dockerjava/api/command/EventsCmd.java index 5a7c2e275..ccf9525a9 100644 --- a/src/main/java/com/github/dockerjava/api/command/EventsCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/EventsCmd.java @@ -23,6 +23,10 @@ public interface EventsCmd extends DockerCmd { public EventsCmd withEventCallback(EventCallback eventCallback); + public String getFilters(); + + public EventsCmd withFilters(String filters); + public static interface Exec extends DockerCmdExec { } } diff --git a/src/main/java/com/github/dockerjava/core/command/EventsCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/EventsCmdImpl.java index 3faa525d1..91e0ccf32 100644 --- a/src/main/java/com/github/dockerjava/core/command/EventsCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/EventsCmdImpl.java @@ -1,5 +1,7 @@ package com.github.dockerjava.core.command; +import static com.google.common.base.Preconditions.*; + import java.util.concurrent.ExecutorService; import com.github.dockerjava.api.command.EventCallback; @@ -16,6 +18,8 @@ public class EventsCmdImpl extends AbstrDockerCmd im private EventCallback eventCallback; + private String filters; + public EventsCmdImpl(EventsCmd.Exec exec, EventCallback eventCallback) { super(exec); withEventCallback(eventCallback); @@ -39,6 +43,13 @@ public EventsCmd withEventCallback(EventCallback eventCallback) { return this; } + @Override + public EventsCmd withFilters(String filters) { + checkNotNull(filters, "filters have not been specified"); + this.filters = filters; + return this; + } + @Override public String getSince() { return since; @@ -54,6 +65,11 @@ public EventCallback getEventCallback() { return eventCallback; } + @Override + public String getFilters() { + return filters; + } + @Override public ExecutorService exec() { return super.exec(); @@ -62,6 +78,7 @@ public ExecutorService exec() { @Override public String toString() { return new StringBuilder("events").append(since != null ? " --since=" + since : "") - .append(until != null ? " --until=" + until : "").toString(); + .append(until != null ? " --until=" + until : "") + .append(filters != null ? " --filters=" + filters : "").toString(); } } diff --git a/src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java index 1a60a5ae3..a94ab59ca 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java @@ -1,6 +1,7 @@ package com.github.dockerjava.jaxrs; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.net.UrlEscapers.*; import java.io.InputStream; import java.util.concurrent.Callable; @@ -36,6 +37,9 @@ protected ExecutorService execute(EventsCmd command) { WebTarget webResource = getBaseResource().path("/events").queryParam("since", command.getSince()) .queryParam("until", command.getUntil()); + if (command.getFilters() != null) + webResource = webResource.queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters())); + LOGGER.trace("GET: {}", webResource); EventNotifier eventNotifier = EventNotifier.create(command.getEventCallback(), webResource); executorService.submit(eventNotifier); diff --git a/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java index e19d4f1fc..9e32697fd 100644 --- a/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java @@ -94,6 +94,25 @@ public void testEventStreaming1() throws InterruptedException, IOException { assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); } + @Test + public void testEventStreamingWithFilter() throws InterruptedException, IOException { + // Don't include other tests events + TimeUnit.SECONDS.sleep(1); + + CountDownLatch countDownLatch = new CountDownLatch(1); + EventCallbackTest eventCallback = new EventCallbackTest(countDownLatch); + + EventsCmd eventsCmd = dockerClient.eventsCmd(eventCallback).withFilters("{\"event\":[\"start\"]}"); + ExecutorService executorService = eventsCmd.exec(); + + generateEvents(); + + boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS); + executorService.shutdown(); + eventCallback.close(); + assertTrue(zeroCount, "Received only: " + eventCallback.getEvents()); + } + @Test(groups = "ignoreInCircleCi") public void testEventStreaming2() throws InterruptedException, IOException { // Don't include other tests events