教程
报警扩展
目前iManager内置了以邮件的形式发送告警,为了满足iManager用户对告警方式多样化的需求,iManager提供了用于报警服务扩展的Notification接口。扩展后将您的实现类正确配置到iManager,即可以实现您自己的告警方式。
下面以控制台的形式发送告警为例,简要介绍Notification接口的使用。
Notification接口介绍
Notification接口主要负责系统告警、告警恢复等通知的发送。
public interface Notification {
/**
* <p>
* 发送通知
* </p>
* @param entity 通知实体
* @since 9.0.1
*/
public void send(NotificationEntity entity);
}
扩展和配置流程
- 下载notification-api.jar
-
编写ConsoleNotification类,实现Notification接口
package com.supermap.imanager.notification.impl; import java.util.List; import com.supermap.imanager.notification.Notification; import com.supermap.imanager.notification.commontypes.AppAlarmItemEntity; import com.supermap.imanager.notification.commontypes.AppRecoveredAlarmItemEntity; import com.supermap.imanager.notification.commontypes.NotificationEntity; import com.supermap.imanager.notification.commontypes.NotificationItemEntity; import com.supermap.imanager.notification.commontypes.URLAlarmItemEntity; import com.supermap.imanager.notification.commontypes.URLRecoveredAlarmItemEntity; public class ConsoleNotification implements Notification { private boolean enable = false; public void setEnable(boolean enable) { this.enable = enable; } @Override public void send(NotificationEntity entity) { if (enable) { // 通知标题 System.out.println("title:" + entity.title); // 通知内容的类型 System.out.println("type:" + entity.type.toString()); System.out.println("contents"); List<NotificationItemEntity> contents = entity.contents; contents.forEach((content) -> { printItem(content); }); } } private void printItem(NotificationItemEntity content) { // 打印报警描述信息 System.out.println("description:" + content.description); // 根据需要还可获取通知的详细信息: // app告警项 if (content instanceof AppAlarmItemEntity) { AppAlarmItemEntity item = (AppAlarmItemEntity) content; System.out.println("appId:" + item.appId);// app的id System.out.println("name:" + item.name);// app的名称 System.out.println("address:" + item.address);// app的地址 System.out.println("type:" + item.type);// app类型;iServer/iPortal System.out.println("suggest:" + item.suggest);// 建议内容 System.out.println("description:" + item.description);// 告警描述信息 } // app告警恢复项 else if (content instanceof AppRecoveredAlarmItemEntity) { AppRecoveredAlarmItemEntity item = (AppRecoveredAlarmItemEntity) content; System.out.println("appId:" + item.appId);// app的id System.out.println("name:" + item.name);// app的名称 System.out.println("address:" + item.address);// app的地址 System.out.println("type:" + item.type);// app类型;iServer/iPortal System.out.println("alarmValue:" + item.alarmValue);// 告警阈值 System.out.println("startTime:" + item.startTime);// 开始时间 System.out.println("endTime:" + item.endTime);// 结束时间 System.out.println("durationTime:" + item.durationTime);// 持续时间 System.out.println("description:" + item.description);// 告警描述信息 } // URL告警项 else if (content instanceof URLAlarmItemEntity) { URLAlarmItemEntity item = (URLAlarmItemEntity) content; System.out.println("name:" + item.name);// 告警名称 System.out.println("address:" + item.address);// URL地址 System.out.println("expectedStatus:" + item.expectedStatus);// 预期状态 System.out.println("actualStatus:" + item.actualStatus);// 实际状态 System.out.println("suggest:" + item.suggest);// 建议内容 System.out.println("description:" + item.description);// 告警描述信息 } // URL告警恢复项 else if (content instanceof URLRecoveredAlarmItemEntity) { URLRecoveredAlarmItemEntity item = (URLRecoveredAlarmItemEntity) content; System.out.println("description:" + item.name);// 告警名称 System.out.println("description:" + item.url);// URL地址 System.out.println("expectedStatus:" + item.expectedStatus);// 预期状态 System.out.println("startTime:" + item.startTime);// 开始时间 System.out.println("endTime:" + item.endTime);// 结束时间 System.out.println("durationTime:" + item.durationTime);// 持续时间 System.out.println("description:" + item.description);// 告警描述信息 } } }
-
完成bean配置
在%SuperMap iManager_HOME%/WEB-INF/config/notificationBeans.xml文件中完成bean的配置。
<bean id="consoleNotification" class="com.supermap.imanager.notification.impl.ConsoleNotification"> <property name="enable" value="true"/> </bean>
-
将代码集成到iManager
- 方法一:将classes文件夹下的文件复制到%supermap="" imanager_home%/webapps/imanager/web-inf/classes文件夹下。
- 方法二: 将jar包放到%SuperMap iManager_HOME%/webapps/imanager/WEB-INF/lib文件夹下。
- 重启iManager服务 ,即可实现量身定制的告警方式。