Change in vdsm[master]: virt: Only filter guest agent data, only on XMLRPC

vfeenstr at redhat.com vfeenstr at redhat.com
Thu Jan 15 12:05:22 UTC 2015


Vinzenz Feenstra has uploaded a new change for review.

Change subject: virt: Only filter guest agent data, only on XMLRPC
......................................................................

virt: Only filter guest agent data, only on XMLRPC

Change-Id: Ia9ee2a8f1cc6784c619ce68da3cb9342b0d72cfc
Bug-Url: https://bugzilla.redhat.com/1179696
Signed-off-by: Vinzenz Feenstra <vfeenstr at redhat.com>
---
M vdsm/API.py
M vdsm/rpc/BindingXMLRPC.py
M vdsm/virt/guestagent.py
M vdsm/virt/vm.py
4 files changed, 24 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/49/36949/1

diff --git a/vdsm/API.py b/vdsm/API.py
index 7b02278..5cdbd4a 100644
--- a/vdsm/API.py
+++ b/vdsm/API.py
@@ -354,20 +354,20 @@
             return errCode['noVM']
         return v.migrateStatus()
 
-    def getStats(self):
+    def getStats(self, viaXMLRPC=False):
         """
         Obtain statistics of the specified VM
         """
-        return self._getStats()
+        return self._getStats(viaXMLRPC=viaXMLRPC)
 
-    def _getStats(self, runHooks=True):
+    def _getStats(self, runHooks=True, viaXMLRPC=False):
         v = self._cif.vmContainer.get(self._UUID)
         if not v:
             return errCode['noVM']
 
         if runHooks:
             hooks.before_get_vm_stats()
-        stats = v.getStats().copy()
+        stats = v.getStats(viaXMLRPC=viaXMLRPC).copy()
         stats['vmId'] = self._UUID
         if runHooks:
             stats = hooks.after_get_vm_stats([stats])[0]
@@ -1301,7 +1301,7 @@
             self.log.error("failed to retrieve hardware info", exc_info=True)
             return errCode['hwInfoErr']
 
-    def getAllVmStats(self):
+    def getAllVmStats(self, viaXMLRPC=False):
         """
         Get statistics of all running VMs.
         """
@@ -1309,7 +1309,8 @@
         vms = self.getVMList()
         statsList = []
         for s in vms['vmList']:
-            response = VM(s['vmId'])._getStats(runHooks=False)
+            response = VM(s['vmId'])._getStats(runHooks=False,
+                                               viaXMLRPC=viaXMLRPC)
             if response:
                 statsList.append(response['statsList'][0])
         statsList = hooks.after_get_all_vm_stats(statsList)
diff --git a/vdsm/rpc/BindingXMLRPC.py b/vdsm/rpc/BindingXMLRPC.py
index a6b75f3..94060f3 100644
--- a/vdsm/rpc/BindingXMLRPC.py
+++ b/vdsm/rpc/BindingXMLRPC.py
@@ -484,11 +484,11 @@
 
     def vmGetStats(self, vmId):
         vm = API.VM(vmId)
-        return vm.getStats()
+        return vm.getStats(viaXMLRPC=True)
 
     def getAllVmStats(self):
         api = API.Global()
-        return api.getAllVmStats()
+        return api.getAllVmStats(viaXMLRPC=True)
 
     def hostdevListByCaps(self, caps=None):
         api = API.Global()
diff --git a/vdsm/virt/guestagent.py b/vdsm/virt/guestagent.py
index 12f244c..d725bd7 100644
--- a/vdsm/virt/guestagent.py
+++ b/vdsm/virt/guestagent.py
@@ -334,18 +334,22 @@
     def getStatus(self):
         return self.guestStatus
 
-    def getGuestInfo(self):
+    def getGuestInfo(self, viaXMLRPC=False):
+        def filter(o):
+            if viaXMLRPC:
+                return _filterObject(o)
+            return o
         if self.isResponsive():
-            return self.guestInfo
+            return filter(self.guestInfo)
         else:
             return {
                 'username': 'Unknown',
                 'session': 'Unknown',
                 'memUsage': 0,
                 'guestCPUCount': -1,
-                'appsList': self.guestInfo['appsList'],
-                'guestIPs': self.guestInfo['guestIPs'],
-                'guestFQDN': self.guestInfo['guestFQDN']}
+                'appsList': filter(self.guestInfo['appsList']),
+                'guestIPs': filter(self.guestInfo['guestIPs']),
+                'guestFQDN': filter(self.guestInfo['guestFQDN'])}
 
     def onReboot(self):
         self.guestStatus = vmstatus.REBOOT_IN_PROGRESS
@@ -460,12 +464,12 @@
 
         return result
 
-    def _parseLine(self, line):
+    @staticmethod
+    def _parseLine(line):
         # Deal with any bad UTF8 encoding from the (untrusted) guest,
         # by replacing them with the Unicode replacement character
         uniline = line.decode('utf8', 'replace')
         args = json.loads(uniline)
-        args = _filterObject(args)
         name = args['__name__']
         del args['__name__']
         return (name, args)
diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index 20d526e..39d86d3 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -2275,7 +2275,7 @@
             status['guestDiskMapping'] = self.guestAgent.guestDiskMapping
             return utils.picklecopy(status)
 
-    def getStats(self):
+    def getStats(self, viaXMLRPC=False):
         """
         used by API.Vm.getStats
 
@@ -2290,7 +2290,7 @@
         stats = self._getConfigVmStats()
         stats.update(self._getRunningVmStats())
         stats.update(self._getVmStatus())
-        stats.update(self._getGuestStats())
+        stats.update(self._getGuestStats(viaXMLRPC=viaXMLRPC))
         return stats
 
     def _getExitedVmStats(self):
@@ -2420,8 +2420,8 @@
             'displaySecurePort': self.conf['displaySecurePort'],
             'displayIp': self.conf['displayIp']}
 
-    def _getGuestStats(self):
-        stats = self.guestAgent.getGuestInfo()
+    def _getGuestStats(self, viaXMLRPC=False):
+        stats = self.guestAgent.getGuestInfo(viaXMLRPC=viaXMLRPC)
         realMemUsage = int(stats['memUsage'])
         if realMemUsage != 0:
             memUsage = (100 - float(realMemUsage) /


-- 
To view, visit http://gerrit.ovirt.org/36949
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia9ee2a8f1cc6784c619ce68da3cb9342b0d72cfc
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Vinzenz Feenstra <vfeenstr at redhat.com>


More information about the vdsm-patches mailing list