使用VMware VSphere WebService SDK进行开发 (三)——获取主机(HostSystem)的基本信息
2015-11-11 15:27
627 查看
通过前面两篇文章的了解,详细应该很快掌握的code路数,这里首先罗列如何获取主机(接下去也会成为HostSystem)的对象。
private static TraversalSpec getHostSystemTraversalSpec()
{
SelectionSpec ss = new SelectionSpec();
ss.setName("VisitFolders");
TraversalSpec computeResourceToHostSystem = new TraversalSpec();
computeResourceToHostSystem.setName("computeResourceToHostSystem");
computeResourceToHostSystem.setType("ComputeResource");
computeResourceToHostSystem.setPath("host");
computeResourceToHostSystem.setSkip(false);
computeResourceToHostSystem.getSelectSet().add(ss);
TraversalSpec hostFolderToComputeResource = new TraversalSpec();
hostFolderToComputeResource.setName("hostFolderToComputeResource");
hostFolderToComputeResource.setType("Folder");
hostFolderToComputeResource.setPath("childEntity");
hostFolderToComputeResource.setSkip(false);
hostFolderToComputeResource.getSelectSet().add(ss);
TraversalSpec dataCenterToHostFolder = new TraversalSpec();
dataCenterToHostFolder.setName("DataCenterToHostFolder");
dataCenterToHostFolder.setType("Datacenter");
dataCenterToHostFolder.setPath("hostFolder");
dataCenterToHostFolder.setSkip(false);
dataCenterToHostFolder.getSelectSet().add(ss);
TraversalSpec traversalSpec = new TraversalSpec();
traversalSpec.setName("VisitFolders");
traversalSpec.setType("Folder");
traversalSpec.setPath("childEntity");
traversalSpec.setSkip(false);
List<SelectionSpec> sSpecArr = new ArrayList<SelectionSpec>();
sSpecArr.add(ss);
sSpecArr.add(dataCenterToHostFolder);
sSpecArr.add(hostFolderToComputeResource);
sSpecArr.add(computeResourceToHostSystem);
traversalSpec.getSelectSet().addAll(sSpecArr);
return traversalSpec;
}
接下去展示获取HostSystem的性能信息的方法,和VirtualMachine的类似。
private static List<List<Long>> getHostData(String hostName, String nameInfo, String groupInfo) throws RuntimeFaultFaultMsg
{
List<List<Long>> list = new ArrayList<List<Long>>();
ManagedObjectReference vmmor = getHostByHostName(hostName);
if (vmmor != null)
{
List<PerfCounterInfo> cInfo = getPerfCounters();
List<PerfCounterInfo> vmCpuCounters = new ArrayList<PerfCounterInfo>();
for (int i = 0; i < cInfo.size(); ++i)
{
vmCpuCounters.add(cInfo.get(i));
}
int i = 0;
Map<Integer, PerfCounterInfo> counters = new HashMap<Integer, PerfCounterInfo>();
for (Iterator<PerfCounterInfo> it = vmCpuCounters.iterator(); it.hasNext();)
{
PerfCounterInfo pcInfo = (PerfCounterInfo) it.next();
counters.put(new Integer(pcInfo.getKey()), pcInfo);
}
List<PerfMetricId> listpermeid = vimPort.queryAvailablePerfMetric(perfManager, vmmor, null, null, new Integer(20));
ArrayList<PerfMetricId> mMetrics = new ArrayList<PerfMetricId>();
if (listpermeid != null)
{
for (int index = 0; index < listpermeid.size(); ++index)
{
if (counters.containsKey(new Integer(listpermeid.get(index).getCounterId())))
{
mMetrics.add(listpermeid.get(index));
}
}
}
PerfQuerySpec qSpec = new PerfQuerySpec();
qSpec.setEntity(vmmor);
qSpec.setMaxSample(new Integer(10));
qSpec.getMetricId().addAll(mMetrics);
qSpec.setIntervalId(new Integer(20));
List<PerfQuerySpec> qSpecs = new ArrayList<PerfQuerySpec>();
qSpecs.add(qSpec);
List<PerfEntityMetricBase> listpemb = vimPort.queryPerf(perfManager, qSpecs);
List<PerfEntityMetricBase> pValues = listpemb;
// System.out.println("pValues.size() = "+pValues.size());
for (i = 0; i < pValues.size(); i++)
{
List<PerfMetricSeries> listpems = ((PerfEntityMetric) pValues.get(i)).getValue();
// System.out.println("listpems.size() = "+listpems.size());
for (int vi = 0; vi < listpems.size(); ++vi)
{
String printInf = "";
PerfCounterInfo pci = (PerfCounterInfo) counters.get(new Integer(listpems.get(vi).getId().getCounterId()));
if (pci != null)
{
if (pci.getNameInfo().getKey().equalsIgnoreCase(nameInfo) && pci.getGroupInfo().getKey().equalsIgnoreCase(groupInfo))
{
printInf += vi + ":" + pci.getNameInfo().getSummary() + ":" + pci.getNameInfo().getKey() + ":" + pci.getNameInfo().getLabel() + ":"
+ pci.getGroupInfo().getKey() + ":" + pci.getGroupInfo().getLabel() + ":" + pci.getGroupInfo().getSummary() + " ";
if (listpems.get(vi) instanceof PerfMetricIntSeries)
{
PerfMetricIntSeries val = (PerfMetricIntSeries) listpems.get(vi);
List<Long> lislon = val.getValue();
for (Long k : lislon)
{
printInf += k + " ";
}
list.add(lislon);
}
printInf += " " + pci.getUnitInfo().getKey() + " " + pci.getUnitInfo().getLabel() + " " + pci.getUnitInfo().getSummary();
System.out.println(printInf);
}
}
}
}
}
return list;
} 以获取主机cpu使用情况进行展示:
public static double getHostCpuUsageByHostName(String hostName) throws RuntimeFaultFaultMsg
{
double ans = 0.0;
List<List<Long>> list = getHostData(hostName, "usage", "cpu");
long maxInner = 0;
int times = 0;
for (List<Long> listOuter : list)
{
long tempInner = 0;
for (long inner : listOuter)
{
tempInner += inner;
}
if (tempInner > maxInner)
{
maxInner = tempInner;
times = listOuter.size();
}
}
if (times != 0)
{
ans = (double) maxInner / times;
}
ans = ans / 100;
return ans;
}
与VirtualMachine相同,Hostsystem也有些信息要通过另一种方式遍历。
譬如获取主机cpu的个数:
<span style="white-space:pre"> </span>private static String getHostPropertyByHostName(String property, String hostName) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg
{
String ans = null;
RetrieveResult props = getRetrieveResultObjectWithProperty("HostSystem", property);
if (props != null)
{
Boolean flag = false;
if (property.compareToIgnoreCase("name") < 0)
{
for (ObjectContent oc : props.getObjects())
{
if (flag == true)
{
break;
}
String path = null;
List<DynamicProperty> dps = oc.getPropSet();
if (dps != null)
{
for (DynamicProperty dp : dps)
{
path = dp.getName();
if (path.equalsIgnoreCase(property))
{
String val = String.valueOf(dp.getVal());
ans = val;
}
if (path.equalsIgnoreCase("name"))
{
String value = (String) dp.getVal();
if (value.equals(hostName))
{
flag = true;
break;
}
}
}
}
}
}
else
{
for (ObjectContent oc : props.getObjects())
{
if (flag == true)
{
break;
}
String path = null;
List<DynamicProperty> dps = oc.getPropSet();
if (dps != null)
{
for (DynamicProperty dp : dps)
{
path = dp.getName();
if (path.equalsIgnoreCase("name"))
{
String value = (String) dp.getVal();
if (value.equals(hostName))
{
flag = true;
}
}
if (path.equalsIgnoreCase(property))
{
String val = String.valueOf(dp.getVal());
if (flag == true)
{
ans = val;
break;
}
}
}
}
}
}
}
return ans;
}
这里同样采用获取主机名称的方法来结束:
public static List<String> getHostNames()
{
List<String> list = new ArrayList<String>();
ManagedObjectReference rootFolder = serviceContent.getRootFolder();
try
{
TraversalSpec tSpec = getHostSystemTraversalSpec();
PropertySpec propertySpec = new PropertySpec();
propertySpec.setAll(Boolean.FALSE);
propertySpec.getPathSet().add("name");
propertySpec.setType("HostSystem");
ObjectSpec objectSpec = new ObjectSpec();
objectSpec.setObj(rootFolder);
objectSpec.setSkip(Boolean.TRUE);
objectSpec.getSelectSet().add(tSpec);
PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec();
propertyFilterSpec.getPropSet().add(propertySpec);
propertyFilterSpec.getObjectSet().add(objectSpec);
List<PropertyFilterSpec> listpfs = new ArrayList<PropertyFilterSpec>(1);
listpfs.add(propertyFilterSpec);
List<ObjectContent> listobjcont = retrievePropertiesAllObjects(listpfs);
if (listobjcont != null)
{
for (ObjectContent oc : listobjcont)
{
String hostnm = null;
List<DynamicProperty> listDynamicProps = oc.getPropSet();
DynamicProperty[] dps = listDynamicProps.toArray(new DynamicProperty[listDynamicProps.size()]);
if (dps != null)
{
for (DynamicProperty dp : dps)
{
hostnm = (String) dp.getVal();
if (hostnm != null)
{
list.add(hostnm);
}
}
}
}
}
else
{
System.out.println("getHostNames: Object Content is null ");
}
}
catch (SOAPFaultException sfe)
{
printSoapFaultException(sfe);
}
catch (Exception e)
{
e.printStackTrace();
}
return list;
}
private static TraversalSpec getHostSystemTraversalSpec()
{
SelectionSpec ss = new SelectionSpec();
ss.setName("VisitFolders");
TraversalSpec computeResourceToHostSystem = new TraversalSpec();
computeResourceToHostSystem.setName("computeResourceToHostSystem");
computeResourceToHostSystem.setType("ComputeResource");
computeResourceToHostSystem.setPath("host");
computeResourceToHostSystem.setSkip(false);
computeResourceToHostSystem.getSelectSet().add(ss);
TraversalSpec hostFolderToComputeResource = new TraversalSpec();
hostFolderToComputeResource.setName("hostFolderToComputeResource");
hostFolderToComputeResource.setType("Folder");
hostFolderToComputeResource.setPath("childEntity");
hostFolderToComputeResource.setSkip(false);
hostFolderToComputeResource.getSelectSet().add(ss);
TraversalSpec dataCenterToHostFolder = new TraversalSpec();
dataCenterToHostFolder.setName("DataCenterToHostFolder");
dataCenterToHostFolder.setType("Datacenter");
dataCenterToHostFolder.setPath("hostFolder");
dataCenterToHostFolder.setSkip(false);
dataCenterToHostFolder.getSelectSet().add(ss);
TraversalSpec traversalSpec = new TraversalSpec();
traversalSpec.setName("VisitFolders");
traversalSpec.setType("Folder");
traversalSpec.setPath("childEntity");
traversalSpec.setSkip(false);
List<SelectionSpec> sSpecArr = new ArrayList<SelectionSpec>();
sSpecArr.add(ss);
sSpecArr.add(dataCenterToHostFolder);
sSpecArr.add(hostFolderToComputeResource);
sSpecArr.add(computeResourceToHostSystem);
traversalSpec.getSelectSet().addAll(sSpecArr);
return traversalSpec;
}
private static ManagedObjectReference getHostByHostName(String hostName) { ManagedObjectReference retVal = null; ManagedObjectReference rootFolder = serviceContent.getRootFolder(); try { TraversalSpec tSpec = getHostSystemTraversalSpec(); PropertySpec propertySpec = new PropertySpec(); propertySpec.setAll(Boolean.FALSE); propertySpec.getPathSet().add("name"); propertySpec.setType("HostSystem"); ObjectSpec objectSpec = new ObjectSpec(); objectSpec.setObj(rootFolder); objectSpec.setSkip(Boolean.TRUE); objectSpec.getSelectSet().add(tSpec); PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec(); propertyFilterSpec.getPropSet().add(propertySpec); propertyFilterSpec.getObjectSet().add(objectSpec); List<PropertyFilterSpec> listpfs = new ArrayList<PropertyFilterSpec>(1); listpfs.add(propertyFilterSpec); List<ObjectContent> listobjcont = retrievePropertiesAllObjects(listpfs); if (listobjcont != null) { for (ObjectContent oc : listobjcont) { ManagedObjectReference mr = oc.getObj(); String hostnm = null; List<DynamicProperty> listDynamicProps = oc.getPropSet(); DynamicProperty[] dps = listDynamicProps.toArray(new DynamicProperty[listDynamicProps.size()]); if (dps != null) { for (DynamicProperty dp : dps) { hostnm = (String) dp.getVal(); } } if (hostnm != null && hostnm.equals(hostName)) { retVal = mr; break; } } } else { System.out.println("The Object Content is Null"); } } catch (SOAPFaultException sfe) { printSoapFaultException(sfe); } catch (Exception e) { e.printStackTrace(); } return retVal; }
接下去展示获取HostSystem的性能信息的方法,和VirtualMachine的类似。
private static List<List<Long>> getHostData(String hostName, String nameInfo, String groupInfo) throws RuntimeFaultFaultMsg
{
List<List<Long>> list = new ArrayList<List<Long>>();
ManagedObjectReference vmmor = getHostByHostName(hostName);
if (vmmor != null)
{
List<PerfCounterInfo> cInfo = getPerfCounters();
List<PerfCounterInfo> vmCpuCounters = new ArrayList<PerfCounterInfo>();
for (int i = 0; i < cInfo.size(); ++i)
{
vmCpuCounters.add(cInfo.get(i));
}
int i = 0;
Map<Integer, PerfCounterInfo> counters = new HashMap<Integer, PerfCounterInfo>();
for (Iterator<PerfCounterInfo> it = vmCpuCounters.iterator(); it.hasNext();)
{
PerfCounterInfo pcInfo = (PerfCounterInfo) it.next();
counters.put(new Integer(pcInfo.getKey()), pcInfo);
}
List<PerfMetricId> listpermeid = vimPort.queryAvailablePerfMetric(perfManager, vmmor, null, null, new Integer(20));
ArrayList<PerfMetricId> mMetrics = new ArrayList<PerfMetricId>();
if (listpermeid != null)
{
for (int index = 0; index < listpermeid.size(); ++index)
{
if (counters.containsKey(new Integer(listpermeid.get(index).getCounterId())))
{
mMetrics.add(listpermeid.get(index));
}
}
}
PerfQuerySpec qSpec = new PerfQuerySpec();
qSpec.setEntity(vmmor);
qSpec.setMaxSample(new Integer(10));
qSpec.getMetricId().addAll(mMetrics);
qSpec.setIntervalId(new Integer(20));
List<PerfQuerySpec> qSpecs = new ArrayList<PerfQuerySpec>();
qSpecs.add(qSpec);
List<PerfEntityMetricBase> listpemb = vimPort.queryPerf(perfManager, qSpecs);
List<PerfEntityMetricBase> pValues = listpemb;
// System.out.println("pValues.size() = "+pValues.size());
for (i = 0; i < pValues.size(); i++)
{
List<PerfMetricSeries> listpems = ((PerfEntityMetric) pValues.get(i)).getValue();
// System.out.println("listpems.size() = "+listpems.size());
for (int vi = 0; vi < listpems.size(); ++vi)
{
String printInf = "";
PerfCounterInfo pci = (PerfCounterInfo) counters.get(new Integer(listpems.get(vi).getId().getCounterId()));
if (pci != null)
{
if (pci.getNameInfo().getKey().equalsIgnoreCase(nameInfo) && pci.getGroupInfo().getKey().equalsIgnoreCase(groupInfo))
{
printInf += vi + ":" + pci.getNameInfo().getSummary() + ":" + pci.getNameInfo().getKey() + ":" + pci.getNameInfo().getLabel() + ":"
+ pci.getGroupInfo().getKey() + ":" + pci.getGroupInfo().getLabel() + ":" + pci.getGroupInfo().getSummary() + " ";
if (listpems.get(vi) instanceof PerfMetricIntSeries)
{
PerfMetricIntSeries val = (PerfMetricIntSeries) listpems.get(vi);
List<Long> lislon = val.getValue();
for (Long k : lislon)
{
printInf += k + " ";
}
list.add(lislon);
}
printInf += " " + pci.getUnitInfo().getKey() + " " + pci.getUnitInfo().getLabel() + " " + pci.getUnitInfo().getSummary();
System.out.println(printInf);
}
}
}
}
}
return list;
} 以获取主机cpu使用情况进行展示:
public static double getHostCpuUsageByHostName(String hostName) throws RuntimeFaultFaultMsg
{
double ans = 0.0;
List<List<Long>> list = getHostData(hostName, "usage", "cpu");
long maxInner = 0;
int times = 0;
for (List<Long> listOuter : list)
{
long tempInner = 0;
for (long inner : listOuter)
{
tempInner += inner;
}
if (tempInner > maxInner)
{
maxInner = tempInner;
times = listOuter.size();
}
}
if (times != 0)
{
ans = (double) maxInner / times;
}
ans = ans / 100;
return ans;
}
与VirtualMachine相同,Hostsystem也有些信息要通过另一种方式遍历。
譬如获取主机cpu的个数:
<span style="white-space:pre"> </span>private static String getHostPropertyByHostName(String property, String hostName) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg
{
String ans = null;
RetrieveResult props = getRetrieveResultObjectWithProperty("HostSystem", property);
if (props != null)
{
Boolean flag = false;
if (property.compareToIgnoreCase("name") < 0)
{
for (ObjectContent oc : props.getObjects())
{
if (flag == true)
{
break;
}
String path = null;
List<DynamicProperty> dps = oc.getPropSet();
if (dps != null)
{
for (DynamicProperty dp : dps)
{
path = dp.getName();
if (path.equalsIgnoreCase(property))
{
String val = String.valueOf(dp.getVal());
ans = val;
}
if (path.equalsIgnoreCase("name"))
{
String value = (String) dp.getVal();
if (value.equals(hostName))
{
flag = true;
break;
}
}
}
}
}
}
else
{
for (ObjectContent oc : props.getObjects())
{
if (flag == true)
{
break;
}
String path = null;
List<DynamicProperty> dps = oc.getPropSet();
if (dps != null)
{
for (DynamicProperty dp : dps)
{
path = dp.getName();
if (path.equalsIgnoreCase("name"))
{
String value = (String) dp.getVal();
if (value.equals(hostName))
{
flag = true;
}
}
if (path.equalsIgnoreCase(property))
{
String val = String.valueOf(dp.getVal());
if (flag == true)
{
ans = val;
break;
}
}
}
}
}
}
}
return ans;
}
public static double getHostCpuUsageByHostName(String hostName) throws RuntimeFaultFaultMsg { double ans = 0.0; List<List<Long>> list = getHostData(hostName, "usage", "cpu"); long maxInner = 0; int times = 0; for (List<Long> listOuter : list) { long tempInner = 0; for (long inner : listOuter) { tempInner += inner; } if (tempInner > maxInner) { maxInner = tempInner; times = listOuter.size(); } } if (times != 0) { ans = (double) maxInner / times; } ans = ans / 100; return ans; }这里不做过多的说明,相信读者如果真的想要迫切了解这些内容,肯定会自己研究,本人罗列的代码都是亲身试用到项目中的,保证能够运行。希望对各位有帮助。
这里同样采用获取主机名称的方法来结束:
public static List<String> getHostNames()
{
List<String> list = new ArrayList<String>();
ManagedObjectReference rootFolder = serviceContent.getRootFolder();
try
{
TraversalSpec tSpec = getHostSystemTraversalSpec();
PropertySpec propertySpec = new PropertySpec();
propertySpec.setAll(Boolean.FALSE);
propertySpec.getPathSet().add("name");
propertySpec.setType("HostSystem");
ObjectSpec objectSpec = new ObjectSpec();
objectSpec.setObj(rootFolder);
objectSpec.setSkip(Boolean.TRUE);
objectSpec.getSelectSet().add(tSpec);
PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec();
propertyFilterSpec.getPropSet().add(propertySpec);
propertyFilterSpec.getObjectSet().add(objectSpec);
List<PropertyFilterSpec> listpfs = new ArrayList<PropertyFilterSpec>(1);
listpfs.add(propertyFilterSpec);
List<ObjectContent> listobjcont = retrievePropertiesAllObjects(listpfs);
if (listobjcont != null)
{
for (ObjectContent oc : listobjcont)
{
String hostnm = null;
List<DynamicProperty> listDynamicProps = oc.getPropSet();
DynamicProperty[] dps = listDynamicProps.toArray(new DynamicProperty[listDynamicProps.size()]);
if (dps != null)
{
for (DynamicProperty dp : dps)
{
hostnm = (String) dp.getVal();
if (hostnm != null)
{
list.add(hostnm);
}
}
}
}
}
else
{
System.out.println("getHostNames: Object Content is null ");
}
}
catch (SOAPFaultException sfe)
{
printSoapFaultException(sfe);
}
catch (Exception e)
{
e.printStackTrace();
}
return list;
}
相关文章推荐
- Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
- ARM内核和架构都是什么意思,内核和架构的关系是什么?
- 使用VMware VSphere WebService SDK进行开发 (三)——获取主机(HostSystem)的基本信息
- 向datagrid的cell中添加多个dijit
- 很多人想要的Jquery 加载Loading效果,可以加到自己的项目中,结合Ajax使用
- Rails -- empty、nil、blank三者之间的区别
- 研究ArcGis心得
- 桌面图标文件不能拖动的解决方法
- php建立方法
- 关于C#的占位符
- Redis其他相关命令
- 系统被入侵或收到漏洞报告才去事后补救的方式已然过时
- C++设计模式[十]享元模式
- Spark RCFile的那些“坑”
- 独立开放者入行之前应该知道的8件事
- MySQL 多主多活 Galera 集群部署使用
- 基于HIVE数据库出报表的后台相关工具介绍
- HDU 3486 Interviewe
- 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
- SSL/TLS 加密新纪元 - Let's Encrypt