package org.zstack.simulator; import org.springframework.beans.factory.annotation.Autowired; import org.zstack.compute.vm.VmTracer; import org.zstack.header.host.HostInventory; import org.zstack.header.host.HostPingTaskExtensionPoint; import org.zstack.header.host.HypervisorType; import org.zstack.header.simulator.SimulatorConstant; import org.zstack.header.vm.VmInstanceState; import org.zstack.utils.Utils; import org.zstack.utils.logging.CLogger; import java.util.HashMap; import java.util.Map; public class SimulatorVmSyncPingTask extends VmTracer implements HostPingTaskExtensionPoint { private static final CLogger logger = Utils.getLogger(SimulatorVmSyncPingTask.class); @Autowired private SimulatorConfig config; @Override public void executeTaskAlongWithPingTask(HostInventory inv) { logger.debug(String.format("SimulatorHost[uuid:%s] is tracing vm status", inv.getUuid())); Map<String, VmInstanceState> vms = new HashMap<String, VmInstanceState>(); Map<String, VmInstanceState> curr = config.getVmOnHost(inv.getUuid()); if (curr == null) { super.reportVmState(inv.getUuid(), vms); return; } for (Map.Entry<String, VmInstanceState> e : curr.entrySet()) { if (e.getValue() == VmInstanceState.Running || e.getValue() == VmInstanceState.Unknown) { vms.put(e.getKey(), e.getValue()); } } super.reportVmState(inv.getUuid(), vms); } @Override public HypervisorType getHypervisorType() { return HypervisorType.valueOf(SimulatorConstant.SIMULATOR_HYPERVISOR_TYPE); } }