예제 #1
0
    def inspect_memory_usage(self, instance, duration=None):
        instance_name = util.instance_name(instance)
        domain = self._get_domain_not_shut_off_or_raise(instance)

        try:
            memory_stats = domain.memoryStats()
            if (memory_stats and
                    memory_stats.get('available') and
                    memory_stats.get('unused')):
                memory_used = (memory_stats.get('available') -
                               memory_stats.get('unused'))
                # Stat provided from libvirt is in KB, converting it to MB.
                memory_used = memory_used / units.Ki
                return virt_inspector.MemoryUsageStats(usage=memory_used)
            else:
                msg = ('Failed to inspect memory usage of instance '
                       '<name=%(name)s, id=%(id)s>, '
                       'can not get info from libvirt.') % {
                    'name': instance_name, 'id': instance.id}
                raise virt_inspector.NoDataException(msg)
        # memoryStats might launch an exception if the method is not supported
        # by the underlying hypervisor being used by libvirt.
        except libvirt.libvirtError as e:
            msg = ('Failed to inspect memory usage of %(instance_uuid)s, '
                   'can not get info from libvirt: %(error)s') % {
                'instance_uuid': instance.id, 'error': e}
            raise virt_inspector.NoDataException(msg)
예제 #2
0
    def inspect_memory_usage(self, instance, duration=None):
        instance_name = util.instance_name(instance)
        domain = self._get_domain_not_shut_off_or_raise(instance)

        try:
            memory_stats = domain.memoryStats()
            if (memory_stats and memory_stats.get('available')
                    and memory_stats.get('unused')):
                memory_used = (memory_stats.get('available') -
                               memory_stats.get('unused'))
                # Stat provided from libvirt is in KB, converting it to MB.
                memory_used = memory_used / units.Ki
                return virt_inspector.MemoryUsageStats(usage=memory_used)
            else:
                msg = ('Failed to inspect memory usage of instance '
                       '<name=%(name)s, id=%(id)s>, '
                       'can not get info from libvirt.') % {
                           'name': instance_name,
                           'id': instance.id
                       }
                raise virt_inspector.NoDataException(msg)
        # memoryStats might launch an exception if the method is not supported
        # by the underlying hypervisor being used by libvirt.
        except libvirt.libvirtError as e:
            msg = ('Failed to inspect memory usage of %(instance_uuid)s, '
                   'can not get info from libvirt: %(error)s') % {
                       'instance_uuid': instance.id,
                       'error': e
                   }
            raise virt_inspector.NoDataException(msg)
예제 #3
0
    def _get_domain_not_shut_off_or_raise(self, instance):
        instance_name = util.instance_name(instance)
        domain = self._lookup_by_uuid(instance)

        state = domain.info()[0]
        if state == libvirt.VIR_DOMAIN_SHUTOFF:
            msg = ('Failed to inspect data of instance '
                   '<name=%(name)s, id=%(id)s>, '
                   'domain state is SHUTOFF.') % {
                'name': instance_name, 'id': instance.id}
            raise virt_inspector.InstanceShutOffException(msg)

        return domain
예제 #4
0
    def _get_domain_not_shut_off_or_raise(self, instance):
        instance_name = util.instance_name(instance)
        domain = self._lookup_by_uuid(instance)

        state = domain.info()[0]
        if state == libvirt.VIR_DOMAIN_SHUTOFF:
            msg = ('Failed to inspect data of instance '
                   '<name=%(name)s, id=%(id)s>, '
                   'domain state is SHUTOFF.') % {
                       'name': instance_name,
                       'id': instance.id
                   }
            raise virt_inspector.InstanceShutOffException(msg)

        return domain
예제 #5
0
 def _lookup_by_uuid(self, instance):
     instance_name = util.instance_name(instance)
     try:
         return self._get_connection().lookupByUUIDString(instance.id)
     except Exception as ex:
         if not libvirt or not isinstance(ex, libvirt.libvirtError):
             raise virt_inspector.InspectorException(six.text_type(ex))
         error_code = ex.get_error_code()
         if (error_code == libvirt.VIR_ERR_SYSTEM_ERROR and
             ex.get_error_domain() in (libvirt.VIR_FROM_REMOTE,
                                       libvirt.VIR_FROM_RPC)):
             raise
         msg = _("Error from libvirt while looking up instance "
                 "<name=%(name)s, id=%(id)s>: "
                 "[Error Code %(error_code)s] "
                 "%(ex)s") % {'name': instance_name,
                              'id': instance.id,
                              'error_code': error_code,
                              'ex': ex}
         raise virt_inspector.InstanceNotFoundException(msg)
예제 #6
0
 def _lookup_by_uuid(self, instance):
     instance_name = util.instance_name(instance)
     try:
         return self._get_connection().lookupByUUIDString(instance.id)
     except Exception as ex:
         if not libvirt or not isinstance(ex, libvirt.libvirtError):
             raise virt_inspector.InspectorException(six.text_type(ex))
         error_code = ex.get_error_code()
         if (error_code == libvirt.VIR_ERR_SYSTEM_ERROR
                 and ex.get_error_domain()
                 in (libvirt.VIR_FROM_REMOTE, libvirt.VIR_FROM_RPC)):
             raise
         msg = _("Error from libvirt while looking up instance "
                 "<name=%(name)s, id=%(id)s>: "
                 "[Error Code %(error_code)s] "
                 "%(ex)s") % {
                     'name': instance_name,
                     'id': instance.id,
                     'error_code': error_code,
                     'ex': ex
                 }
         raise virt_inspector.InstanceNotFoundException(msg)