package com.wgcloud.util.msg;
|
|
import com.wgcloud.common.ApplicationContextHelper;
|
import com.wgcloud.config.CommonConfig;
|
import com.wgcloud.config.MailConfig;
|
import net.jodah.expiringmap.ExpirationPolicy;
|
import net.jodah.expiringmap.ExpiringMap;
|
import org.apache.commons.lang3.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.List;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* @version v3.3
|
* @ClassName:WarnPools.java
|
* @author: http://www.wgstart.com
|
* @date: 2021年1月16日
|
* @Description: WarnPools.java
|
* @Copyright: 2019-2021 wgcloud. All rights reserved.
|
*/
|
public class WarnPools {
|
|
private static final Logger logger = LoggerFactory.getLogger(WarnPools.class);
|
|
private static CommonConfig commonConfig = (CommonConfig) ApplicationContextHelper.getBean(CommonConfig.class);
|
|
private static MailConfig mailConfig = (MailConfig) ApplicationContextHelper.getBean(MailConfig.class);
|
|
/**
|
* 缓存每次发送的告警信息map<key,1>
|
*/
|
public static ExpiringMap<String, String> MEM_WARN_MAP = null;
|
|
// 告警信息计数器,提供给页面告警声音提示用,不存库
|
public static List<Integer> WARN_COUNT_LIST = Collections.synchronizedList(new ArrayList<Integer>());
|
|
//该map存贮服务接口一定时间内的告警次数
|
public static ExpiringMap<String, Integer> HEATH_WARN_COUNT_MAP = null;
|
|
//该map存贮PING设备一定时间内的告警次数
|
public static ExpiringMap<String, Integer> PING_WARN_COUNT_MAP = null;
|
|
|
/**
|
* 每天定时清空告警缓存map
|
*/
|
public static void clearOldData() {
|
logger.info("清空告警缓存map");
|
if (null != MEM_WARN_MAP) {
|
MEM_WARN_MAP.clear();
|
}
|
|
logger.info("清空告警信息计数器");
|
WARN_COUNT_LIST.clear();
|
|
//清空服务接口,PING告警次数缓存记录
|
logger.info("清空服务接口,PING告警失败次数的缓存记录");
|
if (null != HEATH_WARN_COUNT_MAP) {
|
HEATH_WARN_COUNT_MAP.clear();
|
}
|
if (null != PING_WARN_COUNT_MAP) {
|
PING_WARN_COUNT_MAP.clear();
|
}
|
}
|
|
/**
|
* 判断告警通知是否在缓存里
|
* 在缓存返回true,不在缓存返回false
|
*
|
* @param key 缓存key
|
* @param warnCacheTimes 设定的缓存时间,秒
|
* @return
|
*/
|
public static boolean isExpireWarnTime(String key, Integer warnCacheTimes) {
|
if (StringUtils.isEmpty(key)) {
|
return false;
|
}
|
if (null == warnCacheTimes) {
|
warnCacheTimes = 7200;
|
}
|
try {
|
if (null == MEM_WARN_MAP) {
|
/**
|
*expiration(5000,TimeUnit.MILLISECONDS)
|
*设置过期时间为5秒
|
*ExpirationPolicy.CREATED)
|
*设置过期策略为创建或更新值后
|
*/
|
MEM_WARN_MAP = ExpiringMap.builder().expiration(warnCacheTimes, TimeUnit.SECONDS)
|
.expirationPolicy(ExpirationPolicy.CREATED)
|
.build();
|
}
|
|
if (null != MEM_WARN_MAP.get(key)) {
|
//这条告警仍然在告警缓存,没有过期
|
return true;
|
}
|
} catch (Exception e) {
|
logger.error("判断告警缓存时间错误", e);
|
}
|
return false;
|
}
|
|
/**
|
* 初始化服务接口告警map,ping设备告警map
|
* 连续失败多少次再发送告警通知
|
*/
|
public static void initWarnCountMap() {
|
try {
|
if (null == WarnPools.HEATH_WARN_COUNT_MAP) {
|
long heathOutTimes = commonConfig.getHeathTimes() * mailConfig.getHeathWarnCount();
|
//额外多保留10s缓冲
|
heathOutTimes = heathOutTimes + 10;
|
/**
|
*expiration(5000,TimeUnit.MILLISECONDS)
|
*设置过期时间为5秒
|
*ExpirationPolicy.CREATED)
|
*设置过期策略为创建或更新值后
|
*/
|
WarnPools.HEATH_WARN_COUNT_MAP = ExpiringMap.builder().expiration(heathOutTimes, TimeUnit.SECONDS)
|
.expirationPolicy(ExpirationPolicy.CREATED)
|
.build();
|
}
|
|
if (null == WarnPools.PING_WARN_COUNT_MAP) {
|
long pingOutTimes = commonConfig.getDceTimes() * mailConfig.getDceWarnCount();
|
//额外多保留10s
|
pingOutTimes = pingOutTimes + 10;
|
/**
|
*expiration(5000,TimeUnit.MILLISECONDS)
|
*设置过期时间为5秒
|
*ExpirationPolicy.CREATED)
|
*设置过期策略为创建或更新值后
|
*/
|
WarnPools.PING_WARN_COUNT_MAP = ExpiringMap.builder().expiration(pingOutTimes, TimeUnit.SECONDS)
|
.expirationPolicy(ExpirationPolicy.CREATED)
|
.build();
|
}
|
|
} catch (Exception e) {
|
logger.error("判断告警缓存时间错误", e);
|
}
|
}
|
|
}
|