package com.nis.web.service.restful; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.beust.jcommander.internal.Maps; import com.nis.domain.restful.NtcConnNumReport; import com.nis.domain.restful.NtcEntranceReport; import com.nis.domain.restful.dashboard.AppConnRecordStatistic; import com.nis.domain.restful.dashboard.NtcTotalReport; import com.nis.domain.restful.dashboard.TrafficAppFocusStatistic; import com.nis.domain.restful.dashboard.TrafficAppStatistic; import com.nis.domain.restful.dashboard.TrafficHttpFocusStatistic; import com.nis.domain.restful.dashboard.TrafficIpActiveStatistic; import com.nis.domain.restful.dashboard.TrafficPortActiveStatistic; import com.nis.domain.restful.dashboard.TrafficProtocolStatistic; import com.nis.domain.restful.dashboard.TrafficTransStatistic; import com.nis.domain.restful.dashboard.TrafficUaStatistic; import com.nis.restful.RestBusinessCode; import com.nis.restful.RestServiceException; import com.nis.util.Constants; import com.nis.util.DateUtils; import com.nis.util.StringUtils; import com.nis.web.dao.dashboard.NtcTotalReportDao; import com.nis.web.dao.dashboard.TrafficAppStatisticDao; import com.nis.web.dao.dashboard.TrafficHttpStatisticDao; import com.nis.web.dao.dashboard.TrafficIpActiveStatisticDao; import com.nis.web.dao.dashboard.TrafficPortActiveStatisticDao; import com.nis.web.dao.dashboard.TrafficProtocolStatisticDao; import com.nis.web.dao.dashboard.TrafficUaStatisticDao; import com.nis.web.service.BaseService; import com.zdjizhi.utils.StringUtil; @Service public class DashboardService extends BaseService { @Autowired public TrafficIpActiveStatisticDao trafficIpActiveStatisticDao; @Autowired public TrafficProtocolStatisticDao trafficProtocolStatisticDao; @Autowired public TrafficAppStatisticDao trafficAppStatisticDao; @Autowired public TrafficUaStatisticDao trafficUaStatisticDao; @Autowired public TrafficHttpStatisticDao trafficHttpStatisticDao; @Autowired public NtcTotalReportDao ntcTotalReportDao; @Autowired public TrafficPortActiveStatisticDao trafficPortActiveStatisticDao; /** * 流量统计 数据显示 info:先查询最近时间,根据时间条件查询数据 效率提高 */ public List getTotalReportList() { List totalReportList = new ArrayList(); List newData = new ArrayList(); // 流量统计阻断丢弃回流等数据显示最近时间 NtcTotalReport maxReportTime = ntcTotalReportDao.getMaxReportTime(); if (maxReportTime != null && maxReportTime.getReportTime() != null) { Date reportTime = maxReportTime.getReportTime(); totalReportList = ntcTotalReportDao.getTotalReportList(reportTime);// 返回阻断,监测等結果 } Map maxRecvtTime = ntcTotalReportDao.getMaxStatTime(); if (maxRecvtTime != null && maxRecvtTime.get("statTime") != null) { Date recvTime = (Date) maxRecvtTime.get("statTime"); newData = ntcTotalReportDao.getNetFlowPortInfoNew(recvTime); } // 统计带宽的流入流出 单位 五分钟 的 byte if (StringUtil.isNotEmpty(newData)) { Double inoctets = Double.parseDouble(newData.get(0).get("inoctets").toString()); Double outoctets = Double.parseDouble(newData.get(0).get("outoctets").toString()); if (StringUtil.isEmpty(totalReportList)) { Map valueMap = Maps.newHashMap(); valueMap.put("inoctets", inoctets); valueMap.put("outoctets", outoctets); totalReportList.add(valueMap); } else { totalReportList.get(0).put("inoctets", inoctets); totalReportList.get(0).put("outoctets", outoctets); } } return totalReportList; } /** * 根据ip46,协议tcp,udp查询带宽 * * @param addrType * @param transType * @return */ /* * public List getBandwidthTrans(String addrType, Integer * transType,String beginDate,String endDate) { ArrayList listMap = new * ArrayList(); List bandwidthList = new * ArrayList(); Map maxStatTime = * ntcTotalReportDao.getMaxStatTime(); if (maxStatTime != null && * maxStatTime.get("statTime") != null) { Date stat = (Date) * maxStatTime.get("statTime"); HashMap m = new HashMap(); bandwidthList = * ntcTotalReportDao.getBandwidthTrans(stat, addrType, transType); List timeList * = new ArrayList(); List linkList = new ArrayList(); List gbpsList = new * ArrayList(); List ppsList = new ArrayList(); if (bandwidthList != null && * bandwidthList.size() > 0) { for (TrafficTransStatistic tt : bandwidthList) { * if (tt.getTime() != null) { timeList.add(tt.getTime()); if (tt.getLinkNum() * != null) { linkList.add(tt.getLinkNum()); } if (tt.getPps() != null) { * ppsList.add(tt.getPps()); } if (tt.getGbps() != null) { * gbpsList.add(tt.getGbps()); } } } } m.put("linkNum", linkList); m.put("gbps", * gbpsList); m.put("pps", ppsList); m.put("statTime", timeList); * listMap.add(m); } return listMap; } */ /** * 根据ip46,协议tcp,udp查询带宽 * * @param addrType * @param transType * @return */ @Deprecated public List getBandwidthTrans(String addrType, Integer transType, String beginDate, String endDate) { ArrayList listMap = new ArrayList(); HashMap m1 = getBandwidthTransEntrance(addrType, transType, beginDate, endDate, 1); if (m1 != null && m1.size() > 0) { m1.put("entranceId", 1);// 局点1.2 不同来源 listMap.add(m1); } return listMap; } /** * 根据ip46,协议tcp,udp查询带宽 * * @param addrType * @param transType * @return */ @Deprecated public List getBandwidthTrans2(String addrType, Integer transType, String beginDate, String endDate) { ArrayList listMap = new ArrayList(); HashMap m2 = getBandwidthTransEntrance(addrType, transType, beginDate, endDate, 2); if (m2 != null && m2.size() > 0) { m2.put("entranceId", 2); listMap.add(m2); } return listMap; } /** * 查询单个局点流量的数据信息 * * @param addrType * @param transType * @param beginDate * @param endDate * @param entranceId * @return */ @Deprecated public HashMap getBandwidthTransEntrance(String addrType, Integer transType, String beginDate, String endDate, Integer entranceId) { long start = System.currentTimeMillis(); ArrayList listMap = new ArrayList(); List bandwidthList = new ArrayList(); HashMap resulMap = new HashMap(); bandwidthList = ntcTotalReportDao.getBandwidthTrans(entranceId, beginDate, endDate, addrType, transType); List timeList = new ArrayList(); List linkList = new ArrayList(); List gbpsList = new ArrayList(); List ppsList = new ArrayList(); if (bandwidthList != null && bandwidthList.size() > 0) { Map m = new HashMap(); int inter = 1000 * 60 * 5;// 间隔时间为五分钟 // 开始时间,结束时间 时间戳 Long b = dateToStamp(beginDate); Long e = dateToStamp(endDate); int num = 0; Long pointTime = b; while (pointTime < e) { Map rm = new HashMap(); Long sumL = 0l; Long sumP = 0l; Long sumG = 0l; if (pointTime >= e) { break; // 停止 } for (TrafficTransStatistic tt : bandwidthList) { // 实际时间 String time = tt.getTime(); Long t = dateToStamp(time); if (t >= pointTime && t < pointTime + inter) { // 范围之内分到此pointTime组 sumL = sumL + tt.getLinkNum(); sumP = sumP + Long.parseLong(tt.getPps().substring(0, tt.getPps().lastIndexOf("."))); sumG = sumG + Long.parseLong(tt.getGbps().substring(0, tt.getGbps().lastIndexOf("."))); } } // 在结束时间只有当值大于0时才记录数据,防止折线降为0引起误会 if (pointTime >= e - inter && sumL > 0) { linkList.add(sumL); } if (pointTime >= e - inter && sumP > 0) { ppsList.add(sumP); } if (pointTime >= e - inter && sumG > 0) { gbpsList.add(sumG); } if (pointTime >= e - inter && (sumL > 0 || sumG > 0 || sumP > 0)) { timeList.add(stampToDate(pointTime)); } if (pointTime < e - inter) { timeList.add(stampToDate(pointTime)); linkList.add(sumL); gbpsList.add(sumG); ppsList.add(sumP); } num = num + 1; pointTime = b + inter * num; } resulMap.put("linkNum", linkList); resulMap.put("gbps", gbpsList); resulMap.put("pps", ppsList); resulMap.put("statTime", timeList); } return resulMap; } /** * 将结果格式为时间间隔相同,数量补0数据 * * @param begin * @param end * @param li * @return */ @Deprecated public static List formatDateData(String begin, String end, List li) { List resList = new ArrayList(); Map m = new HashMap(); int inter = 1000 * 60 * 60;// 间隔时间为一小时 // 开始时间,结束时间 时间戳 Long b = dateToStamp(begin); Long e = dateToStamp(end); int num = 0; Long pointTime = b; while (pointTime < e) { Map rm = new HashMap(); Long sum = 0l; if (pointTime >= e) { break; // 停止 } for (Map map : li) { // 实际时间 String time = (String) map.get("time"); Long t = dateToStamp(time); if (t >= pointTime && t < pointTime + inter) { // 范围之内分到此pointTime组 sum = sum + (Long) map.get("count"); } } rm.put("time", stampToDate(pointTime)); rm.put("sum", sum); num = num + 1; pointTime = b + inter * num; resList.add(rm); } return resList; } /** * 日期格式字符串转换成时间戳 * * @param date 字符串日期 * @param format 如:yyyy-MM-dd HH:mm:ss * @return */ @Deprecated public static Long dateToStamp(String date_str) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.parse(date_str).getTime(); } catch (Exception e) { e.printStackTrace(); } return 0l; } /** * 时间戳 换成日期格式字符串转 * * @param 时间 1544602212000 * @param format 如:yyyy-MM-dd HH:mm:ss * @return */ @Deprecated public static String stampToDate(long timeStamp) { SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm");// 这个是你要转成后的时间的格式 String sd = sdf.format(new Date(timeStamp)); // 时间戳转换成时间 return sd; } /** * 根据service 动作查询近五分钟变化趋势 entrance 默认为1,2 */ /* * public List getActionTrans(String begin, String end, String * serviceType) { String sql = ""; String sqlBlock = * "((service>=16 and service<=40) or (service>=258 and service<=273) or (service=576))" * ; // 阻断 String sqlMonitor = * "((service>=128 and service<=152) or (service>=384 and service<=513) or (service=592) or (service>=848 and service<=1030) or (service=1152))" * ; // 监测 String sqlDrop = * "((service>=1040 and service<=1042) or (service=3) or (service=5) or (service=25) or (service=28) or (service=274))" * ; // 丢弃 String sqlLoop = "((service=4) or (service>=832 and service<=834))"; * // 回流 // 区分动作 if (StringUtils.isNotBlank(serviceType)) { if * (serviceType.equalsIgnoreCase("block")) { sql = sqlBlock; } if * (serviceType.equalsIgnoreCase("monitor")) { sql = sqlMonitor; } if * (serviceType.equalsIgnoreCase("drop")) { sql = sqlDrop; } if * (serviceType.equalsIgnoreCase("loop")) { sql = sqlLoop; } } * ArrayList listMap = new ArrayList(); * List entrance1 = new ArrayList(); * List entrance2 = new ArrayList(); * HashMap m1 = new HashMap(); HashMap m2 = new HashMap(); entrance1 = * ntcTotalReportDao.getActionTrans(begin, end, 1, sql); entrance2 = * ntcTotalReportDao.getActionTrans(begin, end, 2, sql); List timeList = new * ArrayList(); List sumList1 = new ArrayList(); List sumList2 = new * ArrayList(); * * Map m = new HashMap(); int inter = * 1000 * 60 * 5;// 间隔时间为五分钟 // 开始时间,结束时间 时间戳 Long b = dateToStamp(begin); Long * e = dateToStamp(end); int num = 0; Long pointTime = b; while (pointTime < e) * { Map rm = new HashMap(); Long sum1 = 0l; Long sum2 = 0l; if (pointTime >= e) * { break; // 停止 } for (NtcEntranceReport e1 : entrance1) { // 实际时间 String time * = e1.getTime(); Long t = dateToStamp(time); if (t >= pointTime && t < * pointTime + inter) { // 范围之内分到此pointTime组 sum1 = sum1 + e1.getSum(); } } for * (NtcEntranceReport e2 : entrance2) { // 实际时间 String time = e2.getTime(); Long * t = dateToStamp(time); if (t >= pointTime && t < pointTime + inter) { // * 范围之内分到此pointTime组 sum2 = sum2 + e2.getSum(); } } // * 在结束时间只有当值大于0时才记录数据,防止折线降为0引起误会 if (pointTime >= e - inter && sum1 > 0) { * sumList1.add(sum1); } if (pointTime >= e - inter && sum2 > 0) { * sumList2.add(sum2); } if (pointTime >= e - inter && (sum1 > 0 || sum2 > 0)) { * timeList.add(stampToDate(pointTime)); } if (pointTime < e - inter) { * sumList1.add(sum1); sumList2.add(sum2); timeList.add(stampToDate(pointTime)); * } num = num + 1; pointTime = b + inter * num; } m1.put("count", sumList1); * m1.put("statTime", timeList); m1.put("entranceId", 1); m2.put("count", * sumList2);// m2.put("statTime", timeList); m2.put("entranceId", 2); * listMap.add(m1); listMap.add(m2); return listMap; } */ /** * 根据service 动作查询近五分钟变化趋势 entrance 默认为1,2 */ public List getActionTrans2(String begin, String end, String serviceType) { String sql = ""; String sqlBlock = "((service>=16 and service<=40) or (service>=258 and service<=273) or (service=576))"; // 阻断 String sqlMonitor = "((service>=128 and service<=152) or (service>=384 and service<=513) or (service=592) or (service>=848 and service<=1030) or (service=1152))"; // 监测 String sqlDrop = "((service>=1040 and service<=1042) or (service=3) or (service=5) or (service=25) or (service=28) or (service=274))"; // 丢弃 String sqlLoop = "((service=4) or (service>=832 and service<=834))"; // 回流 // 区分动作 if (StringUtils.isNotBlank(serviceType)) { if (serviceType.equalsIgnoreCase("action_reject")) { sql = sqlBlock; } if (serviceType.equalsIgnoreCase("action_monit")) { sql = sqlMonitor; } if (serviceType.equalsIgnoreCase("action_drop")) { sql = sqlDrop; } if (serviceType.equalsIgnoreCase("action_loop")) { sql = sqlLoop; } } ArrayList listMap = new ArrayList(); List entrance1 = new ArrayList(); List entrance2 = new ArrayList(); HashMap m1 = new HashMap(); HashMap m2 = new HashMap(); entrance1 = ntcTotalReportDao.getActionTrans(begin, end, 1, sql); entrance2 = ntcTotalReportDao.getActionTrans(begin, end, 2, sql); if(!StringUtil.isEmpty(entrance1)||!StringUtil.isEmpty(entrance2)){ Map m = new HashMap(); Date beginDate = DateUtils.parseDate(begin); Date endDate = DateUtils.parseDate(end); List dateRangeList = new ArrayList(); Calendar calendar = Calendar.getInstance(); calendar.setTime(beginDate); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); while (calendar.getTime().compareTo(endDate) < 0) { dateRangeList.add(calendar.getTime()); calendar.add(Calendar.MINUTE, Constants.TREND_TIME_INTERVAL); } // 存放每个时间点的总数 Map> ipCountListMap = new HashMap>(); int index1 = 0; int index2 = 0; List sumList1 = new ArrayList(); List sumList2 = new ArrayList(); Long sumEnt1 = 0L; Long sumEnt2 = 0L; for (int i = 0; i < dateRangeList.size(); i++) { // 存放一个时间点中总数 List listEnt1 = new ArrayList(); List listEnt2 = new ArrayList(); Map ipCountMap = new HashMap(); Date date = dateRangeList.get(i); Long num1 = 0L; Long num2 = 0L; for (int j = index1; j < entrance1.size(); j++) { NtcEntranceReport ipInfo = entrance1.get(j); if (ipInfo.getReportTime() != null) { if (ipInfo.getReportTime().compareTo(date) >= 0 && (i + 1 < dateRangeList.size()?ipInfo.getReportTime().compareTo(dateRangeList.get(i + 1)) < 0:true)) { num1 = num1 + ipInfo.getSum(); } else { index1 = j; break; } } } sumEnt1+=num1; listEnt1.add(date.getTime()); listEnt1.add(num1); sumList1.add(listEnt1); for (int j = index2; j < entrance2.size(); j++) { NtcEntranceReport ipInfo = entrance2.get(j); if (ipInfo.getReportTime() != null) { if (ipInfo.getReportTime().compareTo(date) >= 0 && (i + 1 < dateRangeList.size()?ipInfo.getReportTime().compareTo(dateRangeList.get(i + 1)) < 0:true)) { num2 = num2 + ipInfo.getSum(); } else { index2 = j; break; } } } sumEnt2+=num2; listEnt2.add(date.getTime()); listEnt2.add(num2); sumList2.add(listEnt2); } // 整合 count time m1.put("sum", sumEnt1); m1.put("result", sumList1); m1.put("entranceId", 1); m2.put("sum", sumEnt2);// m2.put("result", sumList2); m2.put("entranceId", 2); listMap.add(m1); listMap.add(m2); } return listMap; } /** * 最近活跃端口时间五分钟数据 * * @return List */ public List getPortActiveList() { List list = new ArrayList(); TrafficPortActiveStatistic maxStatTime = trafficPortActiveStatisticDao.getMaxStatTime(); if (maxStatTime != null && maxStatTime.getStatTime() != null) { Date statTime = maxStatTime.getStatTime(); List portActiveList = trafficPortActiveStatisticDao.getPortActiveList(statTime); // 上个时间五分钟数据 if (portActiveList != null && portActiveList.size() > 0) { for (TrafficPortActiveStatistic port : portActiveList) { if (port.getPort() != null) { Map map = new HashMap(); map.put("port", port.getPort()); map.put("sum", port.getSum()); TrafficPortActiveStatistic portActiveOld = trafficPortActiveStatisticDao .getPortActiveOld(port.getPort(), statTime); if (portActiveOld != null && portActiveOld.getSum() != null) { map.put("preSum", portActiveOld.getSum()); } else { map.put("preSum", 0); } list.add(map); } } } } return list; } /** * 活跃IP最近五分钟数据TOP10 * * @return */ /* * public List ipActiveFiveMinute(Date beginDate,Date endDate) { * TrafficIpActiveStatistic maxStatTime = * trafficIpActiveStatisticDao.getMaxStatTime(); ArrayList listMap = * new ArrayList(); if (maxStatTime != null && * maxStatTime.getStatTime() != null) { Date statTime = * maxStatTime.getStatTime(); // 查询最近五分钟TOP10 ArrayList * ipListTop10 = trafficIpActiveStatisticDao.ipActiveChart(beginDate,endDate); * if (ipListTop10 != null && ipListTop10.size() > 0) { for (LinkedHashMap map : * ipListTop10) { HashMap m = new HashMap(); if (map.get("ipAddr") != null) { * String ipAddr = (String) map.get("ipAddr"); m.put("ipAddr", ipAddr); // * 根据五分钟TOP10IP,查询TOP10中每个IP最近一小时的变化 long beforeTime = beginDate.getTime(); long * afterTime = endDate.getTime(); Long inter=(afterTime - beforeTime) / (1000 * * 60 * 5); ArrayList ipList = * trafficIpActiveStatisticDao.ipActiveFiveMinute(inter,ipAddr, * beginDate,endDate); List linkList = new ArrayList(); List timeList = new * ArrayList(); if (ipList != null && ipList.size() > 0) { for * (TrafficIpActiveStatistic ip : ipList) { if (ip.getLinkNum() != null && * ip.getTime() != null) { linkList.add(ip.getLinkNum()); * timeList.add(ip.getTime()); } } } m.put("linkNum", linkList); * m.put("statTime", timeList); listMap.add(m); } } } } * * return listMap; } */ /** * 获取活跃IPtop10 的趋势图 */ public List ipActiveFiveMinute(Date beginDate, Date endDate) { List listMap = new ArrayList(); List ipListTop10 = trafficIpActiveStatisticDao.ipActiveChart(beginDate, endDate); if (ipListTop10 != null && ipListTop10.size() > 0) { StringBuilder ipStr = new StringBuilder(); for (LinkedHashMap map : ipListTop10) { ipStr.append("'" + (String) map.get("ipAddr") + "',"); } if (!StringUtil.isEmpty(ipStr) && ipStr.indexOf(",") > 0) { ipStr.deleteCharAt(ipStr.lastIndexOf(",")); } // 如果所有IP在最后一个时间点的count都为0,则移除最后一个点 // 开始划分时间段,间隔5分钟 List dateRangeList = new ArrayList(); Calendar calendar = Calendar.getInstance(); calendar.setTime(beginDate); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); while (calendar.getTime().compareTo(endDate) < 0) { dateRangeList.add(calendar.getTime()); calendar.add(Calendar.MINUTE, Constants.TREND_TIME_INTERVAL); } ArrayList ipInfoList = trafficIpActiveStatisticDao .ipActiveFiveMinute(ipStr.toString(), beginDate, endDate); // 存放每个IP,每个时间点的总数 Map ipCountListMap = new HashMap(); int index = 0; for (int i = 0; i < dateRangeList.size(); i++) { // 存放一个时间点中每个IP的总数 Map ipCountMap = new HashMap(); Date date = dateRangeList.get(i); for (int j = index; j < ipInfoList.size(); j++) { TrafficIpActiveStatistic ipInfo = ipInfoList.get(j); if (ipInfo.getStatTime() != null) { if (ipInfo.getStatTime().compareTo(date) >= 0 && (i + 1 < dateRangeList.size() && ipInfo.getStatTime().compareTo(dateRangeList.get(i + 1)) < 0)) { Long num = ipInfo.getCount(); if (ipCountMap.containsKey(ipInfo.getIpAddr())) { num = num + ipCountMap.get(ipInfo.getIpAddr()); } ipCountMap.put(ipInfo.getIpAddr(), num); } else { index = j; break; } } } for (LinkedHashMap map : ipListTop10) { String ip = (String) map.get("ipAddr"); List sumList= new ArrayList(); sumList.add(date.getTime()); Long sum = 0l; if (ipCountMap.containsKey(ip)) { sum = ipCountMap.get(ip); } sumList.add(sum); if (ipCountListMap.containsKey(ip)) { List ipList = ipCountListMap.get(ip); ipList.add(sumList); } else { List iplist = new ArrayList(); iplist.add(sumList); ipCountListMap.put(ip, iplist); } } } // 整合IP计算总数 Iterator iterator = ipCountListMap.keySet().iterator(); while (iterator.hasNext()) { String ip = iterator.next() + ""; Map ipTrafficMap = new HashMap(); ipTrafficMap.put("ipAddr", ip); Long total = 0L; for (Object obj : ipCountListMap.get(ip)) { List list = (List) obj; total+=list.get(1); } ipTrafficMap.put("result", ipCountListMap.get(ip)); ipTrafficMap.put("sum", total); listMap.add(ipTrafficMap); } } return listMap; } /** * 根据活跃IP最近五分钟TOP10,查询近1小时最大值 * * @return */ public List ipActiveOneHour(Date beginDate, Date endDate) { // TrafficIpActiveStatistic maxStatTime = trafficIpActiveStatisticDao.getMaxStatTime(); ArrayList listMap = new ArrayList(); // if (maxStatTime != null && maxStatTime.getStatTime() != null) { // Date statTime = maxStatTime.getStatTime(); ArrayList list = trafficIpActiveStatisticDao.ipActiveChart(beginDate, endDate); if (list != null && list.size() > 0) { for (LinkedHashMap map : list) { if (map.get("ipAddr") != null) { String ipAddr = (String) map.get("ipAddr"); HashMap resMap = trafficIpActiveStatisticDao.ipActiveOneHour(ipAddr, beginDate, endDate); if (resMap != null) { listMap.add(resMap); } } } } // } return listMap; } /** * 活跃IP首页top10 * * @param beginDate * @param endDate * @return */ @SuppressWarnings("rawtypes") public List ipActiveChart(Date beginDate, Date endDate) { // TrafficIpActiveStatistic maxStatTime = trafficIpActiveStatisticDao.getMaxStatTime(); ArrayList list = new ArrayList<>(); // if (maxStatTime != null && maxStatTime.getStatTime() != null) { // Date statTime = maxStatTime.getStatTime(); list = trafficIpActiveStatisticDao.ipActiveChart(beginDate, endDate); if (list != null && list.size() > 0) { for (LinkedHashMap map : list) { if (map.get("ipAddr") != null) { Map m = new LinkedHashMap(); map.put("pktNum", 0); map.put("byteLen", 0); } } } // } return list; } /** * 协议统计 * * @return */ public List protocolChart() { TrafficProtocolStatistic maxStatTime = trafficProtocolStatisticDao.getMaxStatTime(); List list = new ArrayList(); if (maxStatTime != null && maxStatTime.getStatTime() != null) { Date statTime = maxStatTime.getStatTime(); list = trafficProtocolStatisticDao.protocolChart(statTime); // 当不查询包,字节时 设为0 if (list != null && list.size() > 0) { Map map = new HashMap(); map.put("pktNum", 0); map.put("byteLen", 0); } } return list; } /** * 协议统计报表 * * @return */ public List getProtocolList(String startTime, String endTime, Integer[] protoType) { // TrafficProtocolStatistic maxStatTime = trafficProtocolStatisticDao.getMaxStatTime(); List list = new ArrayList(); // if (maxStatTime != null && maxStatTime.getStatTime() != null) { // Date statTime = maxStatTime.getStatTime(); list = trafficProtocolStatisticDao.getProtocolList(startTime, endTime, protoType); // } return list; } /** * app应用top10 图 * * @return */ public List appChart() { List list = new ArrayList(); TrafficAppStatistic maxStatTime = trafficAppStatisticDao.getMaxStatTime(); if (maxStatTime != null && maxStatTime.getStatTime() != null) { Date statTime = maxStatTime.getStatTime(); list = trafficAppStatisticDao.appChart(statTime); // 当不查询包,字节时 设为0 if (list != null && list.size() > 0) { Map map = new HashMap(); map.put("pktNum", 0); map.put("byteLen", 0); } } return list; } /** * App统计报表 * * @return */ public List getAppList(String startTime, String endTime, Integer[] appType) { // TrafficAppStatistic maxStatTime = trafficAppStatisticDao.getMaxStatTime(); List list = new ArrayList(); // if (maxStatTime != null && maxStatTime.getStatTime() != null) { // Date statTime = maxStatTime.getStatTime(); list = trafficAppStatisticDao.getAppList(startTime, endTime, appType); // } return list; } // 操作系统列表 排名TOP10 @SuppressWarnings({ "unchecked", "rawtypes" }) public List systemList() { List result = new ArrayList(); TrafficUaStatistic maxStatTime = trafficUaStatisticDao.getMaxStatTime(); if (maxStatTime != null) { Date statTime = maxStatTime.getStatTime(); List list = trafficUaStatisticDao.systemList(statTime); Long preCount = 0l; for (TrafficUaStatistic ua : list) { Map map = new HashMap(); map.put("osType", ua.getOsType()); map.put("count", ua.getCount()); map.put("pktNum", 0); map.put("byteLen", 0); preCount = trafficUaStatisticDao.preSystemListCount(ua.getOsType(), statTime);// 上个时段的量 用于与现在对比 if (preCount != null) { map.put("preCount", preCount); } else { map.put("preCount", 0); } result.add(map); } } return result; } public List getBrowserBySystem(Integer osType) { List list = new ArrayList(); TrafficUaStatistic maxStatTime = trafficUaStatisticDao.getMaxStatTime(); if (maxStatTime != null) { Date statTime = maxStatTime.getStatTime(); list = trafficUaStatisticDao.getBrowserBySystem(osType, statTime); List bsType = new ArrayList(); // 查新固定操系统下的除了TOP10以外的others if (list != null && list.size() > 0) { for (Map map : list) { bsType.add(map.get("bsType")); } if (list.size() > 10) { Map others = new HashMap(); others = trafficUaStatisticDao.systemOthers(bsType, osType, statTime); if (others != null && others.size() > 0) { others.put("bsType", "-1"); list.add(others); } } } } return list; } public List browserList() { List result = new ArrayList(); TrafficUaStatistic maxStatTime = trafficUaStatisticDao.getMaxStatTime(); if (maxStatTime != null) { Date statTime = maxStatTime.getStatTime(); List list = trafficUaStatisticDao.browserList(statTime); Long preCount = 0l; if (list != null && list.size() > 0) { for (TrafficUaStatistic ua : list) { Map map = new HashMap(); map.put("bsType", ua.getBsType()); map.put("count", ua.getCount()); map.put("pktNum", 0); map.put("byteLen", 0); preCount = trafficUaStatisticDao.preBrowserListCount(ua.getBsType(), statTime);// 上个时段的量 用于与现在对比 if (preCount != null) { map.put("preCount", preCount); } else { map.put("preCount", 0); } result.add(map); } } } return result; } public List getSystemBybrowser(Integer bsType) { List list = new ArrayList(); TrafficUaStatistic maxStatTime = trafficUaStatisticDao.getMaxStatTime(); if (maxStatTime != null) { Date statTime = maxStatTime.getStatTime(); list = trafficUaStatisticDao.getSystemBybrowser(bsType, statTime); List osType = new ArrayList(); // 查询固定操系统下的除了TOP10以外的others if (list != null && list.size() > 0) { for (Map map : list) { osType.add(map.get("osType")); } if (list.size() > 10) { Map others = new HashMap(); others = trafficUaStatisticDao.browserOthers(osType, bsType, statTime); if (others != null && others.size() > 0) { others.put("osType", "-1"); list.add(others); } } } } return list; } /** * * 网站子域名详情 * * @param beginDate * @param endDate * @return */ public List getWebsiteDetailsById(Integer websiteServiceId, Date beginDate, Date endDate) { List list = null; if (beginDate != null && endDate != null) { list = getDomainByWebsiteServiceId(websiteServiceId, beginDate, endDate, null); } else { Date startTime = getBeforeByHourTime(1);// 获取上一个小时 list = getDomainByWebsiteServiceId(websiteServiceId, startTime, new Date(), "top"); } return list; } /** * 根据网站服务查询子域名 * * @param websiteServiceId * @return list */ public List getDomainByWebsiteServiceId(Integer websiteServiceId, Date beginDate, Date endDate, String top) { // Date statTime = getBeforeByHourTime(1);// 获取上一个小时 List idList = trafficHttpStatisticDao.getIdByWebSiteId(websiteServiceId); List matchList = trafficHttpStatisticDao.getDomainByWebsiteServiceId(idList, beginDate, endDate);// 获取webid和count的对应关系,key是webid,val是count // 获取webid和count的对应关系,key是webid,val是count Set set = new HashSet<>(); Map> countMap = new HashMap();// 存储count和map的对应关系,后面根据count过滤,获取top10的count for (Map map : matchList) { String countStr = String.valueOf(map.get("count")); long count = Long.parseLong(countStr); set.add(count); if (countMap.containsKey(count)) {// 将每个count和对应的viewmap放到map中,count可能相同所以value是list countMap.get(count).add(map); } else { List listMap = new ArrayList<>(); listMap.add(map); countMap.put(count, listMap); } } List top10Data = new ArrayList(); if (top != null) { top10Data = getTop10Data(set, countMap, 1); } else { top10Data = getTop10Data(set, countMap, 2); } List notTop10List = new ArrayList<>();// 获取不在top10中的webid,用来查询标记为orther for (Map map : matchList) { String webIdStr = String.valueOf(map.get("webId")); boolean exist = false; for (Map map1 : top10Data) { String webIdStr1 = String.valueOf(map1.get("webId")); if (webIdStr1 != null && webIdStr != null && webIdStr1.equals(webIdStr)) { exist = true; } if (!exist) { notTop10List.add(webIdStr); } } } // 查询固定网站下的域名除了TOP10以外的others域名 if (matchList != null && matchList.size() > 10) { Map others = trafficHttpStatisticDao.websiteDomainOthers(notTop10List, beginDate, endDate); if (others != null && others.size() > 0) { others.put("webId", "-1"); top10Data.add(others); } } return top10Data; } /** * * 网站详情 * * @param beginDate * @param endDate * @return */ public List getWebsiteDetails(Date beginDate, Date endDate, Integer domain[], Integer entranceId) { List list = trafficHttpStatisticDao.getTrafficHttpDomain(beginDate, endDate, domain, entranceId); return list; } /** * * 网站TOP10 默认一小时 * * @param beginDate * @param endDate * @return */ public List getWebsiteTop10() { Date startTime = getBeforeByHourTime(1);// 获取上一个小时 List list = getDomainByWebsiteList(startTime, new Date(), "top"); return list; } /** * 获取网站列表 * * @return */ @SuppressWarnings("unchecked") public List getDomainByWebsiteList(Date beginDate, Date endDate, String top) { Map> websiteIdAndIdMap = new HashMap<>();// 存储websiteServiceId和id的对应关系,一个websiteServiceId有多个id List websiteIdAndidList = trafficHttpStatisticDao.getDomainByWebsiteList(beginDate, endDate);// 获取website_service_id和id的对应关系,group // by // website_service_id,id for (Map map : websiteIdAndidList) { Object websiteServiceIdObj = map.get("websiteServiceId"); Object idObj = map.get("id"); if (websiteServiceIdObj != null && idObj != null) { if (websiteIdAndIdMap.containsKey(String.valueOf(websiteServiceIdObj))) { websiteIdAndIdMap.get(String.valueOf(websiteServiceIdObj)).add(String.valueOf(idObj)); } else { List list = new ArrayList<>(); list.add(String.valueOf(idObj)); websiteIdAndIdMap.put(String.valueOf(websiteServiceIdObj), list); } } } Set set = new HashSet<>(); Map> countAndViewMap = new HashMap<>();// 存储count和map的对应关系,后面根据count过滤,获取top10的count List webIdAndCountList = trafficHttpStatisticDao.getHttpStatisticNoLinkAndPkt(beginDate, endDate);// 获取最近一小时的webid和count的关系 List prevWebIdAndCountList = trafficHttpStatisticDao.getHttpStatisticNoLinkAndPkt(getBeforeByHourTime(2), beginDate);// 获取最近一小时的webid和count的关系 for (String websiteServiceId : websiteIdAndIdMap.keySet()) {// 遍历上面获取的websiteServiceId和id的对应关系,拼接json Map viewMap = new HashMap<>(); long count = 0l;// 记录当前websiteServiceId所有的count long prevCount = 0l;// 记录当前websiteServiceId所有的count List idList = websiteIdAndIdMap.get(websiteServiceId);// 根据websiteServiceId获取对应的id for (String id : idList) { for (Map webIdAndCountMap : webIdAndCountList) {// 遍历webid和count String webId = String.valueOf(webIdAndCountMap.get("webId")); if (webId != null && webId.equals(id)) {// 如果webid和id相等则获取count数据并统计 String countStr = String.valueOf(webIdAndCountMap.get("byteCount")); if (countStr != null) { count += Long.parseLong(countStr);// 将count累加 } } } for (Map webIdAndCountMap : prevWebIdAndCountList) {// 遍历webid和count String webId = String.valueOf(webIdAndCountMap.get("webId")); if (webId != null && webId.equals(id)) {// 如果webid和id相等则获取count数据并统计 String countStr = String.valueOf(webIdAndCountMap.get("byteCount")); if (countStr != null) { prevCount += Long.parseLong(countStr);// 将count累加 } } } } viewMap.put("websiteServiceId", websiteServiceId); viewMap.put("count", count); viewMap.put("pktNum", 0); viewMap.put("byteLen", 0); viewMap.put("preCount", prevCount); if (countAndViewMap.containsKey(count)) {// 将每个count和对应的viewmap放到map中,count可能相同所以value是list countAndViewMap.get(count).add(viewMap); } else { List listMap = new ArrayList<>(); listMap.add(viewMap); countAndViewMap.put(count, listMap); } set.add(count); } List dataList = new ArrayList(); if (top != null) { dataList = getTop10Data(set, countAndViewMap, 1);// 取top10 } else { dataList = getTop10Data(set, countAndViewMap, 2); } return dataList; } /** * * 主题详情 * * @param beginDate * @param endDate * @return */ public List getTopicDetails(Date beginDate, Date endDate) { List topicAndDomainList = getTopicAndDomainList(beginDate, endDate, null); return topicAndDomainList; } /** * * 主题TOP10 默认一小时 * * @param beginDate * @param endDate * @return */ public List getTopicTop10() { Date startTime = getBeforeByHourTime(1);// 获取上一个小时 List topicAndDomainList = getTopicAndDomainListNoLink(startTime, new Date(), "top"); return topicAndDomainList; } /** * 主题网站分类,域名 * **/ public List getTopicAndDomainListNoLink(Date beginDate, Date endDate, String top) { Map> topicIdAndIdMap = new HashMap<>();// 存储topicid和id的对应关系,一个topicid有多个id List topicIdAndIdList = trafficHttpStatisticDao.getDomainByTopicList(beginDate, endDate);// 获取最近一个小时topicId和id的对应关系,group for (Map map : topicIdAndIdList) { Object topicIdObj = map.get("topicId"); Object idObj = map.get("id"); if (topicIdObj != null && idObj != null) { if (topicIdAndIdMap.containsKey(String.valueOf(topicIdObj))) { topicIdAndIdMap.get(String.valueOf(topicIdObj)).add(String.valueOf(idObj)); } else { List list = new ArrayList<>(); list.add(String.valueOf(idObj)); topicIdAndIdMap.put(String.valueOf(topicIdObj), list); } } } Set set = new HashSet<>(); Map> countAndViewMap = new HashMap<>();// 存储count和map的对应关系,后面根据count过滤,获取top10的count List webIdAndCountList = trafficHttpStatisticDao.getHttpStatisticNoLinkAndPkt(beginDate, endDate);// 获取最近一小时的webid和count的关系 for (String topicId : topicIdAndIdMap.keySet()) {// 遍历上面获取的topicid和id的对应关系,拼接json Map viewMap = new HashMap<>(); List list = new ArrayList<>(); long count = 0l;// 记录当前topicid所有的count // long linkNum = 0l; // long packets = 0l; List idList = topicIdAndIdMap.get(topicId);// 根据topicid获取对应的id for (String id : idList) { for (Map webIdAndCountMap : webIdAndCountList) {// 遍历webid和count String webId = String.valueOf(webIdAndCountMap.get("webId")); if (webId != null && webId.equals(id)) {// 如果webid和id相等则获取count数据并统计 String countStr = String.valueOf(webIdAndCountMap.get("byteCount")); // String linkNumStr = String.valueOf(webIdAndCountMap.get("linkNum")); // String packetsStr = String.valueOf(webIdAndCountMap.get("pktCount")); if (countStr != null) { count += Long.parseLong(countStr);// 将count累加 转换单位小于0的不加 } // if (linkNumStr != null) { // linkNum += Long.parseLong(linkNumStr);// 将count累加 // } // if (packetsStr != null) { // packets += Long.parseLong(packetsStr);// 将count累加 // } // webIdAndCountMap.remove("linkNum"); // webIdAndCountMap.remove("pktCount"); list.add(webIdAndCountMap); } } } Collections.sort(list, new Comparator() { @Override public int compare(Object o1, Object o2) { if (o1 == null && o2 != null) { return 1; } if (o1 != null && o2 == null) { return -1; } if (o1 == o2 && o1 == null) { return 0; } Map m1 = (Map) o1; Map m2 = (Map) o2; Object ob1 = m1.get("byteCount"); Object ob2 = m2.get("byteCount"); Long b1 = Long.parseLong(ob1.toString()); Long b2 = Long.parseLong(ob2.toString()); return -(b1).compareTo(b2); } }); if (list.size() > 0) { viewMap.put("count", count); // viewMap.put("linkNum", linkNum); // viewMap.put("packets", packets); viewMap.put("domainData", list); viewMap.put("topicId", topicId); if (countAndViewMap.containsKey(count)) {// 将每个count和对应的viewmap放到map中,count可能相同所以value是list countAndViewMap.get(count).add(viewMap); } else { List listMap = new ArrayList<>(); listMap.add(viewMap); countAndViewMap.put(count, listMap); } set.add(count); } } List dataList = new ArrayList(); if (top != null) { dataList = getTop10Data(set, countAndViewMap, 1); } else { dataList = getTop10Data(set, countAndViewMap, 2); } return dataList; } public List getTopicAndDomainList(Date beginDate, Date endDate, String top) { Map> topicIdAndIdMap = new HashMap<>();// 存储topicid和id的对应关系,一个topicid有多个id List topicIdAndIdList = trafficHttpStatisticDao.getDomainByTopicList(beginDate, endDate);// 获取最近一个小时topicId和id的对应关系,group for (Map map : topicIdAndIdList) { Object topicIdObj = map.get("topicId"); Object idObj = map.get("id"); if (topicIdObj != null && idObj != null) { if (topicIdAndIdMap.containsKey(String.valueOf(topicIdObj))) { topicIdAndIdMap.get(String.valueOf(topicIdObj)).add(String.valueOf(idObj)); } else { List list = new ArrayList<>(); list.add(String.valueOf(idObj)); topicIdAndIdMap.put(String.valueOf(topicIdObj), list); } } } Set set = new HashSet<>(); Map> countAndViewMap = new HashMap<>();// 存储count和map的对应关系,后面根据count过滤,获取top10的count List webIdAndCountList = trafficHttpStatisticDao.getTrafficHttpStatistic(beginDate, endDate);// 获取最近一小时的webid和count的关系 for (String topicId : topicIdAndIdMap.keySet()) {// 遍历上面获取的topicid和id的对应关系,拼接json Map viewMap = new HashMap<>(); List list = new ArrayList<>(); long count = 0l;// 记录当前topicid所有的count long linkNum = 0l; long packets = 0l; List idList = topicIdAndIdMap.get(topicId);// 根据topicid获取对应的id for (String id : idList) { for (Map webIdAndCountMap : webIdAndCountList) {// 遍历webid和count String webId = String.valueOf(webIdAndCountMap.get("webId")); if (webId != null && webId.equals(id)) {// 如果webid和id相等则获取count数据并统计 String countStr = String.valueOf(webIdAndCountMap.get("byteCount")); String linkNumStr = String.valueOf(webIdAndCountMap.get("linkNum")); String packetsStr = String.valueOf(webIdAndCountMap.get("pktCount")); if (countStr != null) { count += Long.parseLong(countStr);// 将count累加 } if (linkNumStr != null) { linkNum += Long.parseLong(linkNumStr);// 将count累加 } if (packetsStr != null) { packets += Long.parseLong(packetsStr);// 将count累加 } webIdAndCountMap.remove("linkNum"); webIdAndCountMap.remove("pktCount"); list.add(webIdAndCountMap); } } } if (list.size() > 0) { viewMap.put("count", count); viewMap.put("linkNum", linkNum); viewMap.put("packets", packets); viewMap.put("domainData", list); viewMap.put("topicId", topicId); if (countAndViewMap.containsKey(count)) {// 将每个count和对应的viewmap放到map中,count可能相同所以value是list countAndViewMap.get(count).add(viewMap); } else { List listMap = new ArrayList<>(); listMap.add(viewMap); countAndViewMap.put(count, listMap); } set.add(count); } } List dataList = new ArrayList(); if (top != null) { dataList = getTop10Data(set, countAndViewMap, 1); } else { dataList = getTop10Data(set, countAndViewMap, 2); } return dataList; } public String[] getFiledTypeByName(String fieldName) { if (fieldName == null) { return null; } String fieldType = null; if ("addr_type".equals(fieldName)) { fieldType = ntcTotalReportDao.getAddrType(); } if ("trans_type".equals(fieldName)) { fieldType = ntcTotalReportDao.getTransType(); } if ("entrance_id".equals(fieldName)) { fieldType = ntcTotalReportDao.getEntranceId(); } return fieldType == null ? null : fieldType.split(","); } public Map getBandwidthTransEntrance(String beginDate, String endDate,String searchQuotaType) throws ParseException { Map resultMap = new HashMap(); Map> listMap = new HashMap>(); List bandwidthListIPvx = new ArrayList(); List bandwidthListProtocol = new ArrayList(); bandwidthListIPvx = ntcTotalReportDao.getBandwidthTransIPVx(beginDate, endDate); bandwidthListProtocol = ntcTotalReportDao.getBandwidthTransProtocol(beginDate, endDate); Map trafficMap = new HashMap(); if ((!StringUtil.isEmpty(bandwidthListIPvx) && bandwidthListIPvx.size() > 0) || (!StringUtil.isEmpty(bandwidthListProtocol) && bandwidthListProtocol.size() > 0)) { // 划分时间段 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date startTime = sdf.parse(beginDate); Date endTime = sdf.parse(endDate); List dateRangeList = new ArrayList(); Calendar calendar = Calendar.getInstance(); calendar.setTime(startTime); while (calendar.getTime().compareTo(endTime) < 0) { dateRangeList.add(calendar.getTime()); calendar.add(Calendar.MINUTE, Constants.TREND_TIME_INTERVAL); } String[] addrTypes = getFiledTypeByName("addr_type"); String[] transTypes = getFiledTypeByName("trans_type"); String[] entranceIds = getFiledTypeByName("entrance_id"); if (bandwidthListIPvx != null && bandwidthListIPvx.size() > 0 && bandwidthListProtocol != null && bandwidthListProtocol.size() > 0 && addrTypes != null && addrTypes.length > 0 && transTypes != null && transTypes.length > 0 && entranceIds != null && entranceIds.length > 0) { // 按区域和类型构建Map for (String entranceId : entranceIds) { for (String addrType : addrTypes) { listMap.put("ipv" + addrType + "Type" + entranceId, new ArrayList()); } } for (String entranceId : entranceIds) { for (String transType : transTypes) { listMap.put("trans" + transType + "Type" + entranceId, new ArrayList()); } } // 按区域和类型提取数据到列表中 for (TrafficTransStatistic tts : bandwidthListIPvx) { String addrType = tts.getAddrType(); Integer entranceId = tts.getEntranceId(); Integer transType = tts.getTransType(); String key = "ipv" + addrType + "Type" + entranceId; listMap.get(key).add(tts); } for (TrafficTransStatistic tts : bandwidthListProtocol) { String addrType = tts.getAddrType(); Integer entranceId = tts.getEntranceId(); Integer transType = tts.getTransType(); String key = "trans" + transType + "Type" + entranceId; listMap.get(key).add(tts); } Set>> entrySet = listMap.entrySet(); for (Entry> entry : entrySet) { String key = entry.getKey(); String entranceId = key.substring(key.length() - 1); ArrayList value = entry.getValue(); resultMap.put(key, getNewData(dateRangeList,value,searchQuotaType)); } } } return resultMap; } private Map getNewData(List dateRangeList,List bandwidthList,String searchQuotaType) { Map restMap = new HashMap(); List restList = new ArrayList(); int index = 0; Long sum = 0l; for (int i = 0; i < dateRangeList.size(); i++) { Date date = dateRangeList.get(i); List countList = new ArrayList(); countList.add(date.getTime()); long num = 0l; for (int j = index; j < bandwidthList.size(); j++) { TrafficTransStatistic info = bandwidthList.get(j); if (info.getStatTime() != null) { if (info.getStatTime().compareTo(date) >= 0 && (i + 1 < dateRangeList.size()?info.getStatTime().compareTo(dateRangeList.get(i + 1)) < 0:true)) { if ("pps".equalsIgnoreCase(searchQuotaType)) { num = Long.parseLong(info.getPps().substring(0, info.getPps().lastIndexOf("."))) + num; }else if ("linkNumber".equalsIgnoreCase(searchQuotaType)) { num = Long.parseLong(info.getPps().substring(0, info.getPps().lastIndexOf("."))) + num; }else { num = Long.parseLong(info.getGbps().substring(0, info.getGbps().lastIndexOf(".")))+ num; } } else { index = j; break; } } } countList.add(num); sum+=num; restList.add(countList); } restMap.put("sum", sum); restMap.put("result", restList); return restMap; } /** * * @param beginDate * @param endDate * @param domain * @param entranceId * @return */ /* * public List getDomainTrans(String beginDate, String endDate, Integer * domain, Integer entranceId) { List listMap = new * ArrayList(); HashMap resulMap = new HashMap(); * List domainList = new * ArrayList(); domainList = * trafficHttpStatisticDao.getDomainTrans(entranceId, beginDate, endDate, * domain); List timeList = new ArrayList(); List countList = new ArrayList(); * if (domainList != null && domainList.size() > 0) { Map m * = new HashMap(); int inter = 1000 * 60 * 30;// 间隔时间为30分钟 * // 开始时间,结束时间 时间戳 Long b = dateToStamp(beginDate); Long e = * dateToStamp(endDate); int num = 0; Long pointTime = b; while (pointTime < e) * { Map rm = new HashMap(); Long sumL = 0l; if (pointTime >= e) { break; // 停止 * } for (TrafficHttpFocusStatistic tt : domainList) { // 实际时间 String time = * tt.getTime(); Long t = dateToStamp(time); if (t >= pointTime && t < pointTime * + inter) { // 范围之内分到此pointTime组 sumL = sumL + tt.getCount(); } } // * 在结束时间只有当值大于0时才记录数据,防止折线降为0引起误会 if (pointTime >= e - inter && sumL > 0) { * countList.add(sumL); timeList.add(stampToDate(pointTime)); } if (pointTime < * e - inter) { timeList.add(stampToDate(pointTime)); countList.add(sumL); } num * = num + 1; pointTime = b + inter * num; } resulMap.put("count", countList); * resulMap.put("statTime", timeList); listMap.add(resulMap); } return listMap; * } */ /** * 优化后的网站详情域名趋势查询 * * @param beginDate * @param endDate * @param domain * @param entranceId * @return */ public List getDomainTrans2(String begin, String end, Integer domain, Integer entranceId) { List domainList = new ArrayList(); domainList = trafficHttpStatisticDao.getDomainTrans(entranceId, begin, end, domain); List listMap = new ArrayList(); if(!StringUtil.isEmpty(domainList)){ Date beginDate = DateUtils.parseDate(begin); Date endDate = DateUtils.parseDate(end); List dateRangeList = new ArrayList(); Calendar calendar = Calendar.getInstance(); calendar.setTime(beginDate); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); while (calendar.getTime().compareTo(endDate) < 0) { dateRangeList.add(calendar.getTime()); calendar.add(Calendar.MINUTE, Constants.TREND_TIME_INTERVAL); } // 存放每个时间点的总数 Map> ipCountListMap = new HashMap>(); int index = 0; List resultList = new ArrayList(); Long total = 0L; for (int i = 0; i < dateRangeList.size(); i++) { // 存放一个时间点中总数 List sumList = new ArrayList(); Date date = dateRangeList.get(i); Long num = 0L; for (int j = index; j < domainList.size(); j++) { TrafficHttpFocusStatistic ipInfo = domainList.get(j); if (ipInfo.getStatTime() != null) { if (ipInfo.getStatTime().compareTo(date) >= 0 && (i + 1 < dateRangeList.size()?ipInfo.getStatTime().compareTo(dateRangeList.get(i + 1)) < 0:true)) { num = num + ipInfo.getCount(); } else { index = j; break; } } } sumList.add(date.getTime()); sumList.add(num); resultList.add(sumList); total+=num; } // 整合 count time HashMap ipTrafficMap = new HashMap(); ipTrafficMap.put("result", resultList); ipTrafficMap.put("sum", total); listMap.add(ipTrafficMap); } return listMap; } /** * 获取活跃Port top10 的趋势图 * * @throws ParseException */ public List findTrafficPortActive(String beginDate, String endDate, Integer[] portArray) throws ParseException { List listMap = new ArrayList(); StringBuilder portStr = new StringBuilder(); List portListTop10 = null; if (portArray != null && portArray.length > 0) {// 如果有传人参数,获取传人参数 for (int pi = 0; pi < portArray.length; pi++) { portStr.append("'" + portArray[pi] + "',"); } } else {// 否则获取TOP10 portListTop10 = trafficPortActiveStatisticDao.findTrafficPortActiveTopN(beginDate, endDate); for (LinkedHashMap map : portListTop10) { portStr.append("'" + map.get("port") + "',"); } } if (!StringUtil.isEmpty(portStr) && portStr.indexOf(",") > 0) { portStr.deleteCharAt(portStr.lastIndexOf(",")); } Date beginDate1 = DateUtils.strToDate(beginDate, "yyyy-MM-dd HH:mm:ss"); Date endDate1 = DateUtils.strToDate(endDate, "yyyy-MM-dd HH:mm:ss"); // if (portListTop10 != null && portListTop10.size() > 0) { // StringBuilder portStr = new StringBuilder(); if (!StringUtil.isEmpty(portStr)) { // 如果所有IP在最后一个时间点的count都为0,则移除最后一个点 // 开始划分时间段,间隔5分钟 List dateRangeList = new ArrayList(); Calendar calendar = Calendar.getInstance(); calendar.setTime(beginDate1); while (calendar.getTime().compareTo(endDate1) < 0) { dateRangeList.add(calendar.getTime()); calendar.add(Calendar.MINUTE, Constants.TREND_TIME_INTERVAL); } ArrayList portInfoList = trafficPortActiveStatisticDao .findTrafficPortActive(beginDate, endDate, portStr.toString()); // 存放每个IP,每个时间点的总数 Map> portCountListMap = new HashMap>(); int index = 0; for (int i = 0; i < dateRangeList.size(); i++) { // 存放一个时间点中每个IP的总数 Map portCountMap = new HashMap(); Date date = dateRangeList.get(i); for (int j = index; j < portInfoList.size(); j++) { TrafficPortActiveStatistic portInfo = portInfoList.get(j); if (portInfo.getStatTime() != null) { if (portInfo.getStatTime().compareTo(date) >= 0 && (i + 1 < dateRangeList.size()?portInfo.getStatTime().compareTo(dateRangeList.get(i + 1)) < 0:true)) { Long num = portInfo.getSum(); if (portCountMap.containsKey(portInfo.getPort())) { num = num + portCountMap.get(portInfo.getPort()); } portCountMap.put(portInfo.getPort().toString(), num); } else { index = j; break; } } } if (portArray != null && portArray.length > 0) {// 如果有传人参数,获取传人参数 for (int m = 0; m < portArray.length; m++) { String port = portArray[m].toString(); List sumList = new ArrayList(); sumList.add(date.getTime()); Long sum = 0l; if (portCountMap.containsKey(port)) { sum = portCountMap.get(port); } sumList.add(sum); if (portCountListMap.containsKey(port)) { List list = portCountListMap.get(port); list.add(sumList); } else { List list = new ArrayList(); list.add(sumList); portCountListMap.put(port, list); } } } else if (portListTop10 != null) { for (LinkedHashMap map : portListTop10) { String port = map.get("port").toString(); List sumList = new ArrayList(); sumList.add(date.getTime()); Long sum = 0l; if (portCountMap.containsKey(port)) { sum = portCountMap.get(port); } sumList.add(sum); if (portCountListMap.containsKey(port)) { List list = portCountListMap.get(port); list.add(sumList); } else { List list = new ArrayList(); list.add(sumList); portCountListMap.put(port, list); } } } } // 整合port sum time Iterator iterator = portCountListMap.keySet().iterator(); while (iterator.hasNext()) { String port = iterator.next() + ""; Map trafficPortActiveMap = new HashMap(); Long total = 0L; for (Object obj : portCountListMap.get(port)) { List list = (List) obj; total+=list.get(1); } trafficPortActiveMap.put("port", port); trafficPortActiveMap.put("result", portCountListMap.get(port)); trafficPortActiveMap.put("sum", total); listMap.add(trafficPortActiveMap); } } return listMap; } /** * 根据指标(drop,loop,New Link,Close Link,Pass,Live Link)统计各业务的趋势 * @throws ParseException */ public Map trendTotalReport(NtcConnNumReport ntcConnNumReport){ Map restMap = new HashMap(); List list = ntcTotalReportDao.trendTotalReport(ntcConnNumReport); if (list!=null && list.size()>0) { //开始划分时间段,间隔5分钟 Date beginDate; Date endDate; try { beginDate = DateUtils.strToDate(ntcConnNumReport.getSearchReportStartTime(), "yyyy-MM-dd HH:mm:ss"); endDate = DateUtils.strToDate(ntcConnNumReport.getSearchReportEndTime(), "yyyy-MM-dd HH:mm:ss"); } catch (ParseException e) { // TODO Auto-generated catch block throw new RestServiceException("searchReportStartTime或searchReportEndTime参数格式错误", RestBusinessCode.param_formate_error.getValue()); } List dateRangeList = new ArrayList(); List strDateRangeList = new ArrayList(); Calendar calendar = Calendar.getInstance(); calendar.setTime(beginDate); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); while (calendar.getTime().compareTo(endDate)<0) { dateRangeList.add(calendar.getTime()); calendar.add(Calendar.MINUTE, Constants.TREND_TIME_INTERVAL); } int index = 0; List sumList = new ArrayList(); Long totalNum = 0L; for (int i = 0; i < dateRangeList.size(); i++) { //存放一个时间点中每个IP的总数 List tempList = new ArrayList(); Map ipCountMap = new HashMap(); Date date = dateRangeList.get(i); Long sum = 0l; for (int j = index; j < list.size(); j++) { NtcConnNumReport info = list.get(j); if (info.getReportTime()!=null){ if(info.getReportTime().compareTo(date)>=0&&(i+1 appFocusList = new ArrayList(); appFocusList = trafficAppStatisticDao.getAppTrend(entity); Map resultMap = new HashMap(); if(!StringUtil.isEmpty(appFocusList)){ Date beginDate = DateUtils.parseDate(entity.getSearchStartTime()); Date endDate = DateUtils.parseDate(entity.getSearchEndTime()); List dateRangeList = new ArrayList(); Calendar calendar = Calendar.getInstance(); calendar.setTime(beginDate); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); while (calendar.getTime().compareTo(endDate) < 0) { dateRangeList.add(calendar.getTime()); calendar.add(Calendar.MINUTE, 1); } // 存放每个时间点的总数 Map> ipCountListMap = new HashMap>(); int index = 0; List resultSipList = new ArrayList(); List resultDipList = new ArrayList(); Long sipTotal = 0L; Long dipTotal = 0L; for (int i = 0; i < dateRangeList.size(); i++) { // 存放一个时间点中总数 List sipList = new ArrayList(); List dipList = new ArrayList(); Date date = dateRangeList.get(i); Long sipNum = 0L; Long dipNum = 0L; for (int j = index; j < appFocusList.size(); j++) { TrafficAppFocusStatistic info = appFocusList.get(j); if (info.getTime() != null) { if (info.getTime().compareTo(date) >= 0 && (i + 1 < dateRangeList.size()?info.getTime().compareTo(dateRangeList.get(i + 1)) < 0:true)) { sipNum = sipNum + info.getSipNum(); dipNum = dipNum + info.getDipNum(); } else { index = j; break; } } } sipList.add(date.getTime()); sipList.add(sipNum); resultSipList.add(sipList); dipList.add(date.getTime()); dipList.add(dipNum); resultDipList.add(dipList); sipTotal+=sipNum; dipTotal+=dipNum; } resultMap.put("sipResult", resultSipList); resultMap.put("dipResult", resultDipList); resultMap.put("sipSum", sipTotal); resultMap.put("dipSum", dipTotal); } return resultMap; } public List appConnRecordTop100(AppConnRecordStatistic entity) { List list = new ArrayList(); list = trafficAppStatisticDao.appConnRecordTop100(entity); return list; } }