package io.fathom.cloud.compute.api.os.resources; import io.fathom.cloud.CloudException; import io.fathom.cloud.compute.api.os.model.Hypervisor; import io.fathom.cloud.compute.api.os.model.HypervisorStatistics; import io.fathom.cloud.compute.api.os.model.Hypervisors; import io.fathom.cloud.compute.scheduler.InstanceScheduler; import io.fathom.cloud.compute.scheduler.SchedulerHost; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.Lists; import com.google.common.net.InetAddresses; import com.google.inject.persist.Transactional; @Path("/openstack/compute/{project}/os-hypervisors") @Transactional public class OsHypervisorsResource extends ComputeResourceBase { private static final Logger log = LoggerFactory.getLogger(OsHypervisorsResource.class); @Inject InstanceScheduler scheduler; @GET public Hypervisors listHypervisors() throws CloudException { checkDomainAdmin(); Hypervisors response = new Hypervisors(); response.hypervisors = Lists.newArrayList(); for (SchedulerHost host : scheduler.getAllHosts()) { response.hypervisors.add(toModel(host)); } return response; } @GET @Path("statistics") public HypervisorStatistics getHypervisorsStatistics() throws CloudException { checkDomainAdmin(); HypervisorStatistics response = new HypervisorStatistics(); Hypervisor stats = null; for (SchedulerHost host : scheduler.getAllHosts()) { if (stats == null) { stats = toModel(host); stats.count = 1L; } else { Hypervisor model = toModel(host); add(stats, model); } } if (stats == null) { stats = new Hypervisor(); stats.count = 0L; } response.hypervisor_statistics = stats; return response; } @GET @Path("detail") public Hypervisors listHypervisorsDetail() throws CloudException { checkDomainAdmin(); Hypervisors response = new Hypervisors(); response.hypervisors = Lists.newArrayList(); for (SchedulerHost host : scheduler.getAllHosts()) { response.hypervisors.add(toModel(host)); } return response; } private Hypervisor toModel(SchedulerHost host) { Hypervisor model = new Hypervisor(); model.id = host.getId(); model.hypervisor_hostname = InetAddresses.toAddrString(host.getIpAddress()); model.memory_mb = 0L; model.memory_mb_used = 0L; model.local_gb = 0L; model.local_gb_used = 0L; return model; } private void add(Hypervisor stats, Hypervisor model) { stats.count++; stats.memory_mb += model.memory_mb; stats.memory_mb_used += model.memory_mb_used; stats.local_gb += model.local_gb; stats.local_gb_used += model.local_gb_used; } }