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

Reply via email to