关键词搜索

源码搜索 ×
×

使用VMware VSphere WebService SDK进行开发 (六)——检测告警信息

发布2015-11-11浏览7670次

详情内容

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。

欢迎跳转到本文的原文链接:https://honeypps.com/backend/vmware-vsphere-webservice-sdk-warn-info/

 

获取告警信息相对而言比较简单点,这里先陈述告警信息的pojo类,作为存储告警信息的源头(省略getter和setter方法):

 

  1. public class AlarmItem
  2. {
  3. //对象
  4. private String ObjectName;
  5. //状态
  6. private ManagedEntityStatus overallStatus;
  7. //名称
  8. private String alarmName;
  9. //触发时间
  10. private Date time;
  11. //确认时间
  12. private Date acknowledgedTime;
  13. //确认者
  14. private String acknowledgedByUser;
  15. //是否被确认
  16. private Boolean acknowledged;
  17. }

 

以获取主机告警信息为例:

 

  1. public static List<AlarmItem> getHostAlarms(String hostName) throws Exception
  2. {
  3. List<AlarmItem> ansList = null;
  4. ManagedObjectReference hostmor = getHostByHostName(hostName);
  5. ansList = getAlarms(hostmor);
  6. return ansList;
  7. }

这里先根据主机名称获取主机的对象(HostSystem),相关代码可以参考前面的相关文章。

 

接下去就是获取告警的方法getAlarms(ManagedObjectReference mor):

 

  1. private static List<AlarmItem> getAlarms(ManagedObjectReference mor) throws Exception
  2. {
  3. List<AlarmItem> ansList = new ArrayList<AlarmItem>();
  4. List<AlarmState> list = vimPort.getAlarmState(alarmManager, mor);
  5. for(AlarmState alarmState : list)
  6. {
  7. if(alarmState.getOverallStatus().toString().equals("YELLOW") || alarmState.getOverallStatus().toString().equals("RED"))
  8. {
  9. AlarmItem alarmItem = new AlarmItem();
  10. ManagedObjectReference alarm = alarmState.getAlarm();
  11. if(alarm!=null)
  12. {
  13. PropertyFilterSpec alarmFilterSpec = createAlarmFilterSpec(alarm);
  14. ArrayList<PropertyFilterSpec> listpfs = new ArrayList<PropertyFilterSpec>();
  15. listpfs.add(alarmFilterSpec);
  16. List<ObjectContent> listobjcont = retrievePropertiesAllObjects(listpfs);
  17. if(listobjcont != null)
  18. {
  19. ObjectContent oc = (ObjectContent) listobjcont.get(0);
  20. AlarmInfo alarmInfo = (AlarmInfo) oc.getPropSet().get(0).getVal();
  21. alarmItem.setAlarmName(alarmInfo.getName());
  22. }
  23. }
  24. alarmItem.setAcknowledged(alarmState.isAcknowledged());
  25. alarmItem.setAcknowledgedByUser(alarmState.getAcknowledgedByUser());
  26. alarmItem.setAcknowledgedTime(DateConvert.convertToDate(alarmState.getAcknowledgedTime()));
  27. alarmItem.setOverallStatus(alarmState.getOverallStatus());
  28. alarmItem.setTime(DateConvert.convertToDate(alarmState.getTime()));
  29. alarmItem.setObjectName(getObjectName(alarmState.getEntity()));
  30. ansList.add(alarmItem);
  31. }
  32. }
  33. return ansList;
  34. }
  1. private static PropertyFilterSpec createAlarmFilterSpec(ManagedObjectReference eventHistoryCollectorRef)
  2. {
  3. PropertySpec propSpec = new PropertySpec();
  4. propSpec.setAll(new Boolean(false));
  5. propSpec.getPathSet().add("info");
  6. propSpec.setType(eventHistoryCollectorRef.getType());
  7. ObjectSpec objSpec = new ObjectSpec();
  8. objSpec.setObj(eventHistoryCollectorRef);
  9. objSpec.setSkip(new Boolean(false));
  10. PropertyFilterSpec spec = new PropertyFilterSpec();
  11. spec.getPropSet().add(propSpec);
  12. spec.getObjectSet().add(objSpec);
  13. return spec;
  14. }
  15. private static String getObjectName(ManagedObjectReference mor) throws Exception
  16. {
  17. String objectName = null;
  18. PropertySpec propSpec = new PropertySpec();
  19. propSpec.setAll(new Boolean(false));
  20. propSpec.getPathSet().add("name");
  21. propSpec.setType(mor.getType());
  22. ObjectSpec objSpec = new ObjectSpec();
  23. objSpec.setObj(mor);
  24. objSpec.setSkip(new Boolean(false));
  25. PropertyFilterSpec spec = new PropertyFilterSpec();
  26. spec.getPropSet().add(propSpec);
  27. spec.getObjectSet().add(objSpec);
  28. ArrayList<PropertyFilterSpec> listpfs = new ArrayList<PropertyFilterSpec>();
  29. listpfs.add(spec);
  30. List<ObjectContent> listobjcont = retrievePropertiesAllObjects(listpfs);
  31. if(listobjcont != null)
  32. {
  33. ObjectContent oc = (ObjectContent) listobjcont.get(0);
  34. objectName = (String) oc.getPropSet().get(0).getVal();
  35. }
  36. return objectName;
  37. }

这样就可以获取相关的主机告警信息。

 

对于其他的,比如虚拟机的告警信息就可以这样:

 

  1. public static List<AlarmItem> getVmAlarms(String vmName) throws Exception
  2. {
  3. List<AlarmItem> ansList = null;
  4. ManagedObjectReference hostmor = getVmByVmName(vmName);
  5. ansList = getAlarms(hostmor);
  6. return ansList;
  7. }

对于其他的譬如vCenter, Cluster, Datacenter的告警就不一一赘述了,相信看得懂上面代码的小伙伴一定能很快的自己写出实现的方法。

 

这个系列暂时到此为止,如有意见或者建议的小伙伴记得在下方留言哦~

 

欢迎跳转到本文的原文链接:https://honeypps.com/backend/vmware-vsphere-webservice-sdk-warn-info/

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。

相关技术文章

最新源码

下载排行榜

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载