從日誌中心獲取資料並進行處理和預警
阿新 • • 發佈:2018-12-30
package com.ccservice.train.app.Reptile_mobile_warning.task; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Timer; import java.util.TimerTask; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ccservice.Util.PropertyUtil; import com.ccservice.Util.file.WriteLog; import com.ccservice.Util.string.StringUtil; import com.ccservice.train.buy_web_train.util.MsgDingDingUtil; /** * 查詢排隊的代理IP * * @author Administrator * */ public class CheckProxyIPOfFellIn { public static Map<String, Integer> ipCountMap = new HashMap<String, Integer>();// 每個代理ip的計數 public static String collectedIPs = ""; public static String collectedIDs = ""; public static String earlyWarningIp = "";// 預警ip private static long cacheTime = Long.parseLong(PropertyUtil.getValue("cacheTime", "warning.properties").toString());//執行搜尋日誌任務的間隔時間 private static long warnCacheTime = Long.parseLong(PropertyUtil.getValue("warnCacheTime", "warning.properties").toString());//執行報警任務的間隔時間 private static Integer delay = Integer.parseInt((PropertyUtil.getValue("delay", "warning.properties").toString()));//開始執行任務延遲時間 /** * 重複執行收集日誌的任務 */ public static void repeatTask(){ Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { generateEarlyWarningIP(); } }; timer.schedule(task, delay,cacheTime); } public static void setValueOfIpCountMap() { Date date=new Date(); Calendar calendar = Calendar.getInstance(); String toDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); calendar.setTime(date); calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) - 1); String fromDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); getIP(); String[] ipArr = collectedIPs.split(","); for (int i = 0; i < ipArr.length; i++) { String ip = ipArr[i]; if (!ipCountMap.containsKey(ip)) { ipCountMap.put(ip, 1); } else { // 否則獲得c的值並且加1 ipCountMap.put(ip, ipCountMap.get(ip) + 1); } } } /** * 生成報警ip */ public static void generateEarlyWarningIP() { setValueOfIpCountMap(); for (java.util.Map.Entry<String, Integer> entry : ipCountMap.entrySet()) { String key = entry.getKey(); int value = entry.getValue(); if (!StringUtil.StringIsNull(value+"")&&value >= 3 && earlyWarningIp.indexOf(key) < 0) { earlyWarningIp = earlyWarningIp + key+";"; } } } /** * 釘釘報警 */ public static void warning(){ String url_dingding = PropertyUtil.getValue("zhenji_monitoring_url_dingding", "system.properties"); if(!"".equals(earlyWarningIp)){ MsgDingDingUtil.sendDingdingMsg_back("排隊的代理IP為:"+earlyWarningIp, url_dingding); } //每天凌晨過後清空當天快取資料 if(isBelong()){ ipCountMap = new HashMap<String, Integer>();// 每個代理ip的計數 earlyWarningIp = "";// 預警ip collectedIDs=""; collectedIPs=""; } } /** * 重複執行報警任務 */ public static void bjTask(){ Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 1); //凌晨1點 calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); Date date=calendar.getTime(); //第一次執行定時任務的時間 //如果第一次執行定時任務的時間 小於當前的時間 //此時要在 第一次執行定時任務的時間加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。 if (date.before(new Date())) { date = addDay(date, 1); } Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { generateEarlyWarningIP(); warning(); } }; //repeatTask(); timer.schedule(task, 1000,warnCacheTime); } public static Date addDay(Date date, int num) { Calendar startDT = Calendar.getInstance(); startDT.setTime(date); startDT.add(Calendar.DAY_OF_MONTH, num); return startDT.getTime(); } public static void getIP(){ collectedIPs=""; String dateStr=new SimpleDateFormat("yyyy.MM.dd").format(new Date()); String ipStr=""; String uri="http://101.236.47.119:9200/redis-log-"+dateStr + "/doc/_search?pretty"; try { JSONObject obj=ESConfig.post(uri).getJSONObject("hits"); JSONArray array=obj.getJSONArray("hits"); for (int i = 0; i < array.size(); i++) { JSONObject ob=array.getJSONObject(i); String id=ob.getString("_id"); JSONObject ob1=ob.getJSONObject("_source"); String biztype=ob1.getString("biztype"); //收集過的資料不再收集 if(!"".equals(biztype)&&biztype!=null&&collectedIDs.indexOf(id)<0){ String logs=ob1.getString("logString"); collectedIDs+=id+";\r\n"; //logs=logs.substring(0, logs.indexOf(":")); ipStr+=logs+",\r\n"; } } ipStr="".equals(ipStr)?"":ipStr.substring(0, ipStr.lastIndexOf(",")); collectedIPs+=ipStr; } catch (Exception e) { // TODO Auto-generated catch block WriteLog.write("CheckProxyIPOfFellIn.getIP","收集排隊的代理IP出錯"); e.printStackTrace(); } } public static void main(String[] args) { //// ipCountMap = new HashMap<String, Integer>();// 每個代理ip的計數 //// earlyWarningIp = "";// 預警ip generateEarlyWarningIP(); System.out.println(warnCacheTime); System.out.println("id:"+collectedIDs); System.out.println("ip:"+collectedIPs); System.out.println("排隊ip:"+earlyWarningIp); // warning(); // CheckProxyIPOfFellIn.bjTask(); isBelong(); } public static Boolean isBelong(){ SimpleDateFormat df = new SimpleDateFormat("HH:mm");//設定日期格式 Date now =null; Date beginTime = null; Date endTime = null; try { now = df.parse(df.format(new Date())); beginTime = df.parse("00:00"); endTime = df.parse("02:00"); } catch (Exception e) { e.printStackTrace(); } Boolean flag = belongCalendar(now, beginTime, endTime); return flag; } /** * 判斷時間是否在時間段內 * @param nowTime * @param beginTime * @param endTime * @return */ public static boolean belongCalendar(Date nowTime, Date beginTime, Date endTime) { Calendar date = Calendar.getInstance(); date.setTime(nowTime); Calendar begin = Calendar.getInstance(); begin.setTime(beginTime); Calendar end = Calendar.getInstance(); end.setTime(endTime); if (date.after(begin) && date.before(end)) { return true; } else { return false; } } }