Exemplo n.º 1
0
    def inspect_disk_rates(self, instance, duration=None):
        vm_moid = self._ops.get_vm_moid(instance.id)
        if not vm_moid:
            raise virt_inspector.InstanceNotFoundException(
                'VM %s not found in VMware Vsphere' % instance.id)

        disk_stats = {}
        disk_ids = set()
        disk_counters = [
            VC_DISK_READ_RATE_CNTR, VC_DISK_READ_REQUESTS_RATE_CNTR,
            VC_DISK_WRITE_RATE_CNTR, VC_DISK_WRITE_REQUESTS_RATE_CNTR
        ]

        for disk_counter in disk_counters:
            disk_counter_id = self._ops.get_perf_counter_id(disk_counter)
            disk_id_to_stat_map = self._ops.query_vm_device_stats(
                vm_moid, disk_counter_id, duration)
            disk_stats[disk_counter] = disk_id_to_stat_map
            disk_ids.update(disk_id_to_stat_map.iterkeys())

        for disk_id in disk_ids:

            def stat_val(counter_name):
                return disk_stats[counter_name].get(disk_id, 0)

            disk = virt_inspector.Disk(device=disk_id)
            # Stats provided from vSphere are in KB/s, converting it to B/s.
            disk_rate_info = virt_inspector.DiskRateStats(
                read_bytes_rate=stat_val(VC_DISK_READ_RATE_CNTR) * units.Ki,
                read_requests_rate=stat_val(VC_DISK_READ_REQUESTS_RATE_CNTR),
                write_bytes_rate=stat_val(VC_DISK_WRITE_RATE_CNTR) * units.Ki,
                write_requests_rate=stat_val(VC_DISK_WRITE_REQUESTS_RATE_CNTR))
            yield (disk, disk_rate_info)
Exemplo n.º 2
0
    def inspect_vnic_rates(self, instance, duration=None):
        vm_moid = self._ops.get_vm_moid(instance.id)
        if not vm_moid:
            raise virt_inspector.InstanceNotFoundException(
                'VM %s not found in VMware Vsphere' % instance.id)

        vnic_stats = {}
        vnic_ids = set()

        for net_counter in (VC_NETWORK_RX_COUNTER, VC_NETWORK_TX_COUNTER):
            net_counter_id = self._ops.get_perf_counter_id(net_counter)
            vnic_id_to_stats_map = self._ops.query_vm_device_stats(
                vm_moid, net_counter_id, duration)
            vnic_stats[net_counter] = vnic_id_to_stats_map
            vnic_ids.update(vnic_id_to_stats_map.iterkeys())

        # Stats provided from vSphere are in KB/s, converting it to B/s.
        for vnic_id in vnic_ids:
            rx_bytes_rate = (
                vnic_stats[VC_NETWORK_RX_COUNTER].get(vnic_id, 0) * units.Ki)
            tx_bytes_rate = (
                vnic_stats[VC_NETWORK_TX_COUNTER].get(vnic_id, 0) * units.Ki)

            stats = virt_inspector.InterfaceRateStats(rx_bytes_rate,
                                                      tx_bytes_rate)
            interface = virt_inspector.Interface(name=vnic_id,
                                                 mac=None,
                                                 fref=None,
                                                 parameters=None)
            yield (interface, stats)
Exemplo n.º 3
0
 def _lookup_vm(self, vm_name):
     vms = self._conn.Msvm_ComputerSystem(ElementName=vm_name)
     n = len(vms)
     if n == 0:
         raise inspector.InstanceNotFoundException(
             'VM %s not found on Hyper-V' % vm_name)
     elif n > 1:
         raise HyperVException('Duplicate VM name found: %s' % vm_name)
     else:
         return vms[0]
Exemplo n.º 4
0
 def _lookup_by_name(self, instance_name):
     vm_refs = self._call_xenapi("VM.get_by_name_label", instance_name)
     n = len(vm_refs)
     if n == 0:
         raise virt_inspector.InstanceNotFoundException(
             'VM %s not found in XenServer' % instance_name)
     elif n > 1:
         raise XenapiException('Multiple VM %s found in XenServer' %
                               instance_name)
     else:
         return vm_refs[0]
Exemplo n.º 5
0
 def inspect_memory_usage(self, instance, duration=None):
     vm_moid = self._ops.get_vm_moid(instance.id)
     if vm_moid is None:
         raise virt_inspector.InstanceNotFoundException(
             'VM %s not found in VMware Vsphere' % instance.id)
     mem_counter_id = self._ops.get_perf_counter_id(
         VC_AVERAGE_MEMORY_CONSUMED_CNTR)
     memory = self._ops.query_vm_aggregate_stats(vm_moid, mem_counter_id,
                                                 duration)
     # Stat provided from vSphere is in KB, converting it to MB.
     memory = memory / units.Ki
     return virt_inspector.MemoryUsageStats(usage=memory)
Exemplo n.º 6
0
    def inspect_cpu_util(self, instance, duration=None):
        vm_moid = self._ops.get_vm_moid(instance.id)
        if vm_moid is None:
            raise virt_inspector.InstanceNotFoundException(
                'VM %s not found in VMware Vsphere' % instance.id)
        cpu_util_counter_id = self._ops.get_perf_counter_id(
            VC_AVERAGE_CPU_CONSUMED_CNTR)
        cpu_util = self._ops.query_vm_aggregate_stats(
            vm_moid, cpu_util_counter_id, duration)

        # For this counter vSphere returns values scaled-up by 100, since the
        # corresponding API can't return decimals, but only longs.
        # For e.g. if the utilization is 12.34%, the value returned is 1234.
        # Hence, dividing by 100.
        cpu_util = cpu_util / 100
        return virt_inspector.CPUUtilStats(util=cpu_util)
Exemplo n.º 7
0
 def _lookup_by_name(self, instance_name):
     try:
         return self._get_connection().lookupByName(instance_name)
     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)s: "
                "[Error Code %(error_code)s] "
                "%(ex)s" % {'instance_name': instance_name,
                            'error_code': error_code,
                            'ex': ex})
         raise virt_inspector.InstanceNotFoundException(msg)
Exemplo n.º 8
0
 def _lookup_by_uuid(self, instance):
     instance_name = instance.name()
     try:
         return self._get_connection().lookupByUUIDString(instance.UUIDString())
     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)