教程

报警扩展

目前iManager内置了以邮件的形式发送告警,为了满足iManager用户对告警方式多样化的需求,iManager提供了用于报警服务扩展的Notification接口。扩展后将您的实现类正确配置到iManager,即可以实现您自己的告警方式。

下面以控制台的形式发送告警为例,简要介绍Notification接口的使用。

Notification接口介绍

Notification接口主要负责系统告警、告警恢复等通知的发送。

public interface Notification {
  /**
  * <p>
  * 发送通知
  * </p>
  * @param entity 通知实体
  * @since 9.0.1
  */
public void send(NotificationEntity entity);

}

扩展和配置流程

  1. 下载notification-api.jar
  2. 编写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);// 告警描述信息
       }
     }
    
    }
  3. 完成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>
  4. 将代码集成到iManager

    • 方法一:将classes文件夹下的文件复制到%supermap="" imanager_home%/webapps/imanager/web-inf/classes文件夹下。
    • 方法二: 将jar包放到%SuperMap iManager_HOME%/webapps/imanager/WEB-INF/lib文件夹下。
  5. 重启iManager服务 ,即可实现量身定制的告警方式。