Eli Mesika has uploaded a new change for review. Change subject: core: check host time-drift in getVdsStat(#848862) ......................................................................
core: check host time-drift in getVdsStat(#848862) Change-Id: Ie1f38149c0a7fb1d6e1627e86b1a3c231352e1a0 Signed-off-by: Eli Mesika <emes...@redhat.com> --- M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetStatsVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java 3 files changed, 42 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/30/7830/1 diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetStatsVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetStatsVDSCommand.java index fced5cb..3979f82 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetStatsVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetStatsVDSCommand.java @@ -31,5 +31,6 @@ } } VdsBrokerObjectsBuilder.updateVDSStatisticsData(getVds(), infoReturn.mInfo); + VdsBrokerObjectsBuilder.checkTimeDrift(getVds(), infoReturn.mInfo); } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java index 7ae941a..479fec8 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java @@ -1,5 +1,8 @@ package org.ovirt.engine.core.vdsbroker.vdsbroker; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -8,6 +11,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.TimeUnit; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.AuditLogType; @@ -322,6 +326,26 @@ hooksStr = xmlRpcStruct.getItem(VdsProperties.hooks).toString(); } vds.setHooksStr(hooksStr); + } + + public static void checkTimeDrift(VDS vds, XmlRpcStruct xmlRpcStruct) { + Boolean isHostTimeDriftEnabled = Config.GetValue(ConfigValues.EnableHostTimeDrift); + if (isHostTimeDriftEnabled) { + Integer maxTimeDriftAllowed = Config.GetValue(ConfigValues.HostTimeDriftInSec); + Date hostDate = AssignDatetimeValue(xmlRpcStruct, VdsProperties.hostDatetime); + if (hostDate != null) { + Long timeDrift = + TimeUnit.MILLISECONDS.toSeconds(Math.abs(hostDate.getTime() - System.currentTimeMillis())); + if (timeDrift > maxTimeDriftAllowed) { + AuditLogableBase logable = new AuditLogableBase(vds.getId()); + logable.AddCustomValue("Actual", timeDrift.toString()); + logable.AddCustomValue("Max", maxTimeDriftAllowed.toString()); + AuditLogDirector.log(logable, AuditLogType.VDS_TIME_DRIFT_ALERT); + } + } else { + log.error("Time Drift validation: failed to get Host or Engine time."); + } + } } private static void initDisksUsage(XmlRpcStruct vmStruct, VmStatistics vm) { @@ -733,6 +757,22 @@ return retval; } + private static Date AssignDatetimeValue(XmlRpcStruct input, String name) { + if (input.containsKey(name)) { + if (input.getItem(name) instanceof Date) { + return (Date) input.getItem(name); + } + DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); + try { + String dateStr = input.getItem(name).toString().replaceFirst("T", " ").trim(); + return formatter.parse(dateStr); + } catch (ParseException e) { + e.printStackTrace(); + } + } + return null; + } + private static Boolean AssignBoolValue(XmlRpcStruct input, String name) { if (input.containsKey(name)) { if (input.getItem(name) instanceof Boolean) { diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java index fb7fe69..7ecab75 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java @@ -19,6 +19,7 @@ public final class VdsProperties { // vds configuration (i.e. VdsStatic) // vds runtime (i.e. VdsDynamic req getVdsCapabilities) + public static final String hostDatetime = "dateTime"; public static final String time_zone = "timeZone"; public static final String utc_diff = "timeOffset"; public static final String cpu_flags = "cpuFlags"; -- To view, visit http://gerrit.ovirt.org/7830 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie1f38149c0a7fb1d6e1627e86b1a3c231352e1a0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Eli Mesika <emes...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches