package com.wgcloud.controller; import cn.hutool.json.JSONUtil; import com.github.pagehelper.PageInfo; import com.wgcloud.entity.AccountInfo; import com.wgcloud.service.*; import com.wgcloud.util.HostUtil; import com.wgcloud.util.ThreadPoolUtil; 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.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; /** * @version v3.3 * @ClassName:DashboardController.java * @author: http://www.wgstart.com * @date: 2021年1月16日 * @Description: 监控概要页面显示 * @Copyright: 2019-2021 wgcloud. All rights reserved. */ @Controller @RequestMapping(value = "/dash") public class DashboardController { private void testThread() { Runnable runnable = () -> { logger.info("DashboardCotroller----------testThread"); }; ThreadPoolUtil.executor.execute(runnable); } private static final Logger logger = LoggerFactory.getLogger(DashboardController.class); @Resource private DbTableService dbTableService; @Resource private PortInfoService portInfoService; @Resource private DceInfoService dceInfoService; @Resource private DbInfoService dbInfoService; @Resource private SystemInfoService systemInfoService; @Resource private AppInfoService appInfoService; @Resource private FileWarnInfoService fileWarnInfoService; @Resource private DockerInfoService dockerInfoService; @Resource private LogInfoService logInfoService; @Autowired private HeathMonitorService heathMonitorService; @Autowired private TaskUtilService taskUtilService; @Resource private DashboardService dashboardService; /** * 监控概要页面数据处理 * * @param model * @param request * @return */ @RequestMapping(value = "main") public String mainList(Model model, HttpServletRequest request) { Map params = new HashMap(); try { //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); int totalSystemInfoSize = systemInfoService.countByParams(params); //监控主机总量 model.addAttribute("totalSystemInfoSize", totalSystemInfoSize); params.put("state", StaticKeys.DOWN_STATE); int hostDownSize = systemInfoService.countByParams(params); //下线主机数量 model.addAttribute("hostDownSize", hostDownSize); params.clear(); //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); int totalSizeApp = appInfoService.countByParams(params); //进程总数量 model.addAttribute("totalSizeApp", totalSizeApp); int dockerSize = dockerInfoService.countByParams(params); //docker总数量 model.addAttribute("dockerSize", dockerSize); params.put("state", StaticKeys.DOWN_STATE); int downAppSize = appInfoService.countByParams(params); //监控进程下线数量 model.addAttribute("downAppSize", downAppSize); int downDockerSize = dockerInfoService.countByParams(params); //监控docker下线数量 model.addAttribute("downDockerSize", downDockerSize); //设置监控概要页面的内存和cpu饼图 dashboardService.setPieChart(model, totalSystemInfoSize, request); //设置监控概要页面腰线和波浪图 dashboardService.setMiddleData(model, request); //设置监控概要页面,系统核心参数信息 dashboardService.setMiddleApplicationData(model); params.clear(); //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); int portSize = portInfoService.countByParams(params); //端口总数量 model.addAttribute("portSize", portSize); params.put("state", StaticKeys.DOWN_STATE); int portDownSize = portInfoService.countByParams(params); //端口下线数量 model.addAttribute("portDownSize", portDownSize); params.clear(); //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); int dceSize = dceInfoService.countByParams(params); //数通设备总数量 model.addAttribute("dceSize", dceSize); params.put("resTimes", -1); int dceDownSize = dceInfoService.countByParams(params); //数通设备下线数量 model.addAttribute("dceDownSize", dceDownSize); params.clear(); //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); Integer fileWarnSize = fileWarnInfoService.countByParams(params); //日志监控总量 model.addAttribute("fileWarnSize", fileWarnSize == null ? 0 : fileWarnSize); params.clear(); //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); PageInfo pageInfoDbTableList = dbTableService.selectByParams(params, 1, 30); //最新30张表数据量 model.addAttribute("dbTableList", JSONUtil.parseArray(pageInfoDbTableList.getList())); params.clear(); //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); int dbInfoSize = dbInfoService.countByParams(params); //数据源数量 model.addAttribute("dbInfoSize", dbInfoSize); params.clear(); //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); params.put("dbState", StaticKeys.DOWN_STATE); int dbInfoDownSize = dbInfoService.countByParams(params); //失败数据源数量 model.addAttribute("dbInfoDownSize", dbInfoDownSize); params.clear(); //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); int heathSize = heathMonitorService.countByParams(params); //服务接口数量 model.addAttribute("heathSize", heathSize); params.put("heathStatus", StaticKeys.HEATH_STATUS_200); int heath200Size = heathMonitorService.countByParams(params); model.addAttribute("heath200Size", heath200Size); //服务接口失败数量 model.addAttribute("heatherrSize", (heathSize - heath200Size)); //普通用户需要实时计算磁盘总容量 begin AccountInfo accountInfo = HostUtil.getAccountByRequest(request); if (null != accountInfo) { if (StaticKeys.ROLE_USER.equals(accountInfo.getRole())) { model.addAttribute("sumDiskSizeCache", taskUtilService.sumDiskSizeCache(request)); } } //普通用户需要实时计算磁盘总容量 end //设置监控概要页面环图 dashboardService.setHuantu(model, totalSystemInfoSize, totalSizeApp, dockerSize, portSize, dceSize, fileWarnSize, dbInfoSize, heathSize, request); } catch (Exception e) { logger.error("监控概要页面信息异常", e); logInfoService.save("监控概要页面信息异常", e.toString(), StaticKeys.LOG_XTCZ); } if (request.getParameter(StaticKeys.DASH_VIEW_ACCOUNT) != null) { return "dashView/index"; } else { return "index"; } } /** * 给主机画像 * * @param model * @param request * @return */ @RequestMapping(value = "hostDraw") public String hostDraw(Model model, HttpServletRequest request) { String id = request.getParameter("id"); if (StringUtils.isEmpty(id)) { return "error/500"; } try { dashboardService.hostDraw(model, id); } catch (Exception e) { logger.error("主机画像错误", e); logInfoService.save("主机画像错误", e.toString(), StaticKeys.LOG_XTCZ); } return "hostDraw/view"; } }