diff --git a/src/main/java/com/amihaiemil/docker/DiskSpaceInfo.java b/src/main/java/com/amihaiemil/docker/DiskSpaceInfo.java
new file mode 100644
index 00000000..10ea59f7
--- /dev/null
+++ b/src/main/java/com/amihaiemil/docker/DiskSpaceInfo.java
@@ -0,0 +1,34 @@
+package com.amihaiemil.docker;
+
+/**
+ * Info about Docker disk space usage in bytes.
+ * @author Boris Kuzmic (boris.kuzmic@gmail.com)
+ * @since 0.0.6
+ */
+public interface DiskSpaceInfo {
+
+ /**
+ * Images disk usage.
+ * @return Disk usage for images in bytes
+ */
+ Long images();
+
+ /**
+ * Containers disk usage.
+ * @return Disk usage for containers in bytes
+ */
+ Long containers();
+
+ /**
+ * Volumes disk usage.
+ * @return Disk usage for volumes in bytes
+ */
+ Long volumes();
+
+ /**
+ * Total disk usage.
+ * @return Total disk usage in bytes
+ */
+ Long totalSpace();
+
+}
diff --git a/src/main/java/com/amihaiemil/docker/Docker.java b/src/main/java/com/amihaiemil/docker/Docker.java
index 0f88a6dc..b08bf887 100644
--- a/src/main/java/com/amihaiemil/docker/Docker.java
+++ b/src/main/java/com/amihaiemil/docker/Docker.java
@@ -82,6 +82,12 @@ public interface Docker {
*/
Swarm swarm();
+ /**
+ * Entry point for the DockerSystem API.
+ * @return DockerSystem.
+ */
+ DockerSystem system();
+
/**
* The underlying, immutable, Apache HttpClient.
*
diff --git a/src/main/java/com/amihaiemil/docker/DockerSystem.java b/src/main/java/com/amihaiemil/docker/DockerSystem.java
new file mode 100644
index 00000000..1b8e04b6
--- /dev/null
+++ b/src/main/java/com/amihaiemil/docker/DockerSystem.java
@@ -0,0 +1,23 @@
+package com.amihaiemil.docker;
+
+import java.io.IOException;
+
+/**
+ * Docker System API entry point.
+ * @author Boris Kuzmic (boris.kuzmic@gmail.com)
+ * @see Docker DockerSystem API
+ * @since 0.0.6
+ */
+public interface DockerSystem {
+
+ /**
+ * Show docker disk usage.
+ * @return The created {@link DiskSpaceInfo}.
+ * @throws IOException If an I/O error occurs.
+ * @throws UnexpectedResponseException If the API responds with an
+ * unexpected status.
+ */
+ DiskSpaceInfo diskUsage()
+ throws IOException, UnexpectedResponseException;
+
+}
diff --git a/src/main/java/com/amihaiemil/docker/RtDocker.java b/src/main/java/com/amihaiemil/docker/RtDocker.java
index eeb40d72..0f030ed7 100644
--- a/src/main/java/com/amihaiemil/docker/RtDocker.java
+++ b/src/main/java/com/amihaiemil/docker/RtDocker.java
@@ -120,6 +120,15 @@ public final Swarm swarm() {
);
}
+ @Override
+ public DockerSystem system() {
+ return new RtDockerSystem(
+ this.client,
+ URI.create(this.baseUri.toString().concat("/system")),
+ this
+ );
+ }
+
@Override
public HttpClient httpClient() {
return this.client;
diff --git a/src/main/java/com/amihaiemil/docker/RtDockerSystem.java b/src/main/java/com/amihaiemil/docker/RtDockerSystem.java
new file mode 100644
index 00000000..d0f89959
--- /dev/null
+++ b/src/main/java/com/amihaiemil/docker/RtDockerSystem.java
@@ -0,0 +1,66 @@
+package com.amihaiemil.docker;
+
+import org.apache.http.HttpStatus;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+
+import java.io.IOException;
+import java.net.URI;
+
+/**
+ * System API.
+ *
+ * @author Boris Kuzmic (boris.kuzmic@gmail.com)
+ * @since 0.0.6
+ */
+public final class RtDockerSystem implements DockerSystem {
+
+ /**
+ * Apache HttpClient which sends the requests.
+ */
+ private final HttpClient client;
+
+ /**
+ * Base URI.
+ */
+ private final URI baseUri;
+
+ /**
+ * Docker engine.
+ */
+ private Docker docker;
+
+ /**
+ * Ctor.
+ *
+ * @param client Given HTTP Client.
+ * @param baseUri Base URI, ending with /system.
+ * @param dkr The Docker engine.
+ */
+ RtDockerSystem(final HttpClient client, final URI baseUri,
+ final Docker dkr) {
+ this.client = client;
+ this.baseUri = baseUri;
+ this.docker = dkr;
+ }
+
+ @Override
+ public DiskSpaceInfo diskUsage() throws IOException,
+ UnexpectedResponseException {
+ final HttpGet init = new HttpGet(this.baseUri.toString() + "/df");
+ try {
+ return new SystemDiskSpaceInfo(this.client.execute(
+ init,
+ new ReadJsonObject(
+ new MatchStatus(
+ init.getURI(),
+ HttpStatus.SC_OK
+ )
+ )
+ ));
+ } finally {
+ init.releaseConnection();
+ }
+ }
+
+}
diff --git a/src/main/java/com/amihaiemil/docker/SystemDiskSpaceInfo.java b/src/main/java/com/amihaiemil/docker/SystemDiskSpaceInfo.java
new file mode 100644
index 00000000..8496dcf8
--- /dev/null
+++ b/src/main/java/com/amihaiemil/docker/SystemDiskSpaceInfo.java
@@ -0,0 +1,60 @@
+package com.amihaiemil.docker;
+
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+
+/**
+ * Docker disk space usage information.
+ * @author Boris Kuzmic (boris.kuzmic@gmail.com)
+ * @since 0.0.6
+ */
+public final class SystemDiskSpaceInfo implements DiskSpaceInfo {
+
+ /**
+ * Response Json object from system/df call.
+ */
+ private final JsonObject json;
+
+ /**
+ * Ctor.
+ * @param jsonObject Response Json from system/df call
+ */
+ SystemDiskSpaceInfo(final JsonObject jsonObject) {
+ this.json = jsonObject;
+ }
+
+ @Override
+ public Long images() {
+ return this.json.getJsonNumber("LayersSize").longValue();
+ }
+
+ @Override
+ public Long containers() {
+ Long totalContainersSpace = 0L;
+ JsonArray containers = this.json.getJsonArray("Containers");
+ for (int i=0; i