Skip to content

Commit c285fe5

Browse files
trajanoArchimedes Trajanobsideup
authored
Allow filtering by event type (#1367)
* Allow filtering by event type * Update EventsCmdImpl.java * Update EventsCmd.java * Update EventsCmd.java * Update EventsCmdImpl.java * Update FiltersBuilder.java * default * Implements withEventTypeFilter with string #1367 (review) * fixed imports * Update docker-java-api/src/main/java/com/github/dockerjava/api/command/EventsCmd.java Co-authored-by: Sergei Egorov <bsideup@gmail.com> * Update docker-java-api/src/main/java/com/github/dockerjava/api/command/EventsCmd.java Co-authored-by: Sergei Egorov <bsideup@gmail.com> * Update docker-java-core/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java Co-authored-by: Sergei Egorov <bsideup@gmail.com> * Update docker-java-core/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java Co-authored-by: Sergei Egorov <bsideup@gmail.com> * Added IT * Added IT * Update EventsCmdIT.java Co-authored-by: Archimedes Trajano <archimedes.trajano@devhaus.com> Co-authored-by: Sergei Egorov <bsideup@gmail.com>
1 parent 6044357 commit c285fe5

File tree

4 files changed

+72
-0
lines changed

4 files changed

+72
-0
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import java.util.List;
44
import java.util.Map;
5+
import java.util.stream.Stream;
56

67
import javax.annotation.CheckForNull;
78

89
import com.github.dockerjava.api.model.Event;
10+
import com.github.dockerjava.api.model.EventType;
911

1012
/**
1113
* Get events
@@ -33,6 +35,24 @@ public interface EventsCmd extends AsyncDockerCmd<EventsCmd, Event> {
3335
*/
3436
EventsCmd withEventFilter(String... event);
3537

38+
/**
39+
* @param eventTypes event types to filter
40+
*/
41+
EventsCmd withEventTypeFilter(String... eventTypes);
42+
43+
/**
44+
* This provides a type safe version of {@link #withEventTypeFilter(String...)}.
45+
*
46+
* @param eventTypes event types to filter
47+
*/
48+
default EventsCmd withEventTypeFilter(EventType... eventTypes) {
49+
return withEventTypeFilter(
50+
Stream.of(eventTypes)
51+
.map(EventType::getValue)
52+
.toArray(String[]::new)
53+
);
54+
}
55+
3656
/**
3757
* @param image
3858
* - image to filter

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ public EventsCmd withEventFilter(String... event) {
5757
return this;
5858
}
5959

60+
@Override
61+
public EventsCmd withEventTypeFilter(String... eventTypes) {
62+
checkNotNull(eventTypes, "event types have not been specified");
63+
this.filters.withEventTypes(eventTypes);
64+
return this;
65+
}
66+
6067
@Override
6168
public EventsCmd withLabelFilter(String... label) {
6269
checkNotNull(label, "label have not been specified");

docker-java-core/src/main/java/com/github/dockerjava/core/util/FiltersBuilder.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import java.util.Map;
1111
import java.util.Map.Entry;
1212
import java.util.regex.Pattern;
13+
import java.util.stream.Collectors;
14+
import java.util.stream.Stream;
1315

1416
/**
1517
* Representation of Docker filters.
@@ -64,6 +66,16 @@ public List<String> getContainer() {
6466
return getFilter("container");
6567
}
6668

69+
/**
70+
* Filter by event types
71+
*
72+
* @param eventTypes an array of event types
73+
*/
74+
public FiltersBuilder withEventTypes(String... eventTypes) {
75+
withFilter("type", Stream.of(eventTypes).collect(Collectors.toList()));
76+
return this;
77+
}
78+
6779
/**
6880
* Filter by labels
6981
*

docker-java/src/test/java/com/github/dockerjava/cmd/EventsCmdIT.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
import com.github.dockerjava.api.async.ResultCallback;
44
import com.github.dockerjava.api.command.CreateContainerResponse;
55
import com.github.dockerjava.api.model.Event;
6+
import com.github.dockerjava.api.model.EventType;
67
import com.github.dockerjava.utils.TestUtils;
78
import org.junit.Test;
89
import org.slf4j.Logger;
910
import org.slf4j.LoggerFactory;
1011

1112
import java.util.ArrayList;
1213
import java.util.List;
14+
import java.util.concurrent.CopyOnWriteArrayList;
1315
import java.util.concurrent.CountDownLatch;
1416
import java.util.concurrent.TimeUnit;
1517

@@ -113,6 +115,37 @@ public void testEventStreamingWithFilter() throws Exception {
113115
}
114116
}
115117

118+
@Test
119+
public void testEventStreamingWithEventTypeFilter() throws Exception {
120+
assumeNotSwarm("", dockerRule);
121+
122+
String startTime = getEpochTime();
123+
generateEvents();
124+
String endTime = getEpochTime();
125+
126+
for (EventType eventType : EventType.values()) {
127+
List<Event> events = new CopyOnWriteArrayList<>();
128+
try (
129+
ResultCallback.Adapter<?> eventCallback = dockerRule.getClient().eventsCmd()
130+
.withSince(startTime)
131+
.withUntil(endTime)
132+
.withEventTypeFilter(eventType)
133+
.exec(new ResultCallback.Adapter<Event>() {
134+
@Override
135+
public void onNext(Event event) {
136+
events.add(event);
137+
}
138+
})
139+
) {
140+
eventCallback.awaitCompletion(30, TimeUnit.SECONDS);
141+
142+
for (Event event : events) {
143+
assertThat("Received event: " + event, event.getType(), is(eventType));
144+
}
145+
}
146+
}
147+
}
148+
116149
/**
117150
* This method generates some events and returns the number of events being generated
118151
*/

0 commit comments

Comments
 (0)