Remove storage size and usage methods from QubesVM
This commit is contained in:
parent
7f85ba1f13
commit
930fe417a8
@ -129,16 +129,6 @@ class Storage(object):
|
|||||||
result += volume.usage
|
result += volume.usage
|
||||||
return result
|
return result
|
||||||
|
|
||||||
# TODO Remove this wrapper
|
|
||||||
def get_disk_utilization_private_img(self):
|
|
||||||
# pylint: disable=invalid-name,missing-docstring
|
|
||||||
return self.vm.volume['private'].usage
|
|
||||||
|
|
||||||
# TODO Remove this wrapper
|
|
||||||
def get_private_img_sz(self):
|
|
||||||
# :pylint: disable=missing-docstring
|
|
||||||
return self.vm.volume['private'].size
|
|
||||||
|
|
||||||
def resize(self, volume, size):
|
def resize(self, volume, size):
|
||||||
''' Resize volume '''
|
''' Resize volume '''
|
||||||
self.get_pool(volume).resize(volume, size)
|
self.get_pool(volume).resize(volume, size)
|
||||||
|
@ -38,7 +38,7 @@ class TC_00_AdminVM(qubes.tests.QubesTestCase):
|
|||||||
self.app = qubes.tests.vm.TestApp()
|
self.app = qubes.tests.vm.TestApp()
|
||||||
self.vm = qubes.vm.adminvm.AdminVM(self.app,
|
self.vm = qubes.vm.adminvm.AdminVM(self.app,
|
||||||
xml=None, qid=0, name='dom0')
|
xml=None, qid=0, name='dom0')
|
||||||
except: # pylint: disable=bare-except
|
except: # pylint: disable=bare-except
|
||||||
if self.id().endswith('.test_000_init'):
|
if self.id().endswith('.test_000_init'):
|
||||||
raise
|
raise
|
||||||
self.skipTest('setup failed')
|
self.skipTest('setup failed')
|
||||||
@ -69,17 +69,16 @@ class TC_00_AdminVM(qubes.tests.QubesTestCase):
|
|||||||
self.assertGreater(self.vm.get_mem_static_max(), 0)
|
self.assertGreater(self.vm.get_mem_static_max(), 0)
|
||||||
|
|
||||||
def test_304_get_disk_utilization(self):
|
def test_304_get_disk_utilization(self):
|
||||||
self.assertEqual(self.vm.get_disk_utilization(), 0)
|
self.assertRaises(self.vm.storage.get_disk_utilization(), 0)
|
||||||
|
|
||||||
def test_305_get_disk_utilization_private_img(self):
|
def test_305_has_no_private_volume(self):
|
||||||
# pylint: disable=invalid-name
|
self.assertEqual(KeyError, self.vm.volumes['private'])
|
||||||
self.assertEqual(self.vm.get_disk_utilization_private_img(), 0)
|
|
||||||
|
|
||||||
def test_306_get_private_img_sz(self):
|
def test_306_has_no_root_volume(self):
|
||||||
self.assertEqual(self.vm.get_private_img_sz(), 0)
|
self.assertEqual(KeyError, self.vm.volumes['root'])
|
||||||
|
|
||||||
def test_307_verify_files(self):
|
def test_307_has_no_volatile_volume(self):
|
||||||
self.assertEqual(self.vm.get_private_img_sz(), 0)
|
self.assertEqual(KeyError, self.vm.volumes['volatile'])
|
||||||
|
|
||||||
def test_310_start(self):
|
def test_310_start(self):
|
||||||
with self.assertRaises(qubes.exc.QubesException):
|
with self.assertRaises(qubes.exc.QubesException):
|
||||||
|
@ -31,7 +31,6 @@ from __future__ import print_function
|
|||||||
import __builtin__
|
import __builtin__
|
||||||
import argparse
|
import argparse
|
||||||
import collections
|
import collections
|
||||||
import math
|
|
||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
@ -122,8 +121,10 @@ class Column(object):
|
|||||||
if isinstance(ret, (qubes.vm.BaseVM, qubes.Label)):
|
if isinstance(ret, (qubes.vm.BaseVM, qubes.Label)):
|
||||||
return ret.name
|
return ret.name
|
||||||
|
|
||||||
return ret
|
if isinstance(ret, int):
|
||||||
|
return str(ret)
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '{}(head={!r}, width={!r})'.format(self.__class__.__name__,
|
return '{}(head={!r}, width={!r})'.format(self.__class__.__name__,
|
||||||
@ -389,6 +390,29 @@ class StatusColumn(Column):
|
|||||||
return ''.join((flag(self, vm) or '-') for flag in self.get_flags())
|
return ''.join((flag(self, vm) or '-') for flag in self.get_flags())
|
||||||
|
|
||||||
|
|
||||||
|
def calc_size(vm, volume_name):
|
||||||
|
''' Calculates the volume size in MB '''
|
||||||
|
try:
|
||||||
|
return vm.volumes[volume_name].size // 1024 // 1024
|
||||||
|
except KeyError:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def calc_usage(vm, volume_name):
|
||||||
|
''' Calculates the volume usage in MB '''
|
||||||
|
try:
|
||||||
|
return vm.volumes[volume_name].usage // 1024 // 1024
|
||||||
|
except KeyError:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def calc_used(vm, volume_name):
|
||||||
|
''' Calculates the volume usage in percent '''
|
||||||
|
size = calc_size(vm, volume_name)
|
||||||
|
if size == 0:
|
||||||
|
return 0
|
||||||
|
usage = calc_usage(vm, volume_name)
|
||||||
|
return usage * 100 // size
|
||||||
|
|
||||||
|
|
||||||
# todo maxmem
|
# todo maxmem
|
||||||
|
|
||||||
Column('GATEWAY', width=15,
|
Column('GATEWAY', width=15,
|
||||||
@ -396,45 +420,37 @@ Column('GATEWAY', width=15,
|
|||||||
doc='Network gateway.')
|
doc='Network gateway.')
|
||||||
|
|
||||||
Column('MEMORY', width=5,
|
Column('MEMORY', width=5,
|
||||||
attr=(lambda vm: vm.get_mem()/1024 if vm.is_running() else None),
|
attr=(lambda vm: vm.get_mem() / 1024 if vm.is_running() else None),
|
||||||
doc='Memory currently used by VM')
|
doc='Memory currently used by VM')
|
||||||
|
|
||||||
Column('DISK', width=5,
|
Column('DISK', width=5,
|
||||||
attr=(lambda vm: vm.get_disk_utilization()/1024/1024),
|
attr=(lambda vm: vm.storage.get_disk_utilization() / 1024 / 1024),
|
||||||
doc='Total disk utilisation.')
|
doc='Total disk utilisation.')
|
||||||
|
|
||||||
|
|
||||||
Column('PRIV-CURR', width=5,
|
Column('PRIV-CURR', width=5,
|
||||||
attr=(lambda vm:
|
attr=(lambda vm: calc_usage(vm, 'private')),
|
||||||
int(math.floor(vm.get_disk_utilization_private_img()/1024/1024))),
|
|
||||||
doc='Disk utilisation by private image (/home, /usr/local).')
|
doc='Disk utilisation by private image (/home, /usr/local).')
|
||||||
|
|
||||||
Column('PRIV-MAX', width=5,
|
Column('PRIV-MAX', width=5,
|
||||||
attr=(lambda vm:
|
attr=(lambda vm: calc_size(vm, 'private')),
|
||||||
int(math.floor(vm.get_private_img_sz()/1024/1024))),
|
|
||||||
doc='Maximum available space for private image.')
|
doc='Maximum available space for private image.')
|
||||||
|
|
||||||
Column('PRIV-USED', width=5,
|
Column('PRIV-USED', width=5,
|
||||||
attr=(lambda vm:
|
attr=(lambda vm: calc_used(vm, 'private')),
|
||||||
int(math.floor(vm.get_disk_utilization_private_img() * 100
|
|
||||||
/ vm.get_private_img_sz()))),
|
|
||||||
doc='Disk utilisation by private image as a percentage of available space.')
|
doc='Disk utilisation by private image as a percentage of available space.')
|
||||||
|
|
||||||
|
|
||||||
Column('ROOT-CURR', width=5,
|
Column('ROOT-CURR', width=5,
|
||||||
attr=(lambda vm:
|
attr=(lambda vm: calc_usage(vm, 'root')),
|
||||||
int(math.floor(vm.get_disk_utilization_private_img()/1024/1024))),
|
|
||||||
doc='Disk utilisation by root image (/usr, /lib, /etc, ...).')
|
doc='Disk utilisation by root image (/usr, /lib, /etc, ...).')
|
||||||
|
|
||||||
Column('ROOT-MAX', width=5,
|
Column('ROOT-MAX', width=5,
|
||||||
attr=(lambda vm:
|
attr=(lambda vm: calc_size(vm, 'root')),
|
||||||
int(math.floor(vm.get_private_img_sz()/1024/1024))),
|
|
||||||
doc='Maximum available space for root image.')
|
doc='Maximum available space for root image.')
|
||||||
|
|
||||||
Column('ROOT-USED', width=5,
|
Column('ROOT-USED', width=5,
|
||||||
attr=(lambda vm:
|
attr=(lambda vm: calc_used(vm, 'root')),
|
||||||
int(math.floor(vm.get_disk_utilization_private_img() * 100
|
|
||||||
/ vm.get_private_img_sz()))),
|
|
||||||
doc='Disk utilisation by root image as a percentage of available space.')
|
doc='Disk utilisation by root image as a percentage of available space.')
|
||||||
|
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ class AdminVM(qubes.vm.qubesvm.QubesVM):
|
|||||||
:py:meth:`qubes.vm.qubesvm.QubesVM.get_mem`
|
:py:meth:`qubes.vm.qubesvm.QubesVM.get_mem`
|
||||||
'''
|
'''
|
||||||
|
|
||||||
#return psutil.virtual_memory().total/1024
|
# return psutil.virtual_memory().total/1024
|
||||||
for line in open('/proc/meminfo'):
|
for line in open('/proc/meminfo'):
|
||||||
if line.startswith('MemTotal:'):
|
if line.startswith('MemTotal:'):
|
||||||
return int(line.split(':')[1].strip().split()[0])
|
return int(line.split(':')[1].strip().split()[0])
|
||||||
@ -110,23 +110,6 @@ class AdminVM(qubes.vm.qubesvm.QubesVM):
|
|||||||
'''
|
'''
|
||||||
return self.app.vmm.libvirt_conn.getInfo()[1]
|
return self.app.vmm.libvirt_conn.getInfo()[1]
|
||||||
|
|
||||||
|
|
||||||
def get_disk_utilization(self):
|
|
||||||
'''Always ``0``.
|
|
||||||
|
|
||||||
.. seealso:
|
|
||||||
:py:meth:`qubes.vm.qubesvm.QubesVM.get_disk_utilization`
|
|
||||||
'''
|
|
||||||
return 0
|
|
||||||
|
|
||||||
def get_disk_utilization_private_img(self):
|
|
||||||
'''Always ``0``.
|
|
||||||
|
|
||||||
.. seealso:
|
|
||||||
:py:meth:`qubes.vm.qubesvm.QubesVM.get_disk_utilization_private_img`
|
|
||||||
'''
|
|
||||||
return 0
|
|
||||||
|
|
||||||
def get_private_img_sz(self):
|
def get_private_img_sz(self):
|
||||||
'''Always ``0``.
|
'''Always ``0``.
|
||||||
|
|
||||||
@ -135,7 +118,6 @@ class AdminVM(qubes.vm.qubesvm.QubesVM):
|
|||||||
'''
|
'''
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
def verify_files(self):
|
def verify_files(self):
|
||||||
'''Always :py:obj:`True`
|
'''Always :py:obj:`True`
|
||||||
|
|
||||||
@ -150,7 +132,7 @@ class AdminVM(qubes.vm.qubesvm.QubesVM):
|
|||||||
|
|
||||||
.. seealso:
|
.. seealso:
|
||||||
:py:meth:`qubes.vm.qubesvm.QubesVM.start`
|
:py:meth:`qubes.vm.qubesvm.QubesVM.start`
|
||||||
''' # pylint: disable=unused-argument
|
''' # pylint: disable=unused-argument
|
||||||
raise qubes.exc.QubesVMError(self, 'Cannot start Dom0 fake domain!')
|
raise qubes.exc.QubesVMError(self, 'Cannot start Dom0 fake domain!')
|
||||||
|
|
||||||
|
|
||||||
|
@ -1547,82 +1547,6 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
|
|||||||
'libvirt error code: {!r}'.format(e.get_error_code()))
|
'libvirt error code: {!r}'.format(e.get_error_code()))
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# XXX shouldn't this go only to vms that have root image?
|
|
||||||
def get_disk_utilization_root_img(self):
|
|
||||||
'''Get space that is actually ocuppied by :py:attr:`volumes['root']`.
|
|
||||||
|
|
||||||
This is a temporary wrapper for backwards compatibility. You should
|
|
||||||
call directly :py:attr:`volumes[name].utilization`
|
|
||||||
:returns: domain's real disk image size [FIXME unit]
|
|
||||||
:rtype: FIXME
|
|
||||||
|
|
||||||
.. seealso:: :py:meth:`get_root_img_sz`
|
|
||||||
'''
|
|
||||||
|
|
||||||
warnings.warn("get_disk_utilization_root_img is deprecated,"
|
|
||||||
" use volumes['root'].utilization", DeprecationWarning)
|
|
||||||
return qubes.storage.file.get_disk_usage(
|
|
||||||
self.volumes['root'].utilization)
|
|
||||||
|
|
||||||
|
|
||||||
# XXX shouldn't this go only to vms that have root image?
|
|
||||||
def get_root_img_sz(self):
|
|
||||||
'''Get the size of the :py:attr:`volumes['root']`.
|
|
||||||
|
|
||||||
This is a temporary wrapper for backwards compatibility. You should
|
|
||||||
call directly :py:attr:`volumes[name].size`
|
|
||||||
:returns: domain's virtual disk size [FIXME unit]
|
|
||||||
:rtype: FIXME
|
|
||||||
|
|
||||||
.. seealso:: :py:meth:`get_disk_utilization_root_img`
|
|
||||||
'''
|
|
||||||
|
|
||||||
warnings.warn(
|
|
||||||
"get_disk_root_img_sz is deprecated, use volumes['root'].size",
|
|
||||||
DeprecationWarning)
|
|
||||||
return qubes.storage.file.get_disk_usage(self.volumes['root'].size)
|
|
||||||
|
|
||||||
def get_disk_utilization_private_img(self):
|
|
||||||
'''Get space that is actually ocuppied by :py:attr:`volumes['private']`.
|
|
||||||
|
|
||||||
This is a temporary wrapper for backwards compatibility. You should
|
|
||||||
call directly :py:attr:`volumes[name].utilization`
|
|
||||||
:returns: domain's real disk image size [FIXME unit]
|
|
||||||
:rtype: FIXME
|
|
||||||
''' # pylint: disable=invalid-name
|
|
||||||
|
|
||||||
warnings.warn("get_disk_utilization_private_img is deprecated,"
|
|
||||||
" use volumes['private'].utilization", DeprecationWarning)
|
|
||||||
return qubes.storage.file.get_disk_usage(self.volumes[
|
|
||||||
'private'].utilization)
|
|
||||||
|
|
||||||
def get_private_img_sz(self):
|
|
||||||
'''Get the size of the :py:attr:`volumes['private']`.
|
|
||||||
|
|
||||||
This is a temporary wrapper for backwards compatibility. You should
|
|
||||||
call directly :py:attr:`volumes[name].size`
|
|
||||||
:returns: domain's virtual disk size [FIXME unit]
|
|
||||||
:rtype: FIXME
|
|
||||||
|
|
||||||
.. seealso:: :py:meth:`get_disk_utilization_private_img`
|
|
||||||
'''
|
|
||||||
|
|
||||||
warnings.warn("get_disk_private_img_sz is deprecated,"
|
|
||||||
" use volumes['private'].size", DeprecationWarning)
|
|
||||||
return qubes.storage.file.get_disk_usage(self.volumes['private'].size)
|
|
||||||
|
|
||||||
def get_disk_utilization(self):
|
|
||||||
'''Return total space actually occuppied by all files belonging to \
|
|
||||||
this domain.
|
|
||||||
|
|
||||||
:returns: domain's total disk usage [FIXME unit]
|
|
||||||
:rtype: FIXME
|
|
||||||
'''
|
|
||||||
|
|
||||||
return qubes.storage.file.get_disk_usage(self.dir_path)
|
|
||||||
|
|
||||||
# TODO move to storage
|
# TODO move to storage
|
||||||
def verify_files(self):
|
def verify_files(self):
|
||||||
'''Verify that files accessed by this machine are sane.
|
'''Verify that files accessed by this machine are sane.
|
||||||
|
Loading…
Reference in New Issue
Block a user