Ejemplo n.º 1
0
    def stat(self):
        result = Counter()
        flavors = openstack.get_nova_flavors()
        id2flavor = {flavor.id: flavor for flavor in flavors}

        for tenant_id in Customer.active_tenants():
            servers = openstack.get_nova_servers(tenant_id=tenant_id)
            for server in servers:
                if not server.status == 'ACTIVE':
                    continue
                server_flavor_id = server.flavor['id']
                server_flavor = id2flavor.get(server_flavor_id)
                if server_flavor:
                    server_flavor_name = server_flavor.name
                    result['flavor.%s.vcpus' % server_flavor_name] += server_flavor.vcpus
                    result['flavor.%s.ram' % server_flavor_name] += server_flavor.ram
                else:
                    logbook.error("Server {} in tenant {} has unknown flavor: {}", server, tenant_id, server.flavor)

            # Check total resource usage for each tenant
            limits = openstack.get_nova_limits(tenant_id=tenant_id)
            for k, v in limits.items():
                if v > 0 and k in ['totalCoresUsed', 'totalRAMUsed']:
                    result[k] += v

        return result