package com.wgcloud.controller; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.github.pagehelper.PageInfo; import com.wgcloud.config.CommonConfig; import com.wgcloud.entity.HostGroup; import com.wgcloud.entity.PortInfo; import com.wgcloud.entity.SystemInfo; import com.wgcloud.service.HostGroupService; import com.wgcloud.service.LogInfoService; import com.wgcloud.service.PortInfoService; import com.wgcloud.service.SystemInfoService; import com.wgcloud.util.HostUtil; import com.wgcloud.util.PageUtil; import com.wgcloud.util.ResDataUtils; import com.wgcloud.util.TokenUtils; 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.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @version v3.3 * @ClassName:PortInfoController.java * @author: http://www.wgstart.com * @date: 2021年1月16日 * @Description: 端口监控管理 * @Copyright: 2019-2021 wgcloud. All rights reserved. */ @Controller @RequestMapping("/portInfo") public class PortInfoController { private static final Logger logger = LoggerFactory.getLogger(PortInfoController.class); @Resource private PortInfoService portInfoService; @Resource private LogInfoService logInfoService; @Resource private SystemInfoService systemInfoService; @Resource private HostGroupService hostGroupService; @Autowired private CommonConfig commonConfig; @Autowired private TokenUtils tokenUtils; /** * agent查询port列表 * * @param model * @param request * @return */ @ResponseBody @RequestMapping(value = "agentList") public String agentList(@RequestBody String paramBean) { JSONObject agentJsonObject = (JSONObject) JSONUtil.parse(paramBean); if (!tokenUtils.checkAgentToken(agentJsonObject)) { logger.error(StaticKeys.TOKEN_ERROR); return ResDataUtils.resetErrorJson(StaticKeys.TOKEN_ERROR); } Map params = new HashMap(); if (null == agentJsonObject.get("hostname") || StringUtils.isEmpty(agentJsonObject.get("hostname").toString())) { return ""; } params.put("hostname", agentJsonObject.get("hostname").toString()); try { params.put("active", StaticKeys.ON_STATE); List portInfoList = portInfoService.selectAllByParams(params); return ResDataUtils.resetSuccessJson(portInfoList); } catch (Exception e) { logger.error("agent获取端口信息错误", e); logInfoService.save("agent获取端口信息错误", e.toString(), StaticKeys.LOG_XTCZ); return ResDataUtils.resetErrorJson(e.toString()); } } /** * 根据条件查询端口信息列表 * * @param model * @param request * @return */ @RequestMapping(value = "list") public String portInfoList(PortInfo PortInfo, Model model, HttpServletRequest request) { Map params = new HashMap(); try { StringBuffer url = new StringBuffer(); String hostname = null; if (!StringUtils.isEmpty(PortInfo.getHostname())) { hostname = PortInfo.getHostname(); params.put("hostname", hostname.trim()); url.append("&hostname=").append(hostname); } if (!StringUtils.isEmpty(PortInfo.getAccount())) { params.put("account", PortInfo.getAccount()); url.append("&account=").append(PortInfo.getAccount()); } if (!StringUtils.isEmpty(PortInfo.getState())) { params.put("state", PortInfo.getState()); url.append("&state=").append(PortInfo.getState()); } if (!StringUtils.isEmpty(PortInfo.getGroupId())) { params.put("groupId", PortInfo.getGroupId()); url.append("&groupId=").append(PortInfo.getGroupId()); } if (!StringUtils.isEmpty(PortInfo.getOrderBy())) { params.put("orderBy", PortInfo.getOrderBy()); params.put("orderType", PortInfo.getOrderType()); url.append("&orderBy=").append(PortInfo.getOrderBy()); url.append("&orderType=").append(PortInfo.getOrderType()); } //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); PageInfo pageInfo = portInfoService.selectByParams(params, PortInfo.getPage(), PortInfo.getPageSize()); Map paramsLogInfo = new HashMap(); for (PortInfo portInfo1 : pageInfo.getList()) { portInfo1.setHostname(portInfo1.getHostname() + HostUtil.addRemark(portInfo1.getHostname())); //设置所属用户账号 begin if (StaticKeys.TRUE_VAL.equals(commonConfig.getUserInfoManage())) { portInfo1.setAccount(HostUtil.getAccount(portInfo1.getHostname())); } //设置所属用户账号 begin //设置累积告警次数 begin if (StaticKeys.TRUE_VAL.equals(commonConfig.getShowWarnCount())) { String warnQueryWd = portInfo1.getPortName() + ",telnet-" + portInfo1.getTelnetIp() + "-" + portInfo1.getPort() + "," + portInfo1.getHostname(); paramsLogInfo.clear(); paramsLogInfo.put("hostname", warnQueryWd); paramsLogInfo.put("hostnameNe", "已恢复"); portInfo1.setWarnCount(logInfoService.countByParams(paramsLogInfo)); portInfo1.setWarnQueryWd(warnQueryWd); } //设置累积告警次数 end } //设置分组 List hostGroupList = new ArrayList<>(); if (StaticKeys.TRUE_VAL.equals(commonConfig.getHostGroup())) { hostGroupList = portInfoService.setGroupInList(pageInfo.getList()); } //设置用户列表 HostUtil.addAccountListModel(model); PageUtil.initPageNumber(pageInfo, model); model.addAttribute("pageUrl", "/portInfo/list?1=1" + url.toString()); model.addAttribute("page", pageInfo); model.addAttribute("portInfo", PortInfo); model.addAttribute("hostGroupList", hostGroupList); } catch (Exception e) { logger.error("查询端口信息错误", e); logInfoService.save("查询端口信息错误", e.toString(), StaticKeys.LOG_XTCZ); } return "port/list"; } /** * 保存分组信息 * * @param SystemInfo * @param model * @param request * @return */ @ResponseBody @RequestMapping(value = "saveGroupId") public String saveGroupId(Model model, HttpServletRequest request) { try { String ids = request.getParameter("ids"); String groupId = request.getParameter("groupId"); HostGroup hostGroup = hostGroupService.selectById(groupId); if (!StringUtils.isEmpty(ids)) { PortInfo ho = null; for (String id : ids.split(",")) { ho = portInfoService.selectById(id); ho.setGroupId(groupId); portInfoService.updateById(ho); logInfoService.save(HostUtil.getAccountByRequest(request).getAccount() + "设置端口分组:" + ho.getHostname() + "," + ho.getPortName(), "分组:" + hostGroup.getGroupName(), StaticKeys.LOG_XTCZ); } } } catch (Exception e) { logger.error("保存端口分组信息错误", e); logInfoService.save("保存端口分组信息错误", e.toString(), StaticKeys.LOG_XTCZ); } return "redirect:/portInfo/list"; } /** * 保存端口监控信息 * * @param PortInfo * @param model * @param request * @return */ @RequestMapping(value = "save") public String savePortInfo(PortInfo portInfo, Model model, HttpServletRequest request) { String errorMsg = "保存端口信息错误"; try { if (StringUtils.isEmpty(portInfo.getId())) { portInfoService.save(portInfo, request); portInfoService.saveLog(request, StaticKeys.LOG_ADD, portInfo); } else { portInfoService.updateById(portInfo); portInfoService.saveLog(request, StaticKeys.LOG_UPDATE, portInfo); } } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "redirect:/portInfo/list"; } /** * 批量保存端口监控信息 * * @param PortInfo * @param model * @param request * @return */ @RequestMapping(value = "saveBatch") public String saveBatchPortInfo(PortInfo portInfo, Model model, HttpServletRequest request) { String errorMsg = "批量保存端口信息错误"; try { String[] hostnames = request.getParameterValues("hostnames"); if (null == hostnames || hostnames.length < 1) { return "redirect:/portInfo/list"; } for (String selectedHost : hostnames) { portInfo.setHostname(selectedHost); portInfoService.save(portInfo, request); logInfoService.save(HostUtil.getAccountByRequest(request).getAccount() + "保存了端口:" + portInfo.getPortName(), HostUtil.getAccountByRequest(request).getAccount() + "保存端口:" + portInfo.getPortName() + ",监控主机:" + portInfo.getHostname() + ",telnet " + portInfo.getTelnetIp() + " " + portInfo.getPort(), StaticKeys.LOG_XTCZ); } } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "redirect:/portInfo/list"; } /** * 添加 * * @param model * @param request * @return */ @RequestMapping(value = "edit") public String edit(Model model, HttpServletRequest request) { String errorMsg = "添加端口信息错误"; String id = request.getParameter("id"); PortInfo PortInfo = new PortInfo(); try { //校验是否需要添加过滤用户查询条件 Map params = new HashMap(); HostUtil.addAccountquery(request, params); List systemInfoList = systemInfoService.selectAllByParams(params); model.addAttribute("systemInfoList", systemInfoList); if (StringUtils.isEmpty(id)) { model.addAttribute("portInfo", PortInfo); return "port/add"; } PortInfo = portInfoService.selectById(id); model.addAttribute("portInfo", PortInfo); } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "port/add"; } /** * 批量添加 * * @param model * @param request * @return */ @RequestMapping(value = "editBatch") public String editBatch(Model model, HttpServletRequest request) { String errorMsg = "批量添加端口信息错误"; PortInfo PortInfo = new PortInfo(); try { //校验是否需要添加过滤用户查询条件 Map params = new HashMap(); HostUtil.addAccountquery(request, params); List systemInfoList = systemInfoService.selectAllByParams(params); model.addAttribute("systemInfoList", systemInfoList); model.addAttribute("portInfo", PortInfo); } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "port/addBatch"; } /** * 删除端口信息 * * @param id * @param model * @param request * @param redirectAttributes * @return */ @RequestMapping(value = "del") public String delete(Model model, HttpServletRequest request, RedirectAttributes redirectAttributes) { String errorMsg = "删除端口信息错误"; PortInfo portInfo = new PortInfo(); try { if (!StringUtils.isEmpty(request.getParameter("id"))) { String[] ids = request.getParameter("id").split(","); for (String id : ids) { portInfo = portInfoService.selectById(id); portInfoService.saveLog(request, StaticKeys.LOG_DEL, portInfo); } portInfoService.deleteById(ids); } } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "redirect:/portInfo/list"; } }