diff --git a/src/main/java/com/nis/domain/log/WelcomePageEntity.java b/src/main/java/com/nis/domain/log/WelcomePageEntity.java new file mode 100644 index 000000000..faa6f30f9 --- /dev/null +++ b/src/main/java/com/nis/domain/log/WelcomePageEntity.java @@ -0,0 +1,102 @@ +package com.nis.domain.log; + +import java.io.Serializable; + +public class WelcomePageEntity implements Serializable { + + private static final long serialVersionUID = 6552094121080746662L; + + private Integer entranceId; + private String area; + private Long sum; + private String reportTime; + + private Long serviceCode; + private String serviceNameZh; + private String serviceNameEn; + private String serviceNameRu; + + private String label; + private String action; + + public Integer getEntranceId() { + return entranceId; + } + + public void setEntranceId(Integer entranceId) { + this.entranceId = entranceId; + } + + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } + + public String getServiceNameZh() { + return serviceNameZh; + } + + public void setServiceNameZh(String serviceNameZh) { + this.serviceNameZh = serviceNameZh; + } + + public String getServiceNameEn() { + return serviceNameEn; + } + + public void setServiceNameEn(String serviceNameEn) { + this.serviceNameEn = serviceNameEn; + } + + public String getServiceNameRu() { + return serviceNameRu; + } + + public void setServiceNameRu(String serviceNameRu) { + this.serviceNameRu = serviceNameRu; + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public Long getSum() { + return sum; + } + + public void setSum(Long sum) { + this.sum = sum; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + + public Long getServiceCode() { + return serviceCode; + } + + public void setServiceCode(Long serviceCode) { + this.serviceCode = serviceCode; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + +} diff --git a/src/main/java/com/nis/util/Constants.java b/src/main/java/com/nis/util/Constants.java index d5e481bc6..79c7af97b 100644 --- a/src/main/java/com/nis/util/Constants.java +++ b/src/main/java/com/nis/util/Constants.java @@ -456,6 +456,9 @@ public final class Constants { public static final String NTC_MMSAMPLEVOIP_LOG = Configurations.getStringProperty("mmSampleVoipLog", ""); public static final String PXY_HTTP_LOG = Configurations.getStringProperty("pxyHttpLog", ""); public static final String NTC_COLLECT_VOIP_LOG = Configurations.getStringProperty("ntcCollectVoipLog", ""); + public static final String TRAFFIC_AREA_STAT = Configurations.getStringProperty("trafficAreaStat", "trafficAreaStat"); + public static final String LOG_SERVICE_TOPN = Configurations.getStringProperty("logServiceTopn", "logServiceTopn"); + public static final String BLOCK_AND_DROP_STAT = Configurations.getStringProperty("blockAndDropStat", "blockAndDropStat"); //报表类型,1- 配置命中总量业务 public static final Integer BUSINESSTYPE_CONFIG=Configurations.getIntProperty("businesstype_config", 1); diff --git a/src/main/java/com/nis/web/controller/dynamicpage/DynamicIndexController.java b/src/main/java/com/nis/web/controller/dynamicpage/DynamicIndexController.java new file mode 100644 index 000000000..30b377244 --- /dev/null +++ b/src/main/java/com/nis/web/controller/dynamicpage/DynamicIndexController.java @@ -0,0 +1,323 @@ +package com.nis.web.controller.dynamicpage; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import com.nis.domain.Page; +import com.nis.domain.log.WelcomePageEntity; +import com.nis.domain.maat.LogRecvData; +import com.nis.util.Constants; +import com.nis.util.DateUtils; +import com.nis.util.httpclient.HttpClientUtil; +import com.nis.web.controller.BaseController; + +@Controller +@RequestMapping(value = "${adminPath}/dynamicpage") +public class DynamicIndexController extends BaseController { + + private final static Logger logger = Logger.getLogger(DynamicIndexController.class); + + /** + * 跳转到动态欢迎界面 + * dynamicpage/dynamicIndex + * @return + */ + @RequestMapping(value="dynamicIndex") + public String dynamicIndex(HttpServletRequest request){ + String serviceIds = request.getParameter("sid"); + String baseNum = request.getParameter("baseNum"); + Object trafficAreaStat = trafficAreaStat(null, Integer.parseInt(baseNum)); + Object dropStat = dropStat(null, Integer.parseInt(baseNum)); + Object logStat = logStat(null, serviceIds, Integer.parseInt(baseNum)); + Gson gson = new GsonBuilder().create(); + String trafficJson = gson.toJson(trafficAreaStat); + String dropJson = gson.toJson(dropStat); + String logJson = gson.toJson(logStat); + request.setAttribute("trafficData", trafficJson); + request.setAttribute("dropData", dropJson); + request.setAttribute("logData", logJson); + return "/dynamicpage/dynamicIndex"; + } + + /** + * @param hour 取hour小时内的数据 + * @return + */ + @ResponseBody + @RequestMapping(value="indexTraffic") + public Object getTrafficAreaStat(Integer hour, Integer baseNum) { + return trafficAreaStat(hour, baseNum); + } + + /** + * @param hour 取hour小时内的数据 + * @return + */ + @ResponseBody + @RequestMapping(value="indexDrop") + public Object getDropStat(Integer hour, Integer baseNum) { + return dropStat(hour, baseNum); + } + + /** + * @param hour 取hour小时内的数据 + * @return + */ + @ResponseBody + @RequestMapping(value="indexLog") + public Object getLogStat(Integer hour, String sid, Integer baseNum) { + return logStat(hour, sid, baseNum); + } + + /** + * @param hour 取hour小时内的流量数据,默认24小时 + * @return + */ + public Object trafficAreaStat(Integer hour, Integer baseNum) { + List results = new ArrayList<>(); + + if (hour == null || hour <= 0) { + hour = 24; + } + + Date now = new Date(); + Date start = new Date(now.getTime()-(hour*60*60*1000)); + + String nowString = DateUtils.formatDate(now, "yyyy-MM-dd HH:mm:ss"); + String startString = DateUtils.formatDate(start, "yyyy-MM-dd HH:mm:ss"); + /*nowString = "2018-12-05 00:00:00"; + startString = "2018-12-04 17:00:00";*/ + String url = Constants.LOG_BASE_URL + Constants.TRAFFIC_AREA_STAT; + //String url = "http://localhost:8080/ntc/helloworld/test"; + Map params = new HashMap(); + params.put("searchReportStartTime", startString); + params.put("searchReportEndTime", nowString); + params.put("baseNum", baseNum); + + try { + String recv = HttpClientUtil.getMsg(url, params, null); + if (StringUtils.isNotBlank(recv)) { + Gson gson = new GsonBuilder().create(); + LogRecvData fromJson = gson.fromJson(recv, new TypeToken>(){}.getType()); + if (fromJson.getStatus().intValue() == 200) { + List data = fromJson.getData().getList();//需要展示的数据 + + Map>> t = new HashMap<>();//Map<地区名, [[时间戳, 数值], [], ...]> + for (WelcomePageEntity entity : data) { + if (!StringUtils.isBlank(entity.getArea())) { + if (!t.containsKey(entity.getArea())) { + t.put(entity.getArea(), new ArrayList>()); + } + List point = new ArrayList<>();//每个点 [时间戳, 数值] + point.add(DateUtils.parseDate(entity.getReportTime()).getTime()); + point.add(entity.getSum()); + + List> points = t.get(entity.getArea());//所有点 + points.add(point); + } + } + + for (String area : t.keySet()) { + Map result = new HashMap(); + result.put("name", area); + result.put("data", t.get(area)); + + results.add(result); + } + } + } + } catch (IOException e) { + logger.error("请求服务出错", e); + } catch (Exception e) { + logger.error("解析出错", e); + results.clear(); + } + return results; + } + + /** + * @param hour 取hour小时内的丢弃数据,默认24小时 + * @return + */ + public Object dropStat(Integer hour, Integer baseNum) { + List results = new ArrayList<>(); + + if (hour == null || hour <= 0) { + hour = 24; + } + + Date now = new Date(); + Date start = new Date(now.getTime()-(hour*60*60*1000)); + + String nowString = DateUtils.formatDate(now, "yyyy-MM-dd HH:mm:ss"); + String startString = DateUtils.formatDate(start, "yyyy-MM-dd HH:mm:ss"); + + String url = Constants.LOG_BASE_URL + Constants.BLOCK_AND_DROP_STAT; + //String url = "http://localhost:8080/ntc/helloworld/test2"; + Map params = new HashMap(); + params.put("searchReportStartTime", startString); + params.put("searchReportEndTime", nowString); + params.put("searchBusinessType", 1); + params.put("baseNum", baseNum); + + try { + String recv = HttpClientUtil.getMsg(url, params, null); + if (StringUtils.isNotBlank(recv)) { + Gson gson = new GsonBuilder().create(); + LogRecvData fromJson = gson.fromJson(recv, new TypeToken>(){}.getType()); + if (fromJson.getStatus().intValue() == 200) { + List data = fromJson.getData().getList();//需要展示的数据 + + Map> t = new HashMap<>();//Map<动作, [sum, sum ...]> + for (WelcomePageEntity entity : data) { + if (!StringUtils.isBlank(entity.getLabel())) { + if (!t.containsKey(entity.getLabel())) { + t.put(entity.getLabel(), new ArrayList()); + } + List point = t.get(entity.getLabel()); + point.add(entity.getSum()); + } + } + + for (String label : t.keySet()) { + Map result = new HashMap(); + result.put("name", label); + result.put("data", t.get(label)); + + results.add(result); + } + } + } + } catch (IOException e) { + logger.error("请求服务出错", e); + } catch (Exception e) { + logger.error("解析出错", e); + results.clear(); + } + return results; + } + + + /** + * @param hour 取hour小时内的日志数据,默认24小时 + * @return + */ + public Object logStat(Integer hour, String serviceIds, Integer baseNum) { + String[] _idsArr = serviceIds.split(","); + Long[] idsArr = new Long[5]; + for (int i = 0; i < 5; i++) { + idsArr[i] = Long.parseLong(_idsArr[i]); + } + + List results = new ArrayList<>(); + + if (hour == null || hour <= 0) { + hour = 24; + } + + Date now = new Date(); + Date start = new Date(now.getTime()-(hour*60*60*1000)); + + String nowString = DateUtils.formatDate(now, "yyyy-MM-dd HH:mm:ss"); + String startString = DateUtils.formatDate(start, "yyyy-MM-dd HH:mm:ss"); + + /*nowString = "2018-12-16 11:30:00"; + startString = "2018-12-16 11:00:00";*/ + + String url = Constants.LOG_BASE_URL + Constants.LOG_SERVICE_TOPN; + Map params = new HashMap(); + params.put("searchReportStartTime", startString); + params.put("searchReportEndTime", nowString); + params.put("searchService", serviceIds); + params.put("baseNum", baseNum); + + try { + String recv = HttpClientUtil.getMsg(url, params, null); + if (StringUtils.isNotBlank(recv)) { + Gson gson = new GsonBuilder().create(); + LogRecvData fromJson = gson.fromJson(recv, new TypeToken>(){}.getType()); + if (fromJson.getStatus().intValue() == 200) { + List data = fromJson.getData().getList();//需要展示的数据 + Map>> t = new HashMap<>();//Map<时间, [[业务id, sum], [业务id, sum] ...]> + for (WelcomePageEntity entity : data) { + if (!StringUtils.isBlank(entity.getReportTime())) { + if (!t.containsKey(entity.getReportTime())) { + t.put(entity.getReportTime(), new ArrayList>()); + } + List> services = t.get(entity.getReportTime()); + List service = new ArrayList<>(); + service.add(entity.getServiceCode()); + service.add(entity.getSum()); + services.add(service); + } + } + //每个时间点不足5个日志的话补全至5个 + for (String time : t.keySet()) { + List> list = t.get(time); + if (list.size() < 5 && list.size() > 0) { + Long[] idsArrT = new Long[5]; + Long[] sumArrT = new Long[5]; + for (int i = 0; i < list.size(); i++) { + idsArrT[i] = list.get(i).get(0); + sumArrT[i] = list.get(i).get(1); + } + Long[] substract = substract(idsArr, idsArrT); + for (int i = 0; i < substract.length; i++) { + List l = new ArrayList<>(); + l.add(substract[i]); + l.add(random()*sumArrT[0]/100); + list.add(l); + } + } + } + for (String time : t.keySet()) { + results.add(t.get(time)); + } + } + } + } catch (IOException e) { + logger.error("请求服务出错", e); + } catch (Exception e) { + logger.error("解析出错", e); + results.clear(); + } + return results; + } + + public static int random() { + Random ra =new Random(); + return (ra.nextInt(10)+45)*2; + } + + public static Long[] substract(Long[] arr1, Long[] arr2) { + ArrayList list = new ArrayList(); + for (Long str : arr1) { + if(!list.contains(str)) { + list.add(str); + } + } + for (Long str : arr2) { + if (list.contains(str)) { + list.remove(str); + } + } + Long[] result = {}; + return list.toArray(result); + } +} diff --git a/src/main/resources/nis.properties b/src/main/resources/nis.properties index 85ac7f5c4..8e50734bb 100644 --- a/src/main/resources/nis.properties +++ b/src/main/resources/nis.properties @@ -268,6 +268,9 @@ pxyHttpLog=pxyHttpLogs mmSpeakerRecognizationLog=mmSpeakerRecognizationLogs mmLogoDetectionLog=mmLogoDetectionLogs mmFaceRecognizationLog=mmFaceRecognizationLogs +trafficAreaStat=trafficAreaStat +logServiceTopn=logServiceTopn +blockAndDropStat=blockAndDropStat ######################################## #\u5927\u5c4f\u56fe\u8868\u5c55\u793a\u670d\u52a1\u63a5\u53e3 dashboardUrl=http://192.168.10.204:9999/galaxy-service/service/log/v1/ diff --git a/src/main/webapp/WEB-INF/views/dynamicpage/dynamicIndex.jsp.bak b/src/main/webapp/WEB-INF/views/dynamicpage/dynamicIndex.jsp.bak new file mode 100644 index 000000000..877b5e2ea --- /dev/null +++ b/src/main/webapp/WEB-INF/views/dynamicpage/dynamicIndex.jsp.bak @@ -0,0 +1,1258 @@ +<%@ page contentType="text/html;charset=UTF-8"%> +<%@ include file="/WEB-INF/include/taglib.jsp"%> + + + + + + NTC-DYNAMICINDEX + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+
+ +
+
+
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/home.jsp.bak b/src/main/webapp/WEB-INF/views/home.jsp.bak new file mode 100644 index 000000000..cb00066bf --- /dev/null +++ b/src/main/webapp/WEB-INF/views/home.jsp.bak @@ -0,0 +1,577 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> +<%@ include file="/WEB-INF/include/taglib.jsp"%> + + + + + + +${fns:getStringProperty('productName','NIS')} + + + + + + + + + + + + + + + +
+ + +
+ +
+ + + +
+ + + + +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+ + + + + + + + + + + \ No newline at end of file