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

简介: 获取告警信息相对而言比较简单点,这里先陈述告警信息的pojo类,作为存储告警信息的源头(省略getter和setter方法): public class AlarmItem{ //对象 private String ObjectName; //状态 private Manag...

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

public class AlarmItem
{
	//对象
	private String ObjectName;
	//状态
	private ManagedEntityStatus overallStatus;
	//名称
	private String alarmName;
	//触发时间
	private Date time;
	//确认时间
	private Date acknowledgedTime;
	//确认者
	private String acknowledgedByUser;
	//是否被确认
	private Boolean acknowledged;
	
}

 

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

	public static List<AlarmItem> getHostAlarms(String hostName) throws Exception
	{
		List<AlarmItem> ansList = null;
		ManagedObjectReference hostmor = getHostByHostName(hostName);
		ansList = getAlarms(hostmor);
		return ansList;
	}
这里先根据主机名称获取主机的对象(HostSystem),相关代码可以参考前面的相关文章。

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

private static List<AlarmItem> getAlarms(ManagedObjectReference mor) throws Exception
	{
		List<AlarmItem> ansList = new ArrayList<AlarmItem>();
		List<AlarmState> list = vimPort.getAlarmState(alarmManager, mor);
		for(AlarmState alarmState : list)
		{
			if(alarmState.getOverallStatus().toString().equals("YELLOW") || alarmState.getOverallStatus().toString().equals("RED"))
			{
				AlarmItem alarmItem = new AlarmItem();
				ManagedObjectReference alarm = alarmState.getAlarm();
				if(alarm!=null)
				{
					PropertyFilterSpec alarmFilterSpec = createAlarmFilterSpec(alarm);
					ArrayList<PropertyFilterSpec> listpfs = new ArrayList<PropertyFilterSpec>();
					listpfs.add(alarmFilterSpec);
					List<ObjectContent> listobjcont = retrievePropertiesAllObjects(listpfs);
					if(listobjcont != null)
					{
						ObjectContent oc = (ObjectContent) listobjcont.get(0);
						AlarmInfo alarmInfo = (AlarmInfo) oc.getPropSet().get(0).getVal();
						alarmItem.setAlarmName(alarmInfo.getName());
					}
				}
				alarmItem.setAcknowledged(alarmState.isAcknowledged());
				alarmItem.setAcknowledgedByUser(alarmState.getAcknowledgedByUser());
				alarmItem.setAcknowledgedTime(DateConvert.convertToDate(alarmState.getAcknowledgedTime()));
				alarmItem.setOverallStatus(alarmState.getOverallStatus());
				alarmItem.setTime(DateConvert.convertToDate(alarmState.getTime()));
				alarmItem.setObjectName(getObjectName(alarmState.getEntity()));
				ansList.add(alarmItem);
			}
		}
		return ansList;
	}
	private static PropertyFilterSpec createAlarmFilterSpec(ManagedObjectReference eventHistoryCollectorRef)
	{
		PropertySpec propSpec = new PropertySpec();
		propSpec.setAll(new Boolean(false));
		propSpec.getPathSet().add("info");
		propSpec.setType(eventHistoryCollectorRef.getType());

		ObjectSpec objSpec = new ObjectSpec();
		objSpec.setObj(eventHistoryCollectorRef);
		objSpec.setSkip(new Boolean(false));

		PropertyFilterSpec spec = new PropertyFilterSpec();
		spec.getPropSet().add(propSpec);
		spec.getObjectSet().add(objSpec);
		return spec;
	}
	
	private static String getObjectName(ManagedObjectReference mor) throws Exception
	{
		String objectName = null;
		
		PropertySpec propSpec = new PropertySpec();
		propSpec.setAll(new Boolean(false));
		propSpec.getPathSet().add("name");
		propSpec.setType(mor.getType());

		ObjectSpec objSpec = new ObjectSpec();
		objSpec.setObj(mor);
		objSpec.setSkip(new Boolean(false));

		PropertyFilterSpec spec = new PropertyFilterSpec();
		spec.getPropSet().add(propSpec);
		spec.getObjectSet().add(objSpec);
		
		ArrayList<PropertyFilterSpec> listpfs = new ArrayList<PropertyFilterSpec>();
		listpfs.add(spec);
		List<ObjectContent> listobjcont = retrievePropertiesAllObjects(listpfs);
		if(listobjcont != null)
		{
			ObjectContent oc = (ObjectContent) listobjcont.get(0);
			objectName = (String) oc.getPropSet().get(0).getVal();
		}
		
		return objectName;
	}
这样就可以获取相关的主机告警信息。

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

	public static List<AlarmItem> getVmAlarms(String vmName) throws Exception
	{
		List<AlarmItem> ansList = null;
		ManagedObjectReference hostmor = getVmByVmName(vmName);
		ansList = getAlarms(hostmor);
		return ansList;
	}
对于其他的譬如vCenter, Cluster, Datacenter的告警就不一一赘述了,相信看得懂上面代码的小伙伴一定能很快的自己写出实现的方法。

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


目录
相关文章
|
16天前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
40 1
|
20天前
|
Java 开发工具
【Azure Developer】示例: 在中国区调用MSGraph SDK通过User principal name获取到User信息,如Object ID
【Azure Developer】示例: 在中国区调用MSGraph SDK通过User principal name获取到User信息,如Object ID
|
19天前
|
存储 监控 开发工具
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
22 0
|
20天前
|
机器学习/深度学习 开发工具 Python
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
|
21天前
|
开发工具 数据安全/隐私保护 Python
【Azure 环境】通过Python SDK收集所有订阅简略信息,例如订阅id 名称, 资源组及组内资源信息等,如何给Python应用赋予相应的权限才能获取到信息呢?
【Azure 环境】通过Python SDK收集所有订阅简略信息,例如订阅id 名称, 资源组及组内资源信息等,如何给Python应用赋予相应的权限才能获取到信息呢?
|
1月前
|
缓存 JavaScript 前端开发
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)更新时间(2020-10-29)
|
2月前
|
NoSQL 开发工具 数据库
开发与运维测试问题之应用启动报 Can not load this fake sdk class 的异常如何解决
开发与运维测试问题之应用启动报 Can not load this fake sdk class 的异常如何解决
|
3月前
|
JSON 前端开发 JavaScript
技术笔记:vmware之VMwareRemoteConsole(VMRC)SDK(二)
技术笔记:vmware之VMwareRemoteConsole(VMRC)SDK(二)
90 0
|
3月前
|
API 开发工具
抖音sdk,抖音开发api接口
抖音sdk,抖音开发api接口
|
4月前
|
Java 开发工具 Maven
Android SDK开发的那些事(1),已整理成文档
Android SDK开发的那些事(1),已整理成文档