package com.wgcloud.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.json.JSONUtil; import com.github.pagehelper.PageInfo; import com.wgcloud.config.CommonConfig; import com.wgcloud.config.MailConfig; import com.wgcloud.dto.ChartInfo; import com.wgcloud.dto.MessageDto; import com.wgcloud.entity.*; import com.wgcloud.util.DateUtil; import com.wgcloud.util.FormatUtil; import com.wgcloud.util.HostUtil; import com.wgcloud.util.staticvar.StaticKeys; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.ui.Model; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.*; /** * @version v3.3 * @ClassName:DashboardService.java * @author: http://www.wgstart.com * @date: 2021年1月16日 * @Description: 监控概要页面信息管理 * @Copyright: 2019-2021 wgcloud. All rights reserved. */ @Service public class DashboardService { private static final Logger logger = LoggerFactory.getLogger(DashboardService.class); @Resource DbTableService dbTableService; @Resource SnmpInfoService snmpInfoService; @Resource FileSafeService fileSafeService; @Resource DceInfoService dceInfoService; @Resource DbInfoService dbInfoService; @Resource SystemInfoService systemInfoService; @Resource AppInfoService appInfoService; @Resource FileWarnInfoService fileWarnInfoService; @Resource FileWarnStateService fileWarnStateService; @Resource DockerInfoService dockerInfoService; @Resource LogInfoService logInfoService; @Autowired HeathMonitorService heathMonitorService; @Autowired HostGroupService hostInfoService; @Autowired CpuStateService cpuStateService; @Autowired MemStateService memStateService; @Autowired SysLoadStateService sysLoadStateService; @Autowired NetIoStateService netIoStateService; @Autowired DeskIoService deskIoService; @Autowired DiskStateService diskStateService; @Autowired DiskSmartService diskSmartService; @Resource CpuTemperaturesService cpuTemperaturesService; @Resource private CustomInfoService customInfoService; @Resource private PortInfoService portInfoService; @Autowired CommonConfig commonConfig; @Autowired MailConfig mailConfig; /** * 获取从今天开始,往前倒数天数的日期集合 * * @param days * @return */ public List getDateList() { int days = 30; List dateList = new ArrayList(); String sevenDayBefore = DateUtil.getDateBefore(days); for (int i = 0; i < days; i++) { sevenDayBefore = DateUtil.getDateBefore(i); dateList.add(sevenDayBefore.substring(0, 10)); } return dateList; } /** * 获取四个时间段 * * @param days * @return */ public List getAmList() { MessageDto dto1 = new MessageDto(); dto1.setCode("am1"); dto1.setMsg("最近1小时"); MessageDto dto2 = new MessageDto(); dto2.setCode("am2"); dto2.setMsg("最近2小时"); MessageDto dto3 = new MessageDto(); dto3.setCode("am3"); dto3.setMsg("最近6小时"); MessageDto dto4 = new MessageDto(); dto4.setCode("am4"); dto4.setMsg("最近12小时"); MessageDto dto5 = new MessageDto(); dto5.setCode("am5"); dto5.setMsg("最近24小时"); List timeList = new ArrayList(); timeList.add(dto1); timeList.add(dto2); timeList.add(dto3); timeList.add(dto4); timeList.add(dto5); return timeList; } /** * 查看图表时候,组装日期查询条件 * * @param am 最近1小时,2小时,6小时,12小时,24小时 * @param startTime 开始时间 * @param endTime 结束时间 * @param params 查询map * @param model 回显页面存贮 */ public void setDateParam(String am, String startTime, String endTime, Map params, Model model) { if ("null".equals(am)) { am = ""; } try { String nowTime = DateUtil.getCurrentDateTime(); if (!StringUtils.isEmpty(am) && (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime))) { if ("am1".equals(am)) { params.put(StaticKeys.SEARCH_START_TIME, DateUtil.beforeHourToNowDate(1)); params.put(StaticKeys.SEARCH_END_TIME, nowTime); } if ("am2".equals(am)) { params.put(StaticKeys.SEARCH_START_TIME, DateUtil.beforeHourToNowDate(2)); params.put(StaticKeys.SEARCH_END_TIME, nowTime); } if ("am3".equals(am)) { params.put(StaticKeys.SEARCH_START_TIME, DateUtil.beforeHourToNowDate(6)); params.put(StaticKeys.SEARCH_END_TIME, nowTime); } if ("am4".equals(am)) { params.put(StaticKeys.SEARCH_START_TIME, DateUtil.beforeHourToNowDate(12)); params.put(StaticKeys.SEARCH_END_TIME, nowTime); } if ("am5".equals(am)) { params.put(StaticKeys.SEARCH_START_TIME, DateUtil.beforeHourToNowDate(24)); params.put(StaticKeys.SEARCH_END_TIME, nowTime); } model.addAttribute("am", am); return; } if (StringUtils.isEmpty(am) && !StringUtils.isEmpty(startTime) && !StringUtils.isEmpty(endTime)) { params.put(StaticKeys.SEARCH_START_TIME, startTime + ":00"); params.put(StaticKeys.SEARCH_END_TIME, endTime + ":59"); model.addAttribute("startTime", startTime); model.addAttribute("endTime", endTime); return; } params.put(StaticKeys.SEARCH_START_TIME, DateUtil.beforeHourToNowDate(1)); params.put(StaticKeys.SEARCH_END_TIME, nowTime); model.addAttribute("am", "am1"); } catch (Exception e) { logger.error("查看图表组装日期查询条件错误", e); } } /** * 查看详细信息监控时候,组装日期查询条件 * * @param params * @param date */ public void setDateParam(String date, Map params) { params.put(StaticKeys.SEARCH_START_TIME, date + " 00:00:00"); params.put(StaticKeys.SEARCH_END_TIME, date + " 23:59:59"); } /** * 设置监控概要页面环图 * * @param model * @param totalSystemInfoSize */ public void setHuantu(Model model, int totalSystemInfoSize, int totalSizeApp, int dockerSize, int portSize, int dceSize, int fileWarnSize, int dbInfoSize, int heathSize, HttpServletRequest request) throws Exception { //校验是否添加过滤用户查询条件 Map params = new HashMap(); HostUtil.addAccountquery(request, params); int dbTableSize = dbTableService.countByParams(params); int snmpInfoSize = snmpInfoService.countByParams(params); int huantuTotalSize = totalSystemInfoSize + totalSizeApp + dockerSize + portSize + dceSize + fileWarnSize + dbInfoSize + heathSize + dbTableSize + snmpInfoSize; //防止除以0的bug,所以新增一个total变量 double total = huantuTotalSize; if (0 == total) { total = 1d; } List chartInfos = new ArrayList<>(); double totalSystemInfoSizePercent = totalSystemInfoSize / total; ChartInfo totalSystemInfoChart = new ChartInfo(); totalSystemInfoChart.setCount(totalSystemInfoSize); totalSystemInfoChart.setItem("主机"); totalSystemInfoChart.setPercent(FormatUtil.formatDouble(totalSystemInfoSizePercent, 2)); if (totalSystemInfoSize > 0) { chartInfos.add(totalSystemInfoChart); } double totalSizeAppPercent = totalSizeApp / total; ChartInfo totalSizeAppChart = new ChartInfo(); totalSizeAppChart.setCount(totalSizeApp); totalSizeAppChart.setItem("进程"); totalSizeAppChart.setPercent(FormatUtil.formatDouble(totalSizeAppPercent, 2)); if (totalSizeApp > 0) { chartInfos.add(totalSizeAppChart); } double dockerSizePercent = dockerSize / total; ChartInfo dockerSizeChart = new ChartInfo(); dockerSizeChart.setCount(dockerSize); dockerSizeChart.setItem("DOCKER"); dockerSizeChart.setPercent(FormatUtil.formatDouble(dockerSizePercent, 2)); if (dockerSize > 0) { chartInfos.add(dockerSizeChart); } double portSizePercent = portSize / total; ChartInfo portSizeChart = new ChartInfo(); portSizeChart.setCount(portSize); portSizeChart.setItem("端口"); portSizeChart.setPercent(FormatUtil.formatDouble(portSizePercent, 2)); if (portSize > 0) { chartInfos.add(portSizeChart); } double dceSizePercent = dceSize / total; ChartInfo dceSizeChart = new ChartInfo(); dceSizeChart.setCount(dceSize); dceSizeChart.setItem("数通PING"); dceSizeChart.setPercent(FormatUtil.formatDouble(dceSizePercent, 2)); if (dceSize > 0) { chartInfos.add(dceSizeChart); } double snmpInfoPercent = snmpInfoSize / total; ChartInfo snmpInfoChart = new ChartInfo(); snmpInfoChart.setCount(snmpInfoSize); snmpInfoChart.setItem("数通SNMP"); snmpInfoChart.setPercent(FormatUtil.formatDouble(snmpInfoPercent, 2)); if (snmpInfoSize > 0) { chartInfos.add(snmpInfoChart); } double fileWarnSizePercent = fileWarnSize / total; ChartInfo fileWarnSizeChart = new ChartInfo(); fileWarnSizeChart.setCount(fileWarnSize); fileWarnSizeChart.setItem("日志"); fileWarnSizeChart.setPercent(FormatUtil.formatDouble(fileWarnSizePercent, 2)); if (fileWarnSize > 0) { chartInfos.add(fileWarnSizeChart); } double dbInfoSizePercent = dbInfoSize / total; ChartInfo dbInfoSizeChart = new ChartInfo(); dbInfoSizeChart.setCount(dbInfoSize); dbInfoSizeChart.setItem("数据源"); dbInfoSizeChart.setPercent(FormatUtil.formatDouble(dbInfoSizePercent, 2)); if (dbInfoSize > 0) { chartInfos.add(dbInfoSizeChart); } double heathSizePercent = heathSize / total; ChartInfo heathSizeChart = new ChartInfo(); heathSizeChart.setCount(heathSize); heathSizeChart.setItem("服务接口"); heathSizeChart.setPercent(FormatUtil.formatDouble(heathSizePercent, 2)); if (heathSize > 0) { chartInfos.add(heathSizeChart); } double dbTableSizePercent = dbTableSize / total; ChartInfo dbTableSizeChart = new ChartInfo(); dbTableSizeChart.setCount(dbTableSize); dbTableSizeChart.setItem("数据表"); dbTableSizeChart.setPercent(FormatUtil.formatDouble(dbTableSizePercent, 2)); if (dbTableSize > 0) { chartInfos.add(dbTableSizeChart); } model.addAttribute("huantuChartInfos", JSONUtil.parseArray(chartInfos)); model.addAttribute("huantuTotalSize", huantuTotalSize); } /** * 设置监控概要页面腰线和波浪图 * * @param model * @param totalSystemInfoSize */ public void setMiddleData(Model model, HttpServletRequest request) throws Exception { Map params = new HashMap(); //校验是否添加过滤用户查询条件 HostUtil.addAccountquery(request, params); List list = systemInfoService.selectAllByParams(params); //cpu使用率最高 Double maxCpu = 0d; //cpu使用率平均 Double avgCpu = 0d; //cpu使用率最低 Double minCpu = 1000d; Double sumCpu = 0d; //内存使用率最高 Double maxMem = 0d; //内存使用率最低 Double minMem = 1000d; //内存使用率平均 Double avgMem = 0d; Double sumMem = 0d; //下行传输速率最高 Double maxRxbyt = 0d; //下行传输速率平均 Double avgRxbyt = 0d; //下行传输速率最低 Double minRxbyt = 1000d; Double sumRxbyt = 0d; //上行传输速率最高 Double maxTxbyt = 0d; //上行传输速率最低 Double minTxbyt = 1000d; //上行传输速率平均 Double avgTxbyt = 0d; Double sumTxbyt = 0d; //5分钟负载最高 Double maxFiveLoad = 0d; //5分钟负载平均 Double avgFiveLoad = 0d; //5分钟负载最低 Double minFiveLoad = 1000d; Double sumFiveLoad = 0d; //15分钟负载最高 Double maxFifteenLoad = 0d; //15分钟负载最低 Double minFifteenLoad = 1000d; //15分钟负载平均 Double avgFifteenLoad = 0d; Double sumFifteenLoad = 0d; //主机数量 int systemSize = 0; //cpu总核数 int cpuCoresSum = 0; //内存总和 double memSum = 0; //上报时间总和 int submitSecondsSum = 0; //主机平均上报频率 double avgSubmitSeconds = 120; for (SystemInfo systemInfo : list) { // if(StaticKeys.DOWN_STATE.equals(systemInfo.getState())){ // continue; // } systemSize += 1; //组装cpu使用率 begin if (null != systemInfo.getCpuPer()) { if (systemInfo.getCpuPer() > maxCpu) { maxCpu = systemInfo.getCpuPer(); } if (systemInfo.getCpuPer() < minCpu) { minCpu = systemInfo.getCpuPer(); } sumCpu += systemInfo.getCpuPer(); } //组装cpu使用率 end //组装内存使用率 begin if (null != systemInfo.getMemPer()) { if (systemInfo.getMemPer() > maxMem) { maxMem = systemInfo.getMemPer(); } if (systemInfo.getMemPer() < minMem) { minMem = systemInfo.getMemPer(); } sumMem += systemInfo.getMemPer(); } //组装内存使用率 end //组装下行传输速率 begin if (null != systemInfo.getRxbyt()) { if (Double.valueOf(systemInfo.getRxbyt()) > maxRxbyt) { maxRxbyt = Double.valueOf(systemInfo.getRxbyt()); } if (Double.valueOf(systemInfo.getRxbyt()) < minRxbyt) { minRxbyt = Double.valueOf(systemInfo.getRxbyt()); } sumRxbyt += Double.valueOf(systemInfo.getRxbyt()); } //组装下行传输速率 end //组装上行传输速率 begin if (null != systemInfo.getTxbyt()) { if (Double.valueOf(systemInfo.getTxbyt()) > maxTxbyt) { maxTxbyt = Double.valueOf(systemInfo.getTxbyt()); } if (Double.valueOf(systemInfo.getTxbyt()) < minTxbyt) { minTxbyt = Double.valueOf(systemInfo.getTxbyt()); } sumTxbyt += Double.valueOf(systemInfo.getTxbyt()); } //组装上行传输速率 end //组装5分钟负载 begin if (null != systemInfo.getFiveLoad()) { if (Double.valueOf(systemInfo.getFiveLoad()) > maxFiveLoad) { maxFiveLoad = Double.valueOf(systemInfo.getFiveLoad()); } if (Double.valueOf(systemInfo.getFiveLoad()) < minFiveLoad) { minFiveLoad = Double.valueOf(systemInfo.getFiveLoad()); } sumFiveLoad += Double.valueOf(systemInfo.getFiveLoad()); } //组装5分钟负载 end //组装15分钟负载 begin if (null != systemInfo.getFifteenLoad()) { if (Double.valueOf(systemInfo.getFifteenLoad()) > maxFifteenLoad) { maxFifteenLoad = Double.valueOf(systemInfo.getFifteenLoad()); } if (Double.valueOf(systemInfo.getFifteenLoad()) < minFifteenLoad) { minFifteenLoad = Double.valueOf(systemInfo.getFifteenLoad()); } sumFifteenLoad += Double.valueOf(systemInfo.getFifteenLoad()); } //组装15分钟负载 end //组装cpu总核数 begin try { cpuCoresSum += Integer.valueOf(systemInfo.getCpuCoreNum()); } catch (Exception e) { logger.error("统计所有主机总核数错误", e); } //组装cpu总核数 end //组装总内存 begin try { memSum += Double.valueOf(systemInfo.getTotalMem().replace("G", "")); } catch (Exception e) { logger.error("统计所有主机总内存错误", e); } //组装总内存 end //组装上报数据频率总和 begin try { submitSecondsSum += Integer.valueOf(systemInfo.getSubmitSeconds()); } catch (Exception e) { logger.error("统计所有主机组装上报数据频率总和错误", e); } //组装上报数据频率总和 end } if (systemSize > 0) { avgCpu = sumCpu / list.size(); avgMem = sumMem / list.size(); avgRxbyt = sumRxbyt / list.size(); avgTxbyt = sumTxbyt / list.size(); avgFifteenLoad = sumFifteenLoad / list.size(); avgFiveLoad = sumFiveLoad / list.size(); avgSubmitSeconds = submitSecondsSum / (double) list.size(); } else { minCpu = 0d; minMem = 0d; minRxbyt = 0d; minTxbyt = 0d; avgFifteenLoad = 0d; avgFiveLoad = 0d; } model.addAttribute("cpuCoresSum", cpuCoresSum); model.addAttribute("memSum", FormatUtil.formatDouble(memSum, 2)); model.addAttribute("avgSubmitSeconds", FormatUtil.formatDouble(avgSubmitSeconds, 2)); //最近5分钟所有主机cpu状态 begin List cpuInfoList = new ArrayList(); ChartInfo maxCpuInfo = new ChartInfo(); maxCpuInfo.setValue(maxCpu); maxCpuInfo.setItem("CPU%最高"); cpuInfoList.add(maxCpuInfo); ChartInfo avgCpuInfo = new ChartInfo(); avgCpuInfo.setValue(FormatUtil.formatDouble(avgCpu, 2)); avgCpuInfo.setItem("CPU%平均"); cpuInfoList.add(avgCpuInfo); ChartInfo minCpuInfo = new ChartInfo(); minCpuInfo.setValue(minCpu); minCpuInfo.setItem("CPU%最低"); cpuInfoList.add(minCpuInfo); model.addAttribute("cpuInfoList", cpuInfoList); //最近5分钟所有主机cpu状态 end //最近5分钟所有主机内存状态 begin List memInfoList = new ArrayList(); ChartInfo maxMemInfo = new ChartInfo(); maxMemInfo.setValue(maxMem); maxMemInfo.setItem("内存%最高"); memInfoList.add(maxMemInfo); ChartInfo avgMemInfo = new ChartInfo(); avgMemInfo.setValue(FormatUtil.formatDouble(avgMem, 2)); avgMemInfo.setItem("内存%平均"); memInfoList.add(avgMemInfo); ChartInfo minMemInfo = new ChartInfo(); minMemInfo.setValue(minMem); minMemInfo.setItem("内存%最低"); memInfoList.add(minMemInfo); model.addAttribute("memInfoList", memInfoList); //最近5分钟所有主机内存状态 end model.addAttribute("maxRxbyt", FormatUtil.kbToM(maxRxbyt + "") + "/s"); model.addAttribute("minRxbyt", FormatUtil.kbToM(minRxbyt + "") + "/s"); model.addAttribute("avgRxbyt", FormatUtil.kbToM(FormatUtil.formatDouble(avgRxbyt, 2) + "") + "/s"); model.addAttribute("maxTxbyt", FormatUtil.kbToM(maxTxbyt + "") + "/s"); model.addAttribute("minTxbyt", FormatUtil.kbToM(minTxbyt + "") + "/s"); model.addAttribute("avgTxbyt", FormatUtil.kbToM(FormatUtil.formatDouble(avgTxbyt, 2) + "") + "/s"); model.addAttribute("maxFiveLoad", maxFiveLoad); model.addAttribute("minFiveLoad", minFiveLoad); model.addAttribute("avgFiveLoad", FormatUtil.formatDouble(avgFiveLoad, 2)); model.addAttribute("maxFifteenLoad", maxFifteenLoad); model.addAttribute("minFifteenLoad", minFifteenLoad); model.addAttribute("avgFifteenLoad", FormatUtil.formatDouble(avgFifteenLoad, 2)); } /** * 设置监控概要页面的内存和cpu饼图 * * @param model * @param totalSystemInfoSize */ public void setPieChart(Model model, int totalSystemInfoSize, HttpServletRequest request) throws Exception { Map params = new HashMap(); List chartInfoList1 = new ArrayList(); List chartInfoList2 = new ArrayList(); //内存>=95% begin //校验是否添加过滤用户查询条件 HostUtil.addAccountquery(request, params); params.put("memPer", 95); int memPerSize_95 = systemInfoService.countByParams(params); double a = 0; if (totalSystemInfoSize != 0) { a = (double) memPerSize_95 / totalSystemInfoSize; } ChartInfo memPerSize_95_chart = new ChartInfo(); memPerSize_95_chart.setItem("内存>=95%"); memPerSize_95_chart.setCount(memPerSize_95); memPerSize_95_chart.setPercent(FormatUtil.formatDouble(a, 2)); chartInfoList1.add(memPerSize_95_chart); params.clear(); //内存>=95% begin //内存>=90%且<95% begin //校验是否添加过滤用户查询条件 HostUtil.addAccountquery(request, params); params.put("memPer", 90); params.put("memPerLe", 95); int memPerSize_90_95 = systemInfoService.countByParams(params); double a_90_95 = 0; if (totalSystemInfoSize != 0) { a_90_95 = (double) memPerSize_90_95 / totalSystemInfoSize; } ChartInfo memPerSize_90_95_chart = new ChartInfo(); memPerSize_90_95_chart.setItem("内存>=90%且<95%"); memPerSize_90_95_chart.setCount(memPerSize_90_95); memPerSize_90_95_chart.setPercent(FormatUtil.formatDouble(a_90_95, 2)); chartInfoList1.add(memPerSize_90_95_chart); params.clear(); //内存>=90%且<95% begin //内存>=50%且<90% begin //校验是否添加过滤用户查询条件 HostUtil.addAccountquery(request, params); params.put("memPer", 50); params.put("memPerLe", 90); int memPerSize_50_90 = systemInfoService.countByParams(params); double b = 0; if (totalSystemInfoSize != 0) { b = (double) memPerSize_50_90 / totalSystemInfoSize; } ChartInfo memPerSize_50_90_chart = new ChartInfo(); memPerSize_50_90_chart.setItem("内存>=50%且<90%"); memPerSize_50_90_chart.setCount(memPerSize_50_90); memPerSize_50_90_chart.setPercent(FormatUtil.formatDouble(b, 2)); chartInfoList1.add(memPerSize_50_90_chart); params.clear(); //内存>=50%且<90% end //内存<50% begin //校验是否添加过滤用户查询条件 HostUtil.addAccountquery(request, params); params.put("memPerLe", 50); int memPerSize_50 = systemInfoService.countByParams(params); double bb = 0; if (totalSystemInfoSize != 0) { bb = (double) memPerSize_50 / totalSystemInfoSize; } ChartInfo memPerSize_50_chart = new ChartInfo(); memPerSize_50_chart.setItem("内存<50%"); memPerSize_50_chart.setCount(memPerSize_50); memPerSize_50_chart.setPercent(FormatUtil.formatDouble(bb, 2)); chartInfoList1.add(memPerSize_50_chart); params.clear(); //内存<50% end model.addAttribute("chartInfoList1", JSONUtil.parseArray(chartInfoList1)); //CPU>=95%" begin //校验是否添加过滤用户查询条件 HostUtil.addAccountquery(request, params); params.put("cpuPer", 95); int cpuPerSize_95 = systemInfoService.countByParams(params); double c_95 = 0; if (totalSystemInfoSize != 0) { c_95 = (double) cpuPerSize_95 / totalSystemInfoSize; } ChartInfo cpuPerSize_95_chart = new ChartInfo(); cpuPerSize_95_chart.setItem("CPU>=95%"); cpuPerSize_95_chart.setCount(cpuPerSize_95); cpuPerSize_95_chart.setPercent(FormatUtil.formatDouble(c_95, 2)); chartInfoList2.add(cpuPerSize_95_chart); params.clear(); //CPU>=95%" end //CPU>=90%且<95% begin //校验是否添加过滤用户查询条件 HostUtil.addAccountquery(request, params); params.put("cpuPer", 90); params.put("cpuPerLe", 95); int cpuPerSize_90_95 = systemInfoService.countByParams(params); double c_90_95 = 0; if (totalSystemInfoSize != 0) { c_90_95 = (double) cpuPerSize_90_95 / totalSystemInfoSize; } ChartInfo cpuPerSize_90_95_chart = new ChartInfo(); cpuPerSize_90_95_chart.setItem("CPU>=90%且<95%"); cpuPerSize_90_95_chart.setCount(cpuPerSize_90_95); cpuPerSize_90_95_chart.setPercent(FormatUtil.formatDouble(c_90_95, 2)); chartInfoList2.add(cpuPerSize_90_95_chart); params.clear(); //CPU>=90%且<95% end //CPU>=50%且<90% begin //校验是否添加过滤用户查询条件 HostUtil.addAccountquery(request, params); params.put("cpuPerLe", 90); params.put("cpuPer", 50); int perSize_50_90 = systemInfoService.countByParams(params); double e = 0; if (totalSystemInfoSize != 0) { e = (double) perSize_50_90 / totalSystemInfoSize; } ChartInfo perSize_50_90_chart = new ChartInfo(); perSize_50_90_chart.setItem("CPU>=50%且<90%"); perSize_50_90_chart.setCount(perSize_50_90); perSize_50_90_chart.setPercent(FormatUtil.formatDouble(e, 2)); chartInfoList2.add(perSize_50_90_chart); params.clear(); //CPU>=50%且<90% end //CPU<50% begin //校验是否添加过滤用户查询条件 HostUtil.addAccountquery(request, params); params.put("cpuPerLe", 50); int perSize_50 = systemInfoService.countByParams(params); double f = 0; if (totalSystemInfoSize != 0) { f = (double) perSize_50 / totalSystemInfoSize; } ChartInfo perSize_50_chart = new ChartInfo(); perSize_50_chart.setItem("CPU<50%"); perSize_50_chart.setCount(perSize_50); perSize_50_chart.setPercent(FormatUtil.formatDouble(f, 2)); chartInfoList2.add(perSize_50_chart); params.clear(); //CPU<50% end model.addAttribute("chartInfoList2", JSONUtil.parseArray(chartInfoList2)); params.clear(); } /** * 设置监控概要页面,系统核心参数信息 * * @param model * @param model */ public void setMiddleApplicationData(Model model) throws Exception { Map params = new HashMap(); //告警日志数量 params.put("hostname", "告警"); model.addAttribute("warnCount", logInfoService.countByParams(params)); //历史趋势图数据保留天数 model.addAttribute("historyDataOut", commonConfig.getHistoryDataOut()); //告警方式 String warnType = "未设置"; if (StaticKeys.mailSet != null && !StringUtils.isEmpty(mailConfig.getWarnScript())) { warnType = "邮件+脚本"; } if (StaticKeys.mailSet == null && !StringUtils.isEmpty(mailConfig.getWarnScript())) { warnType = "脚本"; } if (StaticKeys.mailSet != null && StringUtils.isEmpty(mailConfig.getWarnScript())) { warnType = "邮件"; } model.addAttribute("warnType", warnType); //公众看板服务是否开启 String dapingView = "已关闭"; if (StaticKeys.TRUE_VAL.equals(commonConfig.getDashView())) { dapingView = "已开启"; } model.addAttribute("dapingView", dapingView); //管理员默认密码是否已修改 String adminPwd = "默认"; if (!"111111".equals(commonConfig.getAccountPwd())) { adminPwd = "已修改"; } model.addAttribute("adminPwd", adminPwd); //只读账号默认密码是否已修改 String guestAccountPwd = "默认"; if (!"111111".equals(commonConfig.getGuestAccountPwd())) { guestAccountPwd = "已修改"; } model.addAttribute("guestAccountPwd", guestAccountPwd); //通信token是否已修改 String wgToken = "默认"; if (!"wgcloud".equals(commonConfig.getWgToken())) { wgToken = "已修改"; } model.addAttribute("wgToken", wgToken); //webSSH是否开启 String webSSH = "已关闭"; if (StaticKeys.TRUE_VAL.equals(commonConfig.getWebSsh())) { webSSH = "已开启"; } model.addAttribute("webSSH", webSSH); } /** * 给主机画像 * * @param model * @param systemInfoId */ public void hostDraw(Model model, String systemInfoId) { try { SystemInfo systemInfo = systemInfoService.selectById(systemInfoId); String hostname = systemInfo.getHostname(); Map params = new HashMap(); params.put("hostname", hostname); model.addAttribute("systemInfo", systemInfo); //监控进程总数量 int totalAppSize = appInfoService.countByParams(params); model.addAttribute("totalAppSize", totalAppSize); //监控端口总数量 int totalPortSize = portInfoService.countByParams(params); model.addAttribute("totalPortSize", totalPortSize); //监控进程下线数量 params.put("state", StaticKeys.DOWN_STATE); int downAppSize = appInfoService.countByParams(params); model.addAttribute("downAppSize", downAppSize); //监控端口下线数量 int downPortSize = portInfoService.countByParams(params); model.addAttribute("downPortSize", downPortSize); //最近监控周期天cpu使用率最大 Double maxCpuState = cpuStateService.selectMaxByHostname(hostname); model.addAttribute("maxCpuState", maxCpuState); //最近监控周期天mem使用率最大 Double maxMemState = memStateService.selectMaxByHostname(hostname); model.addAttribute("maxMemState", maxMemState); //多少天清空一次历史数据 model.addAttribute("historyDataOut", commonConfig.getHistoryDataOut()); params.clear(); params.put("hostname", hostname); PageInfo pageInfoLoad = sysLoadStateService.selectByParams(params, 1, 1); if (!CollectionUtil.isEmpty(pageInfoLoad.getList())) { //最新一条系统负载 model.addAttribute("sysLoadState", pageInfoLoad.getList().get(0)); } else { //最新一条系统负载 model.addAttribute("sysLoadState", new SysLoadState()); } SysLoadState sysLoadStateMax = sysLoadStateService.selectMaxByHostname(hostname); if (null == sysLoadStateMax) { sysLoadStateMax = new SysLoadState(); } //1分钟负载历史最高 model.addAttribute("maxOneLoad", sysLoadStateMax.getOneLoad()); //5分钟负载历史最高 model.addAttribute("maxFiveLoad", sysLoadStateMax.getFiveLoad()); //15分钟负载历史最高 model.addAttribute("maxFifteenLoad", sysLoadStateMax.getFifteenLoad()); //最新一条网络流量数据 PageInfo pageInfoNetIo = netIoStateService.selectByParams(params, 1, 1); NetIoState netIoStateNew = new NetIoState(); if (!CollectionUtil.isEmpty(pageInfoNetIo.getList())) { netIoStateNew = (NetIoState) pageInfoNetIo.getList().get(0); netIoStateNew.setRxbyt(FormatUtil.kbToM(netIoStateNew.getRxbyt()) + "/s"); netIoStateNew.setTxbyt(FormatUtil.kbToM(netIoStateNew.getTxbyt()) + "/s"); model.addAttribute("netIoState", netIoStateNew); } else { //最新一条网络流量 model.addAttribute("netIoState", netIoStateNew); } NetIoState netIoStateMax = netIoStateService.selectMaxByHostname(hostname); if (null == netIoStateMax) { netIoStateMax = new NetIoState(); } //接受字节历史最高 model.addAttribute("maxRxbyt", FormatUtil.kbToM(netIoStateMax.getRxbyt()) + "/s"); //发送字节历史最高 model.addAttribute("maxTxbyt", FormatUtil.kbToM(netIoStateMax.getTxbyt()) + "/s"); //接受包历史最高 model.addAttribute("maxRxpck", netIoStateMax.getRxpck()); //发送包历史最高 model.addAttribute("maxTxpck", netIoStateMax.getTxpck()); //主机下线次数 params.clear(); params.put("hostname", "主机下线告警:" + hostname); int hostDownSize = logInfoService.countByParams(params); model.addAttribute("hostDownSize", hostDownSize); //所有监控进程 params.clear(); params.put("hostname", hostname); List appInfoList = appInfoService.selectAllByParams(params); for (AppInfo appInfo1 : appInfoList) { appInfo1.setWritesBytes(FormatUtil.mToG(appInfo1.getWritesBytes())); appInfo1.setReadBytes(FormatUtil.mToG(appInfo1.getReadBytes())); } //设置分组 appInfoService.setGroupInList(appInfoList); model.addAttribute("appInfoList", appInfoList); //所有监控端口 List portInfoList = portInfoService.selectAllByParams(params); portInfoService.setGroupInList(portInfoList); model.addAttribute("portInfoList", portInfoList); //所有监控防篡改文件 List fileSafeInfoList = fileSafeService.selectAllByParams(params); model.addAttribute("fileSafeInfoList", fileSafeInfoList); //所有日志文件监控 List fileWarnInfoList = fileWarnInfoService.selectAllByParams(params); for (FileWarnInfo info : fileWarnInfoList) { params.put("fileWarnId", info.getId()); Integer count = fileWarnStateService.countByParams(params); info.setWarnDatas(count + ""); } model.addAttribute("fileWarnInfoList", fileWarnInfoList); params.clear(); params.put("hostname", hostname); //所有监控docker List dockerInfoList = dockerInfoService.selectAllByParams(params); dockerInfoService.setGroupInList(dockerInfoList); model.addAttribute("dockerInfoList", dockerInfoList); //磁盘容量信息 List diskStateList = diskStateService.selectAllByParams(params); model.addAttribute("deskStateList", diskStateList); //磁盘IO信息 List deskIoList = deskIoService.selectAllByParams(params); model.addAttribute("deskIoList", deskIoList); //磁盘smart信息 List diskSmartList = diskSmartService.selectAllByParams(params); model.addAttribute("diskSmartList", diskSmartList); //cpu温度 List cpuTemperaturesList = cpuTemperaturesService.selectAllByParams(params); model.addAttribute("cpuTemperaturesList", cpuTemperaturesList); //自定义监控项列表 List customInfoList = customInfoService.selectAllByParams(params); model.addAttribute("customInfoList", customInfoList); } catch (Exception e) { logger.error("主机画像错误", e); logInfoService.save("主机画像错误", e.toString(), StaticKeys.LOG_XTCZ); } } }