package net.juniper.contrail.sandesh; import java.util.Map; import java.util.SortedMap; import com.vmware.vim25.VirtualMachineToolsRunningStatus; import net.juniper.contrail.contrail_vrouter_api.ContrailVRouterApi; import net.juniper.contrail.vcenter.MainDB; import net.juniper.contrail.vcenter.VCenterNotify; import net.juniper.contrail.vcenter.VRouterNotifier; import net.juniper.contrail.vcenter.VirtualMachineInfo; import net.juniper.contrail.vcenter.VirtualMachineInterfaceInfo; import net.juniper.contrail.vcenter.VirtualNetworkInfo; public class VRouterDetailResp { private VRouterInfo vrouter; public VRouterDetailResp(VRouterDetailReq req) { vrouter = new VRouterInfo(); //populate here the info Map<String, ContrailVRouterApi> vRouters = VRouterNotifier.getVrouterApiMap(); if (!vRouters.containsKey(req.ipAddr)) { return; } vrouter.setIpAddr(req.ipAddr); ContrailVRouterApi api = vRouters.get(req.ipAddr); vrouter.setState(api.getActive()); Map<String, String> host2VrouterMap = VCenterNotify.getVcenterDB().getEsxiToVRouterIpMap(); for (Map.Entry<String, String> map_entry : host2VrouterMap.entrySet()) { if (map_entry.getValue().equals(req.ipAddr)) { vrouter.setEsxiHost(map_entry.getKey()); } } SortedMap<String, VirtualNetworkInfo> vnInfoMap = MainDB.getVNs(); populateVNetworks(vrouter.getVNetworks(), vnInfoMap); } private void populateVNetworks(SandeshObjectList<VirtualNetworkSandesh> vNetworks, SortedMap<String, VirtualNetworkInfo> vnInfoMap) { if (vnInfoMap == null) { return; } for (Map.Entry<String, VirtualNetworkInfo> entry: vnInfoMap.entrySet()) { VirtualNetworkInfo vnInfo = entry.getValue(); VirtualNetworkSandesh vn = new VirtualNetworkSandesh(); populateVMIs(vn, vnInfo); if (vn.getVInterfaces().size() > 0) { vn.setName(vnInfo.getName()); vNetworks.add(vn); } } } private void populateVMIs(VirtualNetworkSandesh vn, VirtualNetworkInfo vnInfo) { SandeshObjectList<VirtualMachineInterfaceSandesh> vInterfaces = vn.getVInterfaces(); if (vInterfaces == null) { return; } SortedMap<String, VirtualMachineInterfaceInfo> map = vnInfo.getVmiInfo(); if (map == null) { return; } for (Map.Entry<String, VirtualMachineInterfaceInfo> entry : map.entrySet()) { VirtualMachineInterfaceInfo vmiInfo = entry.getValue(); VirtualMachineInfo vmInfo = vmiInfo.getVmInfo(); if (!vrouter.getIpAddr().trim().equals(vmInfo.getVrouterIpAddress().trim())) { continue; } VirtualNetworkInfo vnInfo1 = vmiInfo.getVnInfo(); VirtualMachineInterfaceSandesh vmi = new VirtualMachineInterfaceSandesh(); vmi.setMacAddress(vmiInfo.getMacAddress()); vmi.setNetwork(vnInfo1.getName()); vmi.setVirtualMachine(vmInfo.getDisplayName()); String ipAddress = vmiInfo.getIpAddress(); if (ipAddress == null && vnInfo.getExternalIpam() && vmInfo.getToolsRunningStatus().equals( VirtualMachineToolsRunningStatus.guestToolsNotRunning.toString())) { vmi.setIpAddress("unknown"); } else { vmi.setIpAddress(ipAddress); } vmi.setPoweredOn(vmInfo.isPoweredOnState()); vmi.setPortAdded(vmiInfo.getPortAdded()); vInterfaces.add(vmi); } } public void writeObject(StringBuilder s) { if (s == null) { // log error return; } s.append("<vRouterDetailResp type=\"sandesh\">"); vrouter.writeObject(s, DetailLevel.FULL, 1); s.append("</vRouterDetailResp>"); } }