Hostsystem 物理机
public List listHost(ServiceInstance si, String dcName, String clusterName,String name) throws Exception
{
List vcHosts = new ArrayList();
if (si != null)
{
Folder rootFolder = si.getRootFolder();
ManagedEntity[] hosts = null;
boolean ifDcNameEmpty = ( dcNamenull || “”.equals(dcName));
boolean ifClusterNameEmpty = ( clusterNamenull || “”.equals(clusterName));
if( ifDcNameEmpty && ifClusterNameEmpty){
hosts = new InventoryNavigator(rootFolder).searchManagedEntities(“HostSystem”);
}else if(ifClusterNameEmpty){
Datacenter dc = (Datacenter) new InventoryNavigator(rootFolder).searchManagedEntity(“Datacenter”, dcName);
hosts = new InventoryNavigator(dc).searchManagedEntities(“HostSystem”);
}else{
Datacenter dc = (Datacenter) new InventoryNavigator(rootFolder).searchManagedEntity(“Datacenter”, dcName);
ClusterComputeResource cluster = (ClusterComputeResource)new InventoryNavigator(dc).searchManagedEntity(“ClusterComputeResource”,clusterName);
hosts = new InventoryNavigator(cluster).searchManagedEntities(“HostSystem”);
}
if(hosts!=null){
for(int i=0;i<hosts.length;i++)
{
HostSystem host = (HostSystem)hosts[i];
if(null != name && !"".equals(name) && !host.getName().contains(name))
{
continue;
}
Datastore[] datastores=host.getDatastores();
long datastoreCapacity=0;
long datastoreFreeSpace=0;
if(null!=datastores) {
for(Datastore datastore:datastores) {
datastoreCapacity+=datastore.getSummary().getCapacity();
datastoreFreeSpace+=datastore.getSummary().getFreeSpace();
}
}
JSONObject object = new JSONObject();
HostHardwareInfo h=host.getHardware();
String cpuVersion =h.getCpuPkg()[0].getDescription();
//String hostVersion = host.getHostImageConfigManager().hostImageConfigGetProfile().getName();
String systemModel= h.getSystemInfo().getModel();
String systemProducter=h.getSystemInfo().getVendor();
String biosVersion=h.getBiosInfo().getBiosVersion();
long cpuhz=h.getCpuInfo().getHz()/1024/1024/1024;
object.put("cpuVersion", cpuVersion);
//object.put("hostVersion", hostVersion);
object.put("systemModel", systemModel);
object.put("systemProducter", systemProducter);
object.put("biosVersion", biosVersion);
object.put("cpuhz", cpuhz);
object.put("cpuCore", h.getCpuInfo().getNumCpuCores());
VcHost vchost = new VcHost();
vchost.setStorageCapacity(datastoreCapacity/1024/1024/1024);
vchost.setStorageAvaiable(datastoreFreeSpace/1024/1024/1024);
vchost.setName(host.getName());
ManagedEntity cluster =getTypeFromParentEntity(host,"ClusterComputeResource");
if(cluster != null){ // 防止生产环境数据异常,查不到集群报错
vchost.setClusterName(cluster.getName());
vchost.setClusterUuid(cluster.getMOR().get_value());
}
ManagedEntity datacenter =getTypeFromParentEntity(host,"Datacenter");
vchost.setDcName(datacenter.getName());
vchost.setDcUuid(datacenter.getMOR().get_value());
vchost.setStatus(host.getSummary().getOverallStatus().name()); //red(警示)、green(正常)、yellow(警告)、gray(未知)
HostHardwareSummary hardwareSummary =host.getSummary().getHardware();
vchost.setHypersivorUuid(hardwareSummary.getUuid());
vchost.setCpuCapacity((hardwareSummary.getCpuMhz()*hardwareSummary.getNumCpuCores()));
vchost.setCpuCore(hardwareSummary.getNumCpuCores());
vchost.setMemoryCapacity(hardwareSummary.getMemorySize()/1024/1024);
if(HostSystemConnectionState.connected.toString().equals(host.getRuntime().getConnectionState().name())){
HostListSummaryQuickStats quickStats=host.getSummary().getQuickStats();
vchost.setCpuAvaiable(vchost.getCpuCapacity()-quickStats.getOverallCpuUsage());
vchost.setCpuUsaged(String.valueOf(Math.round(quickStats.getOverallCpuUsage()*100/vchost.getCpuCapacity())));
vchost.setMemoryAvaiable(vchost.getMemoryCapacity()-quickStats.getOverallMemoryUsage().doubleValue());
vchost.setMemoryUsaged(String.valueOf(Math.round(quickStats.getOverallMemoryUsage()*100/vchost.getMemoryCapacity()))); //百分号后面数字
vchost.setUptime(Math.round(quickStats.getUptime() /3600)); //单位小时
}
vchost.setMetadata(object);
vcHosts.add(vchost);
}
}
}
log.info("count host:{}",vcHosts.size());
return vcHosts;
}
ManagedEntity getTypeFromParentEntity(ManagedEntity me, String targetType) {
try {
if(me.getParent() != null){
if (targetType.equals(me.getParent().getMOR().getType())) {
return me.getParent();
} else {
return getTypeFromParentEntity(me.getParent(), targetType);
}
}
} catch (Exception e) {
log.error( "getTypeFromParent", e);
}
return null;
}