From e9efd81394f720f6a533e5e461e8e8794fbac0f6 Mon Sep 17 00:00:00 2001
From: dorman <37854724+dormanze@users.noreply.github.com>
Date: Fri, 18 Aug 2023 04:47:23 +0800
Subject: [PATCH] AdminClient: add getServerInfo API (#1468)
---
.../java/io/minio/admin/MinioAdminClient.java | 18 +-
.../io/minio/admin/messages/info/Backend.java | 83 +++++++
.../io/minio/admin/messages/info/Buckets.java | 44 ++++
.../io/minio/admin/messages/info/Disk.java | 206 ++++++++++++++++++
.../admin/messages/info/DiskMetrics.java | 44 ++++
.../admin/messages/info/ErasureSetInfo.java | 80 +++++++
.../io/minio/admin/messages/info/GCStats.java | 67 ++++++
.../admin/messages/info/HealingDisk.java | 181 +++++++++++++++
.../minio/admin/messages/info/MemStats.java | 65 ++++++
.../io/minio/admin/messages/info/Message.java | 97 +++++++++
.../io/minio/admin/messages/info/Objects.java | 44 ++++
.../admin/messages/info/ServerProperties.java | 139 ++++++++++++
.../admin/messages/info/TimedAction.java | 51 +++++
.../io/minio/admin/messages/info/Usage.java | 44 ++++
.../minio/admin/messages/info/Versions.java | 44 ++++
15 files changed, 1206 insertions(+), 1 deletion(-)
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/Backend.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/Buckets.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/Disk.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/DiskMetrics.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/ErasureSetInfo.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/GCStats.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/HealingDisk.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/MemStats.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/Message.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/Objects.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/ServerProperties.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/TimedAction.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/Usage.java
create mode 100644 adminapi/src/main/java/io/minio/admin/messages/info/Versions.java
diff --git a/adminapi/src/main/java/io/minio/admin/MinioAdminClient.java b/adminapi/src/main/java/io/minio/admin/MinioAdminClient.java
index a2ab37789..c48b2b2f9 100644
--- a/adminapi/src/main/java/io/minio/admin/MinioAdminClient.java
+++ b/adminapi/src/main/java/io/minio/admin/MinioAdminClient.java
@@ -31,6 +31,7 @@
import io.minio.Signer;
import io.minio.Time;
import io.minio.admin.messages.DataUsageInfo;
+import io.minio.admin.messages.info.Message;
import io.minio.credentials.Credentials;
import io.minio.credentials.Provider;
import io.minio.credentials.StaticProvider;
@@ -79,7 +80,8 @@ private enum Command {
DATA_USAGE_INFO("datausageinfo"),
ADD_UPDATE_REMOVE_GROUP("update-group-members"),
GROUP_INFO("group"),
- LIST_GROUPS("groups");
+ LIST_GROUPS("groups"),
+ INFO("info");
private final String value;
private Command(String value) {
@@ -597,6 +599,20 @@ public DataUsageInfo getDataUsageInfo()
}
}
+ /**
+ * Obtains admin info for the Minio server.
+ *
+ * @return admin info for the Minio server.
+ * @throws NoSuchAlgorithmException thrown to indicate missing of MD5 or SHA-256 digest library.
+ * @throws InvalidKeyException thrown to indicate missing of HMAC SHA-256 library.
+ * @throws IOException thrown to indicate I/O error on MinIO REST operation.
+ */
+ public Message getServerInfo() throws IOException, NoSuchAlgorithmException, InvalidKeyException {
+ try (Response response = execute(Method.GET, Command.INFO, null, null)) {
+ return OBJECT_MAPPER.readValue(response.body().charStream(), Message.class);
+ }
+ }
+
/**
* Sets HTTP connect, write and read timeouts. A value of 0 means no timeout, otherwise values
* must be between 1 and Integer.MAX_VALUE when converted to milliseconds.
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/Backend.java b/adminapi/src/main/java/io/minio/admin/messages/info/Backend.java
new file mode 100644
index 000000000..ae9f08319
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/Backend.java
@@ -0,0 +1,83 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * ErasureBackend contains specific erasure storage information
+ *
+ * @see info-commands.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Backend {
+ @JsonProperty("backendType")
+ private String backendType;
+
+ @JsonProperty("onlineDisks")
+ private Integer onlineDisks;
+
+ @JsonProperty("offlineDisks")
+ private Integer offlineDisks;
+
+ @JsonProperty("standardSCParity")
+ private Integer standardSCParity;
+
+ @JsonProperty("rrSCParity")
+ private Integer rrSCParity;
+
+ @JsonProperty("totalSets")
+ private List totalSets;
+
+ @JsonProperty("totalDrivesPerSet")
+ private List totalDrivesPerSet;
+
+ public String backendType() {
+ return backendType;
+ }
+
+ public Integer onlineDisks() {
+ return onlineDisks;
+ }
+
+ public Integer offlineDisks() {
+ return offlineDisks;
+ }
+
+ public Integer standardSCParity() {
+ return standardSCParity;
+ }
+
+ public Integer rrSCParity() {
+ return rrSCParity;
+ }
+
+ public List totalSets() {
+ return Collections.unmodifiableList(totalSets == null ? new LinkedList<>() : totalSets);
+ }
+
+ public List totalDrivesPerSet() {
+ return Collections.unmodifiableList(
+ totalDrivesPerSet == null ? new LinkedList<>() : totalDrivesPerSet);
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/Buckets.java b/adminapi/src/main/java/io/minio/admin/messages/info/Buckets.java
new file mode 100644
index 000000000..54b16037c
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/Buckets.java
@@ -0,0 +1,44 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Buckets contains the number of buckets
+ *
+ * @see info-commands.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Buckets {
+ @JsonProperty("count")
+ private Integer count;
+
+ @JsonProperty("error")
+ private String error;
+
+ public Integer count() {
+ return count;
+ }
+
+ public String error() {
+ return error;
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/Disk.java b/adminapi/src/main/java/io/minio/admin/messages/info/Disk.java
new file mode 100644
index 000000000..d6f2c39ed
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/Disk.java
@@ -0,0 +1,206 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.math.BigDecimal;
+
+/**
+ * Disk holds Disk information
+ *
+ * @see info-commands.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Disk {
+ @JsonProperty("endpoint")
+ private String endpoint;
+
+ @JsonProperty("rootDisk")
+ private boolean rootDisk;
+
+ @JsonProperty("path")
+ private String path;
+
+ @JsonProperty("healing")
+ private boolean healing;
+
+ @JsonProperty("scanning")
+ private boolean scanning;
+
+ @JsonProperty("state")
+ private String state;
+
+ @JsonProperty("uuid")
+ private String uuid;
+
+ @JsonProperty("major")
+ private BigDecimal major;
+
+ @JsonProperty("minor")
+ private BigDecimal minor;
+
+ @JsonProperty("model")
+ private String model;
+
+ @JsonProperty("totalspace")
+ private BigDecimal totalspace;
+
+ @JsonProperty("usedspace")
+ private BigDecimal usedspace;
+
+ @JsonProperty("availspace")
+ private BigDecimal availspace;
+
+ @JsonProperty("readthroughput")
+ private BigDecimal readthroughput;
+
+ @JsonProperty("writethroughput")
+ private BigDecimal writethroughput;
+
+ @JsonProperty("readlatency")
+ private BigDecimal readlatency;
+
+ @JsonProperty("writelatency")
+ private BigDecimal writelatency;
+
+ @JsonProperty("utilization")
+ private BigDecimal utilization;
+
+ @JsonProperty("metrics")
+ private DiskMetrics metrics;
+
+ @JsonProperty("heal_info")
+ private HealingDisk healInfo;
+
+ @JsonProperty("used_inodes")
+ private BigDecimal usedInodes;
+
+ @JsonProperty("free_inodes")
+ private BigDecimal freeInodes;
+
+ @JsonProperty("pool_index")
+ private Integer poolIndex;
+
+ @JsonProperty("set_index")
+ private Integer setIndex;
+
+ @JsonProperty("disk_index")
+ private Integer diskIndex;
+
+ public String endpoint() {
+ return endpoint;
+ }
+
+ public boolean isRootDisk() {
+ return rootDisk;
+ }
+
+ public String path() {
+ return path;
+ }
+
+ public boolean isHealing() {
+ return healing;
+ }
+
+ public boolean isScanning() {
+ return scanning;
+ }
+
+ public String state() {
+ return state;
+ }
+
+ public String uuid() {
+ return uuid;
+ }
+
+ public BigDecimal major() {
+ return major;
+ }
+
+ public BigDecimal minor() {
+ return minor;
+ }
+
+ public String model() {
+ return model;
+ }
+
+ public BigDecimal totalspace() {
+ return totalspace;
+ }
+
+ public BigDecimal usedspace() {
+ return usedspace;
+ }
+
+ public BigDecimal availspace() {
+ return availspace;
+ }
+
+ public BigDecimal readthroughput() {
+ return readthroughput;
+ }
+
+ public BigDecimal writethroughput() {
+ return writethroughput;
+ }
+
+ public BigDecimal readlatency() {
+ return readlatency;
+ }
+
+ public BigDecimal writelatency() {
+ return writelatency;
+ }
+
+ public BigDecimal utilization() {
+ return utilization;
+ }
+
+ public DiskMetrics metrics() {
+ return metrics;
+ }
+
+ public HealingDisk healInfo() {
+ return healInfo;
+ }
+
+ public BigDecimal usedInodes() {
+ return usedInodes;
+ }
+
+ public BigDecimal freeInodes() {
+ return freeInodes;
+ }
+
+ public Integer poolIndex() {
+ return poolIndex;
+ }
+
+ public Integer setIndex() {
+ return setIndex;
+ }
+
+ public Integer diskIndex() {
+ return diskIndex;
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/DiskMetrics.java b/adminapi/src/main/java/io/minio/admin/messages/info/DiskMetrics.java
new file mode 100644
index 000000000..bdcd2de75
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/DiskMetrics.java
@@ -0,0 +1,44 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * DiskMetrics has the information about XL Storage APIs
+ *
+ * @see info-commands.go
+ */
+public class DiskMetrics {
+ @JsonProperty("lastMinute")
+ private Map lastMinute;
+
+ @JsonProperty("apiCalls")
+ private Map apiCalls;
+
+ public Map lastMinute() {
+ return Collections.unmodifiableMap(lastMinute);
+ }
+
+ public Map apiCalls() {
+ return Collections.unmodifiableMap(apiCalls);
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/ErasureSetInfo.java b/adminapi/src/main/java/io/minio/admin/messages/info/ErasureSetInfo.java
new file mode 100644
index 000000000..5b8102eec
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/ErasureSetInfo.java
@@ -0,0 +1,80 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.math.BigDecimal;
+
+/**
+ * ErasureSetInfo provides information per erasure set
+ *
+ * @see info-commands.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ErasureSetInfo {
+ @JsonProperty("id")
+ private Integer id;
+
+ @JsonProperty("rawUsage")
+ private BigDecimal rawUsage;
+
+ @JsonProperty("rawCapacity")
+ private BigDecimal rawCapacity;
+
+ @JsonProperty("usage")
+ private BigDecimal usage;
+
+ @JsonProperty("objectsCount")
+ private BigDecimal objectsCount;
+
+ @JsonProperty("versionsCount")
+ private BigDecimal versionsCount;
+
+ @JsonProperty("healDisks")
+ private Integer healDisks;
+
+ public Integer id() {
+ return id;
+ }
+
+ public BigDecimal rawUsage() {
+ return rawUsage;
+ }
+
+ public BigDecimal rawCapacity() {
+ return rawCapacity;
+ }
+
+ public BigDecimal usage() {
+ return usage;
+ }
+
+ public BigDecimal objectsCount() {
+ return objectsCount;
+ }
+
+ public BigDecimal versionsCount() {
+ return versionsCount;
+ }
+
+ public Integer healDisks() {
+ return healDisks;
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/GCStats.java b/adminapi/src/main/java/io/minio/admin/messages/info/GCStats.java
new file mode 100644
index 000000000..d2d9d9cd8
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/GCStats.java
@@ -0,0 +1,67 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * GCStats collect information about recent garbage collections.
+ *
+ * @see health.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class GCStats {
+ @JsonProperty("last_gc")
+ private String lastGC;
+
+ @JsonProperty("num_gc")
+ private Integer numGC;
+
+ @JsonProperty("pause_total")
+ private Integer pauseTotal;
+
+ @JsonProperty("pause")
+ private List pause;
+
+ @JsonProperty("pause_end")
+ private List pauseEnd;
+
+ public String lastGC() {
+ return lastGC;
+ }
+
+ public Integer numGC() {
+ return numGC;
+ }
+
+ public Integer pauseTotal() {
+ return pauseTotal;
+ }
+
+ public List pause() {
+ return Collections.unmodifiableList(pause == null ? new LinkedList<>() : pause);
+ }
+
+ public List pauseEnd() {
+ return Collections.unmodifiableList(pauseEnd == null ? new LinkedList<>() : pauseEnd);
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/HealingDisk.java b/adminapi/src/main/java/io/minio/admin/messages/info/HealingDisk.java
new file mode 100644
index 000000000..e87eb42a7
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/HealingDisk.java
@@ -0,0 +1,181 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * HealingDisk contains information about
+ *
+ * @see heal-commands.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class HealingDisk {
+ @JsonProperty("id")
+ private String id;
+
+ @JsonProperty("heal_id")
+ private String healID;
+
+ @JsonProperty("pool_index")
+ private Integer poolIndex;
+
+ @JsonProperty("set_index")
+ private Integer setIndex;
+
+ @JsonProperty("disk_index")
+ private Integer diskIndex;
+
+ @JsonProperty("endpoint")
+ private String endpoint;
+
+ @JsonProperty("path")
+ private String path;
+
+ @JsonProperty("started")
+ private String started;
+
+ @JsonProperty("last_update")
+ private String lastUpdate;
+
+ @JsonProperty("objects_total_count")
+ private BigDecimal objectsTotalCount;
+
+ @JsonProperty("objects_total_size")
+ private BigDecimal objectsTotalSize;
+
+ @JsonProperty("items_healed")
+ private BigDecimal itemsHealed;
+
+ @JsonProperty("items_failed")
+ private BigDecimal itemsFailed;
+
+ @JsonProperty("bytes_done")
+ private BigDecimal bytesDone;
+
+ @JsonProperty("bytes_failed")
+ private BigDecimal bytesFailed;
+
+ @JsonProperty("objects_healed")
+ private BigDecimal objectsHealed;
+
+ @JsonProperty("objects_failed")
+ private BigDecimal objectsFailed;
+
+ @JsonProperty("current_bucket")
+ private String bucket;
+
+ @JsonProperty("current_object")
+ private String object;
+
+ @JsonProperty("queued_buckets")
+ private List queuedBuckets;
+
+ @JsonProperty("healed_buckets")
+ private List healedBuckets;
+
+ public String id() {
+ return id;
+ }
+
+ public String healID() {
+ return healID;
+ }
+
+ public Integer poolIndex() {
+ return poolIndex;
+ }
+
+ public Integer setIndex() {
+ return setIndex;
+ }
+
+ public Integer diskIndex() {
+ return diskIndex;
+ }
+
+ public String endpoint() {
+ return endpoint;
+ }
+
+ public String path() {
+ return path;
+ }
+
+ public String started() {
+ return started;
+ }
+
+ public String lastUpdate() {
+ return lastUpdate;
+ }
+
+ public BigDecimal objectsTotalCount() {
+ return objectsTotalCount;
+ }
+
+ public BigDecimal objectsTotalSize() {
+ return objectsTotalSize;
+ }
+
+ public BigDecimal itemsHealed() {
+ return itemsHealed;
+ }
+
+ public BigDecimal itemsFailed() {
+ return itemsFailed;
+ }
+
+ public BigDecimal bytesDone() {
+ return bytesDone;
+ }
+
+ public BigDecimal bytesFailed() {
+ return bytesFailed;
+ }
+
+ public BigDecimal objectsHealed() {
+ return objectsHealed;
+ }
+
+ public BigDecimal objectsFailed() {
+ return objectsFailed;
+ }
+
+ public String bucket() {
+ return bucket;
+ }
+
+ public String object() {
+ return object;
+ }
+
+ public List queuedBuckets() {
+ return Collections.unmodifiableList(queuedBuckets == null ? new LinkedList<>() : queuedBuckets);
+ }
+
+ public List healedBuckets() {
+ return Collections.unmodifiableList(healedBuckets == null ? new LinkedList<>() : healedBuckets);
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/MemStats.java b/adminapi/src/main/java/io/minio/admin/messages/info/MemStats.java
new file mode 100644
index 000000000..1f692e9d1
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/MemStats.java
@@ -0,0 +1,65 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.math.BigDecimal;
+
+/**
+ * MemStats is strip down version of runtime.MemStats containing memory stats of MinIO server.
+ *
+ * @see health.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class MemStats {
+ @JsonProperty("Alloc")
+ private BigDecimal alloc;
+
+ @JsonProperty("TotalAlloc")
+ private BigDecimal totalAlloc;
+
+ @JsonProperty("Mallocs")
+ private BigDecimal mallocs;
+
+ @JsonProperty("Frees")
+ private BigDecimal frees;
+
+ @JsonProperty("HeapAlloc")
+ private BigDecimal heapAlloc;
+
+ public BigDecimal alloc() {
+ return alloc;
+ }
+
+ public BigDecimal totalAlloc() {
+ return totalAlloc;
+ }
+
+ public BigDecimal mallocs() {
+ return mallocs;
+ }
+
+ public BigDecimal frees() {
+ return frees;
+ }
+
+ public BigDecimal heapAlloc() {
+ return heapAlloc;
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/Message.java b/adminapi/src/main/java/io/minio/admin/messages/info/Message.java
new file mode 100644
index 000000000..1515ddfc6
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/Message.java
@@ -0,0 +1,97 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * InfoMessage container to hold server admin related information.
+ *
+ * @see heal-commands.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Message {
+ @JsonProperty("mode")
+ private String mode;
+
+ @JsonProperty("deploymentID")
+ private String deploymentID;
+
+ @JsonProperty("buckets")
+ private Buckets buckets;
+
+ @JsonProperty("objects")
+ private Objects objects;
+
+ @JsonProperty("versions")
+ private Versions versions;
+
+ @JsonProperty("usage")
+ private Usage usage;
+
+ @JsonProperty("backend")
+ private Backend backend;
+
+ @JsonProperty("servers")
+ private List servers;
+
+ @JsonProperty("pools")
+ private Map> pools;
+
+ public String mode() {
+ return mode;
+ }
+
+ public String deploymentID() {
+ return deploymentID;
+ }
+
+ public Buckets buckets() {
+ return buckets;
+ }
+
+ public Objects objects() {
+ return objects;
+ }
+
+ public Versions versions() {
+ return versions;
+ }
+
+ public Usage usage() {
+ return usage;
+ }
+
+ public Backend backend() {
+ return backend;
+ }
+
+ public List servers() {
+ return Collections.unmodifiableList(servers == null ? new LinkedList<>() : servers);
+ }
+
+ public Map> pools() {
+ return pools;
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/Objects.java b/adminapi/src/main/java/io/minio/admin/messages/info/Objects.java
new file mode 100644
index 000000000..0e072260b
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/Objects.java
@@ -0,0 +1,44 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Objects contains the number of objects
+ *
+ * @see info-commands.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Objects {
+ @JsonProperty("count")
+ private Integer count;
+
+ @JsonProperty("error")
+ private String error;
+
+ public Integer count() {
+ return count;
+ }
+
+ public String error() {
+ return error;
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/ServerProperties.java b/adminapi/src/main/java/io/minio/admin/messages/info/ServerProperties.java
new file mode 100644
index 000000000..0b33dc282
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/ServerProperties.java
@@ -0,0 +1,139 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ServerProperties holds server information
+ *
+ * @see info-commands.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ServerProperties {
+ @JsonProperty("state")
+ private String state;
+
+ @JsonProperty("endpoint")
+ private String endpoint;
+
+ @JsonProperty("scheme")
+ private String scheme;
+
+ @JsonProperty("uptime")
+ private Integer uptime;
+
+ @JsonProperty("version")
+ private String version;
+
+ @JsonProperty("commitID")
+ private String commitID;
+
+ @JsonProperty("network")
+ private Map network;
+
+ @JsonProperty("drives")
+ private List disks;
+
+ @JsonProperty("poolNumber")
+ private Integer poolNumber;
+
+ @JsonProperty("mem_stats")
+ private MemStats memStats;
+
+ @JsonProperty("go_max_procs")
+ private Integer goMaxProcs;
+
+ @JsonProperty("num_cpu")
+ private Integer numCPU;
+
+ @JsonProperty("runtime_version")
+ private String runtimeVersion;
+
+ @JsonProperty("gc_stats")
+ private GCStats gCStats;
+
+ @JsonProperty("minio_env_vars")
+ private Map minioEnvVars;
+
+ public String state() {
+ return state;
+ }
+
+ public String endpoint() {
+ return endpoint;
+ }
+
+ public String scheme() {
+ return scheme;
+ }
+
+ public Integer uptime() {
+ return uptime;
+ }
+
+ public String version() {
+ return version;
+ }
+
+ public String commitID() {
+ return commitID;
+ }
+
+ public Map network() {
+ return Collections.unmodifiableMap(this.network);
+ }
+
+ public List disks() {
+ return Collections.unmodifiableList(disks == null ? new LinkedList<>() : disks);
+ }
+
+ public Integer poolNumber() {
+ return poolNumber;
+ }
+
+ public MemStats memStats() {
+ return memStats;
+ }
+
+ public Integer goMaxProcs() {
+ return goMaxProcs;
+ }
+
+ public Integer numCPU() {
+ return numCPU;
+ }
+
+ public String runtimeVersion() {
+ return runtimeVersion;
+ }
+
+ public GCStats gCStats() {
+ return gCStats;
+ }
+
+ public Map minioEnvVars() {
+ return Collections.unmodifiableMap(this.minioEnvVars);
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/TimedAction.java b/adminapi/src/main/java/io/minio/admin/messages/info/TimedAction.java
new file mode 100644
index 000000000..f1cde4185
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/TimedAction.java
@@ -0,0 +1,51 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.math.BigDecimal;
+
+/**
+ * TimedAction contains a number of actions and their accumulated duration in nanoseconds.
+ *
+ * @see metrics.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class TimedAction {
+ @JsonProperty("count")
+ private BigDecimal count;
+
+ @JsonProperty("acc_time_ns")
+ private BigDecimal accTime;
+
+ @JsonProperty("bytes")
+ private BigDecimal bytes;
+
+ public BigDecimal count() {
+ return count;
+ }
+
+ public BigDecimal accTime() {
+ return accTime;
+ }
+
+ public BigDecimal bytes() {
+ return bytes;
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/Usage.java b/adminapi/src/main/java/io/minio/admin/messages/info/Usage.java
new file mode 100644
index 000000000..fa24ede7b
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/Usage.java
@@ -0,0 +1,44 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Usage contains the total size used
+ *
+ * @see info-commands.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Usage {
+ @JsonProperty("size")
+ private Integer size;
+
+ @JsonProperty("error")
+ private String error;
+
+ public Integer size() {
+ return size;
+ }
+
+ public String error() {
+ return error;
+ }
+}
diff --git a/adminapi/src/main/java/io/minio/admin/messages/info/Versions.java b/adminapi/src/main/java/io/minio/admin/messages/info/Versions.java
new file mode 100644
index 000000000..67efc6fc2
--- /dev/null
+++ b/adminapi/src/main/java/io/minio/admin/messages/info/Versions.java
@@ -0,0 +1,44 @@
+/*
+ * MinIO Java SDK for Amazon S3 Compatible Cloud Storage,
+ * (C) 2022 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.minio.admin.messages.info;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Versions contains the number of versions
+ *
+ * @see info-commands.go
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Versions {
+ @JsonProperty("count")
+ private Integer count;
+
+ @JsonProperty("error")
+ private String error;
+
+ public Integer count() {
+ return count;
+ }
+
+ public String error() {
+ return error;
+ }
+}