Skip to content

Commit b9e9037

Browse files
author
Marcus Linke
committed
Merge branch 'event-filters' of https://github.com/carlossg/docker-java
into carlossg-event-filters Conflicts: src/main/java/com/github/dockerjava/api/command/EventsCmd.java src/main/java/com/github/dockerjava/core/command/EventsCmdImpl.java src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java
2 parents 175c681 + 87e9c19 commit b9e9037

File tree

8 files changed

+97
-2
lines changed

8 files changed

+97
-2
lines changed

src/main/java/com/github/dockerjava/api/command/EventsCmd.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.dockerjava.api.command;
22

33
import com.github.dockerjava.api.model.Event;
4+
import com.github.dockerjava.api.model.Filters;
45

56
/**
67
* Get events
@@ -19,6 +20,11 @@ public interface EventsCmd extends AsyncDockerCmd<EventsCmd, Event> {
1920

2021
public String getUntil();
2122

23+
public Filters getFilters();
24+
25+
public EventsCmd withFilters(Filters filters);
26+
2227
public static interface Exec extends DockerCmdAsyncExec<EventsCmd, Event> {
28+
2329
}
2430
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.github.dockerjava.api.model;
2+
3+
import java.util.List;
4+
5+
/**
6+
* Representation of a Docker event filter.
7+
*
8+
* @author Carlos Sanchez <carlos@apache.org>
9+
*
10+
*/
11+
public class EventFilters extends Filters {
12+
13+
/**
14+
* Default constructor for the deserialization.
15+
*/
16+
public EventFilters() {
17+
}
18+
19+
/**
20+
* Constructor.
21+
*
22+
* @param event
23+
* event to filter
24+
*/
25+
public EventFilters(String... event) {
26+
super();
27+
withEvent(event);
28+
}
29+
30+
public Filters withEvent(String... event) {
31+
return withFilter("event", event);
32+
}
33+
34+
public List<String> getEvent() {
35+
return getFilter("event");
36+
}
37+
}

src/main/java/com/github/dockerjava/core/async/ResultCallbackTemplate.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import java.util.concurrent.CountDownLatch;
99
import java.util.concurrent.TimeUnit;
1010

11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
1114
import com.github.dockerjava.api.async.ResultCallback;
1215

1316
/**
@@ -19,6 +22,8 @@
1922
public abstract class ResultCallbackTemplate<RC_T extends ResultCallback<A_RES_T>, A_RES_T> implements
2023
ResultCallback<A_RES_T> {
2124

25+
private final static Logger LOGGER = LoggerFactory.getLogger(ResultCallbackTemplate.class);
26+
2227
private final CountDownLatch finished = new CountDownLatch(1);
2328

2429
private Closeable stream;
@@ -35,6 +40,7 @@ public void onNext(A_RES_T object) {
3540
@Override
3641
public void onError(Throwable throwable) {
3742
try {
43+
LOGGER.error("Error during callback", throwable);
3844
throw new RuntimeException(throwable);
3945
} finally {
4046
try {

src/main/java/com/github/dockerjava/core/command/EventsCmdImpl.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.github.dockerjava.core.command;
22

3+
import static com.google.common.base.Preconditions.checkNotNull;
4+
35
import com.github.dockerjava.api.command.EventsCmd;
46
import com.github.dockerjava.api.model.Event;
7+
import com.github.dockerjava.api.model.Filters;
58

69
/**
710
* Stream docker events
@@ -12,6 +15,8 @@ public class EventsCmdImpl extends AbstrAsyncDockerCmd<EventsCmd, Event> impleme
1215

1316
private String until;
1417

18+
private Filters filters;
19+
1520
public EventsCmdImpl(EventsCmd.Exec exec) {
1621
super(exec);
1722
}
@@ -28,6 +33,13 @@ public EventsCmd withUntil(String until) {
2833
return this;
2934
}
3035

36+
@Override
37+
public EventsCmd withFilters(Filters filters) {
38+
checkNotNull(filters, "filters have not been specified");
39+
this.filters = filters;
40+
return this;
41+
}
42+
3143
@Override
3244
public String getSince() {
3345
return since;
@@ -38,9 +50,15 @@ public String getUntil() {
3850
return until;
3951
}
4052

53+
@Override
54+
public Filters getFilters() {
55+
return filters;
56+
}
57+
4158
@Override
4259
public String toString() {
4360
return new StringBuilder("events").append(since != null ? " --since=" + since : "")
44-
.append(until != null ? " --until=" + until : "").toString();
61+
.append(until != null ? " --until=" + until : "")
62+
.append(filters != null ? " --filters=" + filters : "").toString();
4563
}
4664
}

src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.github.dockerjava.jaxrs;
22

3+
import static com.google.common.net.UrlEscapers.*;
4+
35
import javax.ws.rs.client.WebTarget;
46

57
import org.slf4j.Logger;
@@ -25,6 +27,11 @@ protected AbstractCallbackNotifier<Event> callbackNotifier(EventsCmd command, Re
2527
WebTarget webTarget = getBaseResource().path("/events").queryParam("since", command.getSince())
2628
.queryParam("until", command.getUntil());
2729

30+
if (command.getFilters() != null) {
31+
webTarget = webTarget
32+
.queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString()));
33+
}
34+
2835
LOGGER.trace("GET: {}", webTarget);
2936

3037
return new GETCallbackNotifier<Event>(new JsonStreamProcessor<Event>(Event.class), resultCallback,

src/main/java/com/github/dockerjava/jaxrs/async/AbstractCallbackNotifier.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ public Void call() throws Exception {
4848
resultCallback.onError(e.getCause());
4949
}
5050
return null;
51+
} catch (Exception e) {
52+
if (resultCallback != null) {
53+
resultCallback.onError(e);
54+
}
55+
return null;
5156
}
5257

5358
try {

src/test/java/com/github/dockerjava/core/command/EventsCmdImplTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import com.github.dockerjava.api.command.CreateContainerResponse;
1717
import com.github.dockerjava.api.model.Event;
18+
import com.github.dockerjava.api.model.EventFilters;
1819
import com.github.dockerjava.client.AbstractDockerClientTest;
1920
import com.github.dockerjava.core.async.ResultCallbackTemplate;
2021

@@ -107,6 +108,22 @@ public void testEventStreaming2() throws Exception {
107108
assertTrue(zeroCount, "Received only: " + eventCallback.getEvents());
108109
}
109110

111+
public void testEventStreamingWithFilter() throws Exception {
112+
// Don't include other tests events
113+
TimeUnit.SECONDS.sleep(1);
114+
115+
CountDownLatch countDownLatch = new CountDownLatch(1);
116+
EventCallbackTest eventCallback = dockerClient.eventsCmd().withFilters(new EventFilters().withEvent("start"))
117+
.exec(new EventCallbackTest(countDownLatch));
118+
119+
generateEvents();
120+
121+
boolean zeroCount = countDownLatch.await(10, TimeUnit.SECONDS);
122+
123+
eventCallback.close();
124+
assertTrue(zeroCount, "Received only: " + eventCallback.getEvents());
125+
}
126+
110127
/**
111128
* This method generates {#link KNOWN_NUM_EVENTS} events
112129
*/

src/test/java/com/github/dockerjava/test/serdes/JSONResourceRef.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.github.dockerjava.test.serdes;
1717

18-
1918
/**
2019
* References JSON resources, which
2120
*

0 commit comments

Comments
 (0)