From 78cc0a44c1bcc113354f281c78382c3feb0169c3 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 10 Feb 2020 19:01:34 +0530 Subject: [PATCH] server: use host record related to a ssvm/cpvm (#3876) This implements the systemvm list API response creator to find and use the host record for a ssvm/cpvm to get the agent status and other details like last disconnected date and agent version. Fixes 3875 Signed-off-by: Rohit Yadav --- .../cloudstack/api/response/SystemVmResponse.java | 14 +++++++------- server/src/main/java/com/cloud/api/ApiDBUtils.java | 4 ++++ .../main/java/com/cloud/api/ApiResponseHelper.java | 13 ++++++++++--- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/SystemVmResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SystemVmResponse.java index 0e80954566f..3fb17db7532 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/SystemVmResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/SystemVmResponse.java @@ -154,9 +154,9 @@ public class SystemVmResponse extends BaseResponse { @Param(description = "public vlan range") private List publicVlan; - @SerializedName("lastpinged") - @Param(description = "the date and time the host was last pinged", since = "4.13.1") - private Date lastPinged; + @SerializedName("disconnected") + @Param(description = "the last disconnected date of host", since = "4.13.1") + private Date disconnectedOn; @SerializedName("version") @Param(description = "the systemvm agent version", since = "4.13.1") @@ -403,12 +403,12 @@ public class SystemVmResponse extends BaseResponse { this.publicVlan = publicVlan; } - public Date getLastPinged() { - return lastPinged; + public Date getDisconnectedOn() { + return disconnectedOn; } - public void setLastPinged(Date lastPinged) { - this.lastPinged = lastPinged; + public void setDisconnectedOn(Date disconnectedOn) { + this.disconnectedOn = disconnectedOn; } public String getVersion() { diff --git a/server/src/main/java/com/cloud/api/ApiDBUtils.java b/server/src/main/java/com/cloud/api/ApiDBUtils.java index acd73622642..74579813c3d 100644 --- a/server/src/main/java/com/cloud/api/ApiDBUtils.java +++ b/server/src/main/java/com/cloud/api/ApiDBUtils.java @@ -1039,6 +1039,10 @@ public class ApiDBUtils { return s_hostDao.findByIdIncludingRemoved(hostId); } + public static HostVO findHostByTypeNameAndZoneId(Long zoneId, String name, Host.Type type) { + return s_hostDao.findByTypeNameAndZoneId(zoneId, name, type); + } + public static IPAddressVO findIpAddressById(long addressId) { return s_ipAddressDao.findById(addressId); } diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index d8c966d86e7..05c1ab09538 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -1375,9 +1375,16 @@ public class ApiResponseHelper implements ResponseGenerator { vmResponse.setHostId(host.getUuid()); vmResponse.setHostName(host.getName()); vmResponse.setHypervisor(host.getHypervisorType().toString()); - vmResponse.setAgentState(host.getStatus()); - vmResponse.setLastPinged(new Date(host.getLastPinged())); - vmResponse.setVersion(host.getVersion()); + } + } + + if (vm.getType() == Type.SecondaryStorageVm || vm.getType() == Type.ConsoleProxy) { + Host systemVmHost = ApiDBUtils.findHostByTypeNameAndZoneId(vm.getDataCenterId(), vm.getHostName(), + Type.SecondaryStorageVm.equals(vm.getType()) ? Host.Type.SecondaryStorageVM : Host.Type.ConsoleProxy); + if (systemVmHost != null) { + vmResponse.setAgentState(systemVmHost.getStatus()); + vmResponse.setDisconnectedOn(systemVmHost.getDisconnectedOn()); + vmResponse.setVersion(systemVmHost.getVersion()); } }