X Tutup
Skip to content

Commit 267f237

Browse files
committed
Merge pull request #57 from almonteb/events
Add streaming events API
2 parents 746a2b8 + 4105b78 commit 267f237

File tree

13 files changed

+409
-3
lines changed

13 files changed

+409
-3
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
<slf4j-api.version>1.7.5</slf4j-api.version>
6464
<jsr305.version>1.3.9</jsr305.version>
6565
<jnr.unixsocket.version>0.3</jnr.unixsocket.version>
66-
<guava.version>11.0.1</guava.version>
66+
<guava.version>18.0</guava.version>
6767

6868
<!--test dependencies -->
6969
<version.logback>1.0.1</version.logback>

src/main/java/com/github/dockerjava/api/DockerClient.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import com.github.dockerjava.api.command.CopyFileFromContainerCmd;
1111
import com.github.dockerjava.api.command.CreateContainerCmd;
1212
import com.github.dockerjava.api.command.CreateImageCmd;
13+
import com.github.dockerjava.api.command.EventCallback;
14+
import com.github.dockerjava.api.command.EventsCmd;
1315
import com.github.dockerjava.api.command.InfoCmd;
1416
import com.github.dockerjava.api.command.InspectContainerCmd;
1517
import com.github.dockerjava.api.command.InspectImageCmd;
@@ -114,6 +116,8 @@ public CopyFileFromContainerCmd copyFileFromContainerCmd(
114116

115117
public UnpauseContainerCmd unpauseContainerCmd(String containerId);
116118

119+
public EventsCmd eventsCmd(EventCallback eventCallback);
120+
117121
public void close() throws IOException;
118122

119123
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ public interface DockerCmdExecFactory extends Closeable {
6969

7070
public UnpauseContainerCmd.Exec createUnpauseContainerCmdExec();
7171

72+
public EventsCmd.Exec createEventsCmdExec();
73+
7274
public void close() throws IOException;
7375

7476
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.github.dockerjava.api.command;
2+
3+
import com.github.dockerjava.api.model.Event;
4+
5+
/**
6+
* Event callback
7+
*/
8+
public interface EventCallback {
9+
public void onEvent(Event event);
10+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.github.dockerjava.api.command;
2+
3+
import java.util.concurrent.ExecutorService;
4+
5+
6+
/**
7+
* Get events
8+
*
9+
* @param since - Show all events created since timestamp
10+
* @param until - Stream events until this timestamp
11+
*/
12+
public interface EventsCmd extends DockerCmd<ExecutorService> {
13+
public EventsCmd withSince(String since);
14+
15+
public EventsCmd withUntil(String until);
16+
17+
public String getSince();
18+
19+
public String getUntil();
20+
21+
public EventCallback getEventCallback();
22+
23+
public EventsCmd withEventCallback(EventCallback eventCallback);
24+
25+
public static interface Exec extends DockerCmdExec<EventsCmd, ExecutorService> {
26+
}
27+
}
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 org.apache.commons.lang.builder.ToStringBuilder;
4+
5+
/**
6+
* Representation of a Docker event.
7+
*/
8+
public class Event {
9+
private String status;
10+
11+
private String id;
12+
13+
private String from;
14+
15+
private long time;
16+
17+
public String getStatus() {
18+
return status;
19+
}
20+
21+
public String getId() {
22+
return id;
23+
}
24+
25+
public String getFrom() {
26+
return from;
27+
}
28+
29+
public long getTime() {
30+
return time;
31+
}
32+
33+
@Override
34+
public String toString() {
35+
return ToStringBuilder.reflectionToString(this);
36+
}
37+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.github.dockerjava.api.model;
2+
3+
import com.fasterxml.jackson.core.JsonFactory;
4+
import com.fasterxml.jackson.core.JsonParser;
5+
import com.fasterxml.jackson.core.JsonToken;
6+
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import com.github.dockerjava.api.command.EventCallback;
8+
import com.google.common.base.Preconditions;
9+
10+
import javax.ws.rs.client.WebTarget;
11+
import javax.ws.rs.core.Response;
12+
import java.io.InputStream;
13+
import java.util.concurrent.Callable;
14+
15+
/**
16+
* EventNotifier API
17+
*/
18+
public class EventNotifier implements Callable<Void> {
19+
private static final JsonFactory JSON_FACTORY = new JsonFactory();
20+
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
21+
22+
private final EventCallback eventCallback;
23+
private final WebTarget webTarget;
24+
25+
private EventNotifier(EventCallback eventCallback, WebTarget webTarget) {
26+
this.eventCallback = eventCallback;
27+
this.webTarget = webTarget;
28+
}
29+
30+
public static EventNotifier create(EventCallback eventCallback, WebTarget webTarget) {
31+
Preconditions.checkNotNull(eventCallback, "An EventCallback must be provided");
32+
Preconditions.checkNotNull(webTarget, "An WebTarget must be provided");
33+
return new EventNotifier(eventCallback, webTarget);
34+
}
35+
36+
@Override
37+
public Void call() throws Exception {
38+
Response response = webTarget.request().get(Response.class);
39+
InputStream inputStream = response.readEntity(InputStream.class);
40+
try {
41+
JsonParser jp = JSON_FACTORY.createParser(inputStream);
42+
while (jp.nextToken() != JsonToken.END_OBJECT && !jp.isClosed()) {
43+
eventCallback.onEvent(OBJECT_MAPPER.readValue(jp, Event.class));
44+
}
45+
} finally {
46+
if (response != null) {
47+
response.close();
48+
}
49+
}
50+
return null;
51+
}
52+
}

src/main/java/com/github/dockerjava/api/model/Info.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import com.fasterxml.jackson.annotation.JsonProperty;
1111
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
1212

13-
/**Ø
13+
/**
1414
*
1515
* @author Konstantin Pelykh (kpelykh@gmail.com)
1616
*

src/main/java/com/github/dockerjava/core/DockerClientImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,11 @@ public UnpauseContainerCmd unpauseContainerCmd(String containerId) {
252252
return new UnpauseContainerCmdImpl(getDockerCmdExecFactory().createUnpauseContainerCmdExec(), containerId);
253253
}
254254

255+
@Override
256+
public EventsCmd eventsCmd(EventCallback eventCallback) {
257+
return new EventsCmdImpl(getDockerCmdExecFactory().createEventsCmdExec(), eventCallback);
258+
}
259+
255260
@Override
256261
public void close() throws IOException {
257262
getDockerCmdExecFactory().close();
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.github.dockerjava.core.command;
2+
3+
import java.util.concurrent.ExecutorService;
4+
5+
import com.github.dockerjava.api.command.EventCallback;
6+
import com.github.dockerjava.api.command.EventsCmd;
7+
8+
/**
9+
* Stream docker events
10+
*/
11+
public class EventsCmdImpl extends AbstrDockerCmd<EventsCmd, ExecutorService> implements EventsCmd {
12+
13+
private String since;
14+
private String until;
15+
private EventCallback eventCallback;
16+
17+
public EventsCmdImpl(EventsCmd.Exec exec, EventCallback eventCallback) {
18+
super(exec);
19+
withEventCallback(eventCallback);
20+
}
21+
22+
@Override
23+
public EventsCmd withSince(String since) {
24+
this.since = since;
25+
return this;
26+
}
27+
28+
@Override
29+
public EventsCmd withUntil(String until) {
30+
this.until = until;
31+
return this;
32+
}
33+
34+
@Override
35+
public EventsCmd withEventCallback(EventCallback eventCallback) {
36+
this.eventCallback = eventCallback;
37+
return this;
38+
}
39+
40+
@Override
41+
public String getSince() {
42+
return since;
43+
}
44+
45+
@Override
46+
public String getUntil() {
47+
return until;
48+
}
49+
50+
@Override
51+
public EventCallback getEventCallback() {
52+
return eventCallback;
53+
}
54+
55+
@Override
56+
public ExecutorService exec() {
57+
return super.exec();
58+
}
59+
60+
@Override
61+
public String toString() {
62+
return new StringBuilder("events")
63+
.append(since != null ? " --since=" + since : "")
64+
.append(until != null ? " --until=" + until : "")
65+
.toString();
66+
}
67+
}

0 commit comments

Comments
 (0)
X Tutup