Skip to content

Commit

Permalink
Allow filtering by event type (#1367)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
3 people committed Jun 4, 2020
1 parent 6044357 commit c285fe5
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import java.util.List;
import java.util.Map;
import java.util.stream.Stream;

import javax.annotation.CheckForNull;

import com.github.dockerjava.api.model.Event;
import com.github.dockerjava.api.model.EventType;

/**
* Get events
Expand Down Expand Up @@ -33,6 +35,24 @@ public interface EventsCmd extends AsyncDockerCmd<EventsCmd, Event> {
*/
EventsCmd withEventFilter(String... event);

/**
* @param eventTypes event types to filter
*/
EventsCmd withEventTypeFilter(String... eventTypes);

/**
* This provides a type safe version of {@link #withEventTypeFilter(String...)}.
*
* @param eventTypes event types to filter
*/
default EventsCmd withEventTypeFilter(EventType... eventTypes) {
return withEventTypeFilter(
Stream.of(eventTypes)
.map(EventType::getValue)
.toArray(String[]::new)
);
}

/**
* @param image
* - image to filter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ public EventsCmd withEventFilter(String... event) {
return this;
}

@Override
public EventsCmd withEventTypeFilter(String... eventTypes) {
checkNotNull(eventTypes, "event types have not been specified");
this.filters.withEventTypes(eventTypes);
return this;
}

@Override
public EventsCmd withLabelFilter(String... label) {
checkNotNull(label, "label have not been specified");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
* Representation of Docker filters.
Expand Down Expand Up @@ -64,6 +66,16 @@ public List<String> getContainer() {
return getFilter("container");
}

/**
* Filter by event types
*
* @param eventTypes an array of event types
*/
public FiltersBuilder withEventTypes(String... eventTypes) {
withFilter("type", Stream.of(eventTypes).collect(Collectors.toList()));
return this;
}

/**
* Filter by labels
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
import com.github.dockerjava.api.async.ResultCallback;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.model.Event;
import com.github.dockerjava.api.model.EventType;
import com.github.dockerjava.utils.TestUtils;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

Expand Down Expand Up @@ -113,6 +115,37 @@ public void testEventStreamingWithFilter() throws Exception {
}
}

@Test
public void testEventStreamingWithEventTypeFilter() throws Exception {
assumeNotSwarm("", dockerRule);

String startTime = getEpochTime();
generateEvents();
String endTime = getEpochTime();

for (EventType eventType : EventType.values()) {
List<Event> events = new CopyOnWriteArrayList<>();
try (
ResultCallback.Adapter<?> eventCallback = dockerRule.getClient().eventsCmd()
.withSince(startTime)
.withUntil(endTime)
.withEventTypeFilter(eventType)
.exec(new ResultCallback.Adapter<Event>() {
@Override
public void onNext(Event event) {
events.add(event);
}
})
) {
eventCallback.awaitCompletion(30, TimeUnit.SECONDS);

for (Event event : events) {
assertThat("Received event: " + event, event.getType(), is(eventType));
}
}
}
}

/**
* This method generates some events and returns the number of events being generated
*/
Expand Down

0 comments on commit c285fe5

Please sign in to comment.