All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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