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