/** * 获取指定时间内某个命令某个客户端和实例的统计数据 * * @param appId */ @RequestMapping("/getAppClientInstanceCommandCost") public ModelAndView doGetAppClientInstanceCommandCost( HttpServletRequest request, HttpServletResponse response, Model model) throws ParseException { final String costDistriDateFormat = "yyyy-MM-dd"; long appId = NumberUtils.toLong(request.getParameter("appId")); // 时间转换 String costDistriStartDate = request.getParameter("costDistriStartDate"); String costDistriEndDate = request.getParameter("costDistriEndDate"); Date startDate = DateUtil.parse(costDistriStartDate, costDistriDateFormat); Date endDate = DateUtil.parse(costDistriEndDate, costDistriDateFormat); long startTime = NumberUtils.toLong(DateUtil.formatDate(startDate, COLLECT_TIME_FORMAT)); long endTime = NumberUtils.toLong(DateUtil.formatDate(endDate, COLLECT_TIME_FORMAT)); String firstCommand = request.getParameter("firstCommand"); long instanceId = NumberUtils.toLong(request.getParameter("instanceId")); String clientIp = request.getParameter("clientIp"); // 客户端和实例统计 List<AppClientCostTimeStat> clientInstanceChartStatList = clientReportCostDistriService.getAppCommandClientToInstanceStat( appId, firstCommand, instanceId, clientIp, startTime, endTime); // 缩减字段 List<Map<String, Object>> clientInstanceStat = new ArrayList<Map<String, Object>>(); for (AppClientCostTimeStat appClientCostTimeStat : clientInstanceChartStatList) { Map<String, Object> map = new HashMap<String, Object>(); map.put("timeStamp", appClientCostTimeStat.getTimeStamp()); map.put("count", appClientCostTimeStat.getCount()); map.put("mean", appClientCostTimeStat.getMean()); map.put("median", appClientCostTimeStat.getMedian()); map.put("max90", appClientCostTimeStat.getNinetyPercentMax()); map.put("max99", appClientCostTimeStat.getNinetyNinePercentMax()); map.put("max100", appClientCostTimeStat.getHundredMax()); clientInstanceStat.add(map); } // 生成数据map json Map<String, Object> resultMap = new HashMap<String, Object>(); resultMap.put("clientInstanceStat", clientInstanceStat); sendMessage(response, JSONObject.toJSONString(resultMap)); return null; }
/** 应用客户端耗时统计 */ @RequestMapping("/costDistribute") public ModelAndView doCostDistribute( HttpServletRequest request, HttpServletResponse response, Model model) { // 1.应用信息 Long appId = NumberUtils.toLong(request.getParameter("appId")); if (appId <= 0) { return new ModelAndView(""); } AppDesc appDesc = appService.getByAppId(appId); model.addAttribute("appDesc", appDesc); model.addAttribute("appId", appId); // 2.获取时间区间 TimeBetween timeBetween = new TimeBetween(); try { timeBetween = fillWithCostDateFormat(request, model); } catch (ParseException e) { logger.error(e.getMessage(), e); } long startTime = timeBetween.getStartTime(); long endTime = timeBetween.getEndTime(); Date startDate = timeBetween.getStartDate(); // 3.所有命令和第一个命令 List<String> allCommands = clientReportCostDistriService.getAppDistinctCommand(appId, startTime, endTime); model.addAttribute("allCommands", allCommands); // 4.所有客户端和实例对应关系 List<AppInstanceClientRelation> appInstanceClientRelationList = appInstanceClientRelationService.getAppInstanceClientRelationList(appId, startDate); model.addAttribute("appInstanceClientRelationList", appInstanceClientRelationList); String firstCommand = request.getParameter("firstCommand"); if (StringUtils.isBlank(firstCommand) && CollectionUtils.isNotEmpty(allCommands)) { firstCommand = allCommands.get(0); model.addAttribute("firstCommand", firstCommand); } else { model.addAttribute("firstCommand", firstCommand); } // 5.1 应用下客户端和实例的全局耗时统计列表 List<AppClientCostTimeTotalStat> appChartStatList = clientReportCostDistriService.getAppClientCommandTotalStat( appId, firstCommand, startTime, endTime); Map<String, Object> resultMap = new HashMap<String, Object>(); // 5.2 简化字段 List<Map<String, Object>> app = new ArrayList<Map<String, Object>>(); for (AppClientCostTimeTotalStat appClientCostTimeTotalStat : appChartStatList) { Map<String, Object> map = new HashMap<String, Object>(); map.put("timeStamp", appClientCostTimeTotalStat.getTimeStamp()); map.put("count", appClientCostTimeTotalStat.getTotalCount()); map.put("mean", appClientCostTimeTotalStat.getMean()); map.put("median", appClientCostTimeTotalStat.getMedian()); map.put("max90", appClientCostTimeTotalStat.getNinetyPercentMax()); map.put("max99", appClientCostTimeTotalStat.getNinetyNinePercentMax()); map.put("max100", appClientCostTimeTotalStat.getHundredMax()); map.put( "maxInst", appClientCostTimeTotalStat.getMaxInstanceHost() + ":" + appClientCostTimeTotalStat.getMaxInstancePort()); map.put("maxClient", appClientCostTimeTotalStat.getMaxClientIp()); app.add(map); } resultMap.put("app", app); model.addAttribute("appChartStatListJson", JSONObject.toJSONString(resultMap)); return new ModelAndView("client/clientCostDistribute"); }