def get_stats(self): """Retrieves stats from nova""" keystone = self.get_keystone() tenant_list = keystone.tenants.list() data = { self.prefix: { 'cluster': { 'config': {} }, } } client = NovaClient('2', self.username, self.password, self.tenant, self.auth_url) for tenant in tenant_list: # FIX: nasty but works for now (tenant.id not being taken below :() client.tenant_id = tenant.id data[self.prefix]["tenant-%s" % tenant.name] = { 'limits': {}, 'quotas': {} } data_tenant = data[self.prefix]["tenant-%s" % tenant.name] # Get absolute limits for tenant limits = client.limits.get(tenant_id=tenant.id).absolute for limit in limits: if 'ram' in limit.name.lower(): limit.value = limit.value * 1024.0 * 1024.0 data_tenant['limits'][limit.name] = limit.value # Quotas for tenant quotas = client.quotas.get(tenant.id) for item in ('cores', 'fixed_ips', 'floating_ips', 'instances', 'key_pairs', 'ram', 'security_groups'): if item == 'ram': setattr(quotas, item, getattr(quotas, item) * 1024 * 1024) data_tenant['quotas'][item] = getattr(quotas, item) # Cluster allocation / reserved values for item in ('AllocationRatioCores', 'AllocationRatioRam', 'ReservedNodeCores', 'ReservedNodeRamMB', 'ReservedCores', 'ReservedRamMB'): data[self.prefix]['cluster']['config'][item] = getattr(self, item) # Hypervisor information hypervisors = client.hypervisors.list() for hypervisor in hypervisors: name = "hypervisor-%s" % hypervisor.hypervisor_hostname data[self.prefix][name] = {} for item in ('current_workload', 'free_disk_gb', 'free_ram_mb', 'hypervisor_version', 'memory_mb', 'memory_mb_used', 'running_vms', 'vcpus', 'vcpus_used'): data[self.prefix][name][item] = getattr(hypervisor, item) data[self.prefix][name]['memory_mb_overcommit'] = \ data[self.prefix][name]['memory_mb'] * data[self.prefix]['cluster']['config']['AllocationRatioRam'] data[self.prefix][name]['memory_mb_overcommit_withreserve'] = \ data[self.prefix][name]['memory_mb_overcommit'] - data[self.prefix]['cluster']['config']['ReservedNodeRamMB'] data[self.prefix][name]['vcpus_overcommit'] = \ data[self.prefix][name]['vcpus'] * data[self.prefix]['cluster']['config']['AllocationRatioCores'] data[self.prefix][name]['vcpus_overcommit_withreserve'] = \ data[self.prefix][name]['vcpus_overcommit'] - data[self.prefix]['cluster']['config']['ReservedNodeCores'] return data
def get_stats(self): """Retrieves stats from nova""" keystone = self.get_keystone() tenant_list = keystone.tenants.list() data = { self.prefix: { 'cluster': { 'config': {} }, } } client = NovaClient('2', self.username, self.password, self.tenant, self.auth_url) for tenant in tenant_list: # FIX: nasty but works for now (tenant.id not being taken below :() client.tenant_id = tenant.id data[self.prefix]["tenant-%s" % tenant.name] = { 'limits': {}, 'quotas': {} } data_tenant = data[self.prefix]["tenant-%s" % tenant.name] # Get absolute limits for tenant limits = client.limits.get(tenant_id=tenant.id).absolute for limit in limits: if 'ram' in limit.name.lower(): limit.value = limit.value * 1024.0 * 1024.0 data_tenant['limits'][limit.name] = limit.value # Quotas for tenant quotas = client.quotas.get(tenant.id) for item in ('cores', 'fixed_ips', 'floating_ips', 'instances', 'key_pairs', 'ram', 'security_groups'): if item == 'ram': setattr(quotas, item, getattr(quotas, item) * 1024 * 1024) data_tenant['quotas'][item] = getattr(quotas, item) # Cluster allocation / reserved values for item in ('AllocationRatioCores', 'AllocationRatioRam', 'ReservedNodeCores', 'ReservedNodeRamMB', 'ReservedCores', 'ReservedRamMB'): data[self.prefix]['cluster']['config'][item] = getattr(self, item) # Hypervisor information hypervisors = client.hypervisors.list() for hypervisor in hypervisors: name = "hypervisor-%s" % hypervisor.hypervisor_hostname data[self.prefix][name] = {} for item in ('current_workload', 'free_disk_gb', 'free_ram_mb', 'hypervisor_version', 'memory_mb', 'memory_mb_used', 'running_vms', 'vcpus', 'vcpus_used'): data[self.prefix][name][item] = getattr(hypervisor, item) data[self.prefix][name]['memory_mb_overcommit'] = \ data[self.prefix][name]['memory_mb'] * data[self.prefix]['cluster']['config']['AllocationRatioRam'] data[self.prefix][name]['memory_mb_overcommit_withreserve'] = \ data[self.prefix][name]['memory_mb_overcommit'] - data[self.prefix]['cluster']['config']['ReservedNodeRamMB'] data[self.prefix][name]['vcpus_overcommit'] = \ data[self.prefix][name]['vcpus'] * data[self.prefix]['cluster']['config']['AllocationRatioCores'] data[self.prefix][name]['vcpus_overcommit_withreserve'] = \ data[self.prefix][name]['vcpus_overcommit'] - data[self.prefix]['cluster']['config']['ReservedNodeCores'] return data
def get_stats(self): """Retrieves stats from nova""" keystone = self.get_keystone() data = { self.prefix: { 'cluster': { 'config': {} }, } } if getattr(self, 'region') is None: client = NovaClient('2', self.username, self.password, self.tenant, self.auth_url) else: client = NovaClient('2', self.username, self.password, self.tenant, self.auth_url, region_name=self.region) if getattr(self, 'notenants') == False: tenant_list = keystone.tenants.list() for tenant in tenant_list: # FIX: nasty but works for now (tenant.id not being taken below :() client.tenant_id = tenant.id data[self.prefix]["tenant-%s" % tenant.name] = { 'limits': {}, 'quotas': {} } data_tenant = data[self.prefix]["tenant-%s" % tenant.name] # Get absolute limits for tenant limits = client.limits.get(tenant_id=tenant.id).absolute for limit in limits: if 'ram' in limit.name.lower(): limit.value = limit.value * 1024.0 * 1024.0 data_tenant['limits'][limit.name] = limit.value # Quotas for tenant quotas = client.quotas.get(tenant.id) for item in ('cores', 'fixed_ips', 'floating_ips', 'instances', 'key_pairs', 'ram', 'security_groups'): if item == 'ram': setattr(quotas, item, getattr(quotas, item) * 1024 * 1024) data_tenant['quotas'][item] = getattr(quotas, item) # Cluster allocation / reserved values for item in ('AllocationRatioCores', 'AllocationRatioRam', 'ReservedNodeCores', 'ReservedNodeRamMB', 'ReservedCores', 'ReservedRamMB'): data[self.prefix]['cluster']['config'][item] = getattr(self, item) # Hypervisor information hypervisors = client.hypervisors.list() for hypervisor in hypervisors: name = "hypervisor-%s" % hypervisor.hypervisor_hostname data[self.prefix][name] = {} for item in ('current_workload', 'free_disk_gb', 'free_ram_mb', 'hypervisor_version', 'memory_mb', 'memory_mb_used', 'running_vms', 'vcpus', 'vcpus_used'): data[self.prefix][name][item] = getattr(hypervisor, item) data[self.prefix][name]['memory_mb_overcommit'] = \ data[self.prefix][name]['memory_mb'] * data[self.prefix]['cluster']['config']['AllocationRatioRam'] data[self.prefix][name]['memory_mb_overcommit_withreserve'] = \ data[self.prefix][name]['memory_mb_overcommit'] - data[self.prefix]['cluster']['config']['ReservedNodeRamMB'] data[self.prefix][name]['vcpus_overcommit'] = \ data[self.prefix][name]['vcpus'] * data[self.prefix]['cluster']['config']['AllocationRatioCores'] data[self.prefix][name]['vcpus_overcommit_withreserve'] = \ data[self.prefix][name]['vcpus_overcommit'] - data[self.prefix]['cluster']['config']['ReservedNodeCores'] # NOTE(flwang): Below data will do the similar thing as above, but only # for windows host. aggregates = client.aggregates.list() for aggregate in aggregates: if aggregate.metadata.get('os_distro', None) == 'windows': for host in aggregate.hosts: for hypervisor in hypervisors: if hypervisor.hypervisor_hostname.startswith(host): name = "windows-hypervisor-%s" % hypervisor.hypervisor_hostname data[self.prefix][name] = {} for item in ('current_workload', 'free_disk_gb', 'free_ram_mb', 'hypervisor_version', 'memory_mb', 'memory_mb_used', 'running_vms', 'vcpus', 'vcpus_used'): data[self.prefix][name][item] = getattr( hypervisor, item) data[self.prefix][name]['memory_mb_overcommit'] = \ data[self.prefix][name]['memory_mb'] * data[self.prefix]['cluster']['config']['AllocationRatioRam'] data[self.prefix][name]['memory_mb_overcommit_withreserve'] = \ data[self.prefix][name]['memory_mb_overcommit'] - data[self.prefix]['cluster']['config']['ReservedNodeRamMB'] data[self.prefix][name]['vcpus_overcommit'] = \ data[self.prefix][name]['vcpus'] * data[self.prefix]['cluster']['config']['AllocationRatioCores'] data[self.prefix][name]['vcpus_overcommit_withreserve'] = \ data[self.prefix][name]['vcpus_overcommit'] - data[self.prefix]['cluster']['config']['ReservedNodeCores'] return data