예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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