
com.github.javaclub.monitor.FireMonitors Maven / Gradle / Ivy
/*
* @(#)FireMonitors.java 2018年1月13日
*
* Copyright (c) 2018. All Rights Reserved.
*
*/
package com.github.javaclub.monitor;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;
import com.github.javaclub.monitor.util.SmsUtils;
/**
* FireMonitors 报警装置
*
* @version $Id: FireMonitors.java 2018年1月13日 12:46:31 Exp $
*/
public class FireMonitors {
private static Map fireEventMap = new ConcurrentHashMap();
private static Map fireMap = new ConcurrentHashMap();
static {
init();
}
private static void init() {
new Timer("monitor-fire-event").scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
for (String eventName : fireEventMap.keySet()) {
if (fireMap.containsKey(eventName)) {
FireEvent fireEvent = fireEventMap.get(eventName);
if (fireEvent.getLastFireNum().get() >= fireEvent.getFireUpper()) {
// 要报警了
if (fireEvent.getLastFireTime() != 0l) {
if (System.currentTimeMillis() - fireEvent.getLastFireTime() >= (fireEvent.getFireRate() * 1000l)) {
// fire
SmsUtils.fire(fireEvent.getMobiles(), fireMap.get(eventName));
fireEvent.setLastFireTime(System.currentTimeMillis());
}
} else {
SmsUtils.fire(fireEvent.getMobiles(), fireMap.get(eventName));
fireEvent.setLastFireTime(System.currentTimeMillis());
}
}
}
}
} catch (Throwable t) {
}
}
}, 5000L, 5000L);
}
/**
* 注册报警事件
*
* @param eventName 事件名称
* @param mobiles 报警短信接受手机号码,多个以逗号分隔
* @param fireUpper 报警事件触发fireUpper次 开始发送报警短信 ,默认fireUpper=1
* @param fireRate 报警时间间隔,默认60s
*/
public static void registeFireEvent(String eventName, String mobiles, int fireUpper, int fireRate) {
fireEventMap.put(eventName, new FireEvent(eventName, mobiles, fireUpper, fireRate));
}
/**
* 触发报警事件
*
* @param eventName 事件名称
* @param content 报警内容
*/
public static void fire(String eventName, String content) {
FireEvent fireEvent = fireEventMap.get(eventName);
if (fireEvent != null) {
fireEvent.getLastFireNum().getAndIncrement();
if (fireEvent.getLastFireNum().get() > Integer.MAX_VALUE - 10000) {
fireEvent.getLastFireNum().set(10000);
}
fireMap.put(eventName, content);
}
}
/**
* 解除报警事件
*
* @param eventName 事件名称
*/
public static void unfire(String eventName) {
if (null != fireMap.remove(eventName)) {
FireEvent fireEvent = fireEventMap.get(eventName);
if (fireEvent != null) {
fireEvent.getLastFireNum().set(0);
}
}
}
public static void setDev(boolean isDev) {
SmsUtils.setDev(isDev);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy