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.FileWarnInfo; import com.wgcloud.entity.FileWarnState; import com.wgcloud.entity.SystemInfo; import com.wgcloud.service.*; 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 javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @version v3.3 * @ClassName:FileWarnInfoController.java * @author: http://www.wgstart.com * @date: 2021年1月16日 * @Description: 日志文件监控 * @Copyright: 2019-2021 wgcloud. All rights reserved. */ @Controller @RequestMapping("/fileWarnInfo") public class FileWarnInfoController { private static final Logger logger = LoggerFactory.getLogger(FileWarnInfoController.class); @Resource private FileWarnInfoService fileWarnInfoService; @Resource private FileWarnStateService fileWarnStateService; @Resource private LogInfoService logInfoService; @Resource private SystemInfoService systemInfoService; @Resource private ExcelExportService excelExportService; @Autowired private TokenUtils tokenUtils; @Autowired private CommonConfig commonConfig; /** * agent查询日志监控列表 * * @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 FileWarnInfoList = fileWarnInfoService.selectAllByParams(params); return ResDataUtils.resetSuccessJson(FileWarnInfoList); } catch (Exception e) { logger.error("agent获取日志监控信息错误", e); logInfoService.save("agent获取日志监控信息错误", e.toString(), StaticKeys.LOG_XTCZ); return ResDataUtils.resetErrorJson(e.toString()); } } /** * agent查询监控日志告警详情信息列表 * * @param model * @param request * @return */ @ResponseBody @RequestMapping(value = "agentStateListList") public String agentStateListList(@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("fileWarnId") || StringUtils.isEmpty(agentJsonObject.get("fileWarnId").toString())) { return ResDataUtils.resetErrorJson(StaticKeys.REQUIRE_PARAM_ERROR); } params.put("fileWarnId", agentJsonObject.get("fileWarnId").toString()); try { PageInfo pageInfo = fileWarnStateService.selectByParams(params, agentJsonObject.getInt("page"), agentJsonObject.getInt("pageSize")); JSONObject pageJson = new JSONObject(); pageJson.set("total", pageInfo.getTotal()); pageJson.set("pages", pageInfo.getPages()); pageJson.set("page", agentJsonObject.getInt("page")); pageJson.set("pageSize", agentJsonObject.getInt("pageSize")); pageJson.set("list", pageInfo.getList()); return ResDataUtils.resetSuccessJson(pageJson); } 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 fileWarnInfoList(FileWarnInfo FileWarnInfo, Model model, HttpServletRequest request) { Map params = new HashMap(); try { StringBuffer url = new StringBuffer(); String hostname = null; if (!StringUtils.isEmpty(FileWarnInfo.getHostname())) { hostname = FileWarnInfo.getHostname(); params.put("hostname", hostname.trim()); url.append("&hostname=").append(hostname); } if (!StringUtils.isEmpty(FileWarnInfo.getAccount())) { params.put("account", FileWarnInfo.getAccount()); url.append("&account=").append(FileWarnInfo.getAccount()); } if (!StringUtils.isEmpty(FileWarnInfo.getOrderBy())) { params.put("orderBy", FileWarnInfo.getOrderBy()); params.put("orderType", FileWarnInfo.getOrderType()); url.append("&orderBy=").append(FileWarnInfo.getOrderBy()); url.append("&orderType=").append(FileWarnInfo.getOrderType()); } //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); PageInfo pageInfo = fileWarnInfoService.selectByParams(params, FileWarnInfo.getPage(), FileWarnInfo.getPageSize()); for (FileWarnInfo fileWarnInfo1 : pageInfo.getList()) { fileWarnInfo1.setHostname(fileWarnInfo1.getHostname() + HostUtil.addRemark(fileWarnInfo1.getHostname())); //设置所属用户账号 begin if (StaticKeys.TRUE_VAL.equals(commonConfig.getUserInfoManage())) { fileWarnInfo1.setAccount(HostUtil.getAccount(fileWarnInfo1.getHostname())); } //设置所属用户账号 begin } //设置用户列表 HostUtil.addAccountListModel(model); PageUtil.initPageNumber(pageInfo, model); model.addAttribute("pageUrl", "/fileWarnInfo/list?1=1" + url.toString()); model.addAttribute("page", pageInfo); model.addAttribute("fileWarnInfo", FileWarnInfo); } catch (Exception e) { logger.error("查询日志监控信息错误", e); logInfoService.save("查询日志监控信息错误", e.toString(), StaticKeys.LOG_XTCZ); } return "file/list"; } /** * 保存应用监控信息 * * @param FileWarnInfo * @param model * @param request * @return */ @RequestMapping(value = "save") public String saveFileWarnInfo(FileWarnInfo FileWarnInfo, Model model, HttpServletRequest request) { try { if (StringUtils.isEmpty(FileWarnInfo.getId())) { FileWarnInfo.setWarnRows("0"); FileWarnInfo.setFileSize("0"); fileWarnInfoService.save(FileWarnInfo); } else { fileWarnInfoService.updateById(FileWarnInfo); } } catch (Exception e) { logger.error("保存日志监控错误", e); logInfoService.save("保存日志监控错误", e.toString(), StaticKeys.LOG_XTCZ); } return "redirect:/fileWarnInfo/list"; } /** * 批量保存应用监控信息 * * @param FileWarnInfo * @param model * @param request * @return */ @RequestMapping(value = "saveBatch") public String saveBatchFileWarnInfo(FileWarnInfo FileWarnInfo, Model model, HttpServletRequest request) { try { String[] hostnames = request.getParameterValues("hostnames"); if (null == hostnames || hostnames.length < 1) { return "redirect:/fileWarnInfo/list"; } for (String selectedHost : hostnames) { FileWarnInfo.setHostname(selectedHost); FileWarnInfo.setWarnRows("0"); FileWarnInfo.setFileSize("0"); fileWarnInfoService.save(FileWarnInfo); } } catch (Exception e) { logger.error("批量保存日志监控错误", e); logInfoService.save("批量保存日志监控错误", e.toString(), StaticKeys.LOG_XTCZ); } return "redirect:/fileWarnInfo/list"; } /** * 添加 * * @param model * @param request * @return */ @RequestMapping(value = "edit") public String edit(Model model, HttpServletRequest request) { String errorMsg = "添加日志监控"; String id = request.getParameter("id"); FileWarnInfo fileWarnInfo = new FileWarnInfo(); try { //校验是否需要添加过滤用户查询条件 Map paramsAccount = new HashMap(); HostUtil.addAccountquery(request, paramsAccount); List systemInfoList = systemInfoService.selectAllByParams(paramsAccount); model.addAttribute("systemInfoList", systemInfoList); if (StringUtils.isEmpty(id)) { fileWarnInfo.setFileType("1"); model.addAttribute("fileWarnInfo", fileWarnInfo); return "file/add"; } fileWarnInfo = fileWarnInfoService.selectById(id); model.addAttribute("fileWarnInfo", fileWarnInfo); } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "file/add"; } /** * 批量添加 * * @param model * @param request * @return */ @RequestMapping(value = "editBatch") public String editBatch(Model model, HttpServletRequest request) { String errorMsg = "批量添加日志监控"; FileWarnInfo fileWarnInfo = new FileWarnInfo(); try { List systemInfoList = systemInfoService.selectAllByParams(new HashMap<>()); model.addAttribute("systemInfoList", systemInfoList); fileWarnInfo.setFileType("1"); model.addAttribute("fileWarnInfo", fileWarnInfo); } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "file/addBatch"; } /** * 添加 * * @param model * @param request * @return */ @RequestMapping(value = "view") public String view(Model model, HttpServletRequest request) { String errorMsg = "查看日志监控"; String id = request.getParameter("id"); FileWarnInfo fileWarnInfo = new FileWarnInfo(); try { fileWarnInfo = fileWarnInfoService.selectById(id); //提取主机备注 begin fileWarnInfo.setHostname(fileWarnInfo.getHostname() + HostUtil.addRemark(fileWarnInfo.getHostname())); //提取主机备注 end model.addAttribute("fileWarnInfo", fileWarnInfo); } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "file/view"; } /** * 查看日志告警列表 * * @param model * @param request * @return */ @RequestMapping(value = "stateList") public String stateList(FileWarnState fileWarnState, Model model, HttpServletRequest request) { Map params = new HashMap(); try { StringBuffer url = new StringBuffer(); FileWarnInfo fileWarnInfo = null; if (!StringUtils.isEmpty(fileWarnState.getFileWarnId())) { fileWarnInfo = fileWarnInfoService.selectById(fileWarnState.getFileWarnId()); params.put("fileWarnId", fileWarnState.getFileWarnId()); url.append("&fileWarnId=").append(fileWarnState.getFileWarnId()); } PageInfo pageInfo = fileWarnStateService.selectByParams(params, fileWarnState.getPage(), fileWarnState.getPageSize()); PageUtil.initPageNumber(pageInfo, model); model.addAttribute("pageUrl", "/fileWarnInfo/stateList?1=1" + url.toString()); model.addAttribute("page", pageInfo); //提取主机备注 begin fileWarnInfo.setHostname(fileWarnInfo.getHostname() + HostUtil.addRemark(fileWarnInfo.getHostname())); //提取主机备注 end model.addAttribute("fileWarnInfo", fileWarnInfo); } catch (Exception e) { logger.error("查询日志监控信息错误", e); logInfoService.save("查询日志监控信息错误", e.toString(), StaticKeys.LOG_XTCZ); } return "file/stateList"; } /** * 导出日志监控信息excel * * @param model * @param request * @return */ @RequestMapping(value = "chartExcel") public void chartExcel(Model model, HttpServletRequest request, HttpServletResponse response) { String errorMsg = "日志监控信息导出excel错误"; String id = request.getParameter("id"); try { Map params = new HashMap(); if (StringUtils.isEmpty(id)) { response.setContentType("text/html;charset=UTF-8"); response.getOutputStream().write(StaticKeys.EXCEL_PARAM_ERROR.getBytes()); return; } FileWarnInfo fileWarnInfo = fileWarnInfoService.selectById(id); params.put("fileWarnId", id); excelExportService.exportFileWarnStateExcel(fileWarnInfo, params, response); } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } } /** * 查看日志告警详情 * * @param model * @param request * @return */ @RequestMapping(value = "stateView") public String stateView(FileWarnState fileWarnState, Model model, HttpServletRequest request) { Map params = new HashMap(); try { fileWarnState = fileWarnStateService.selectById(fileWarnState.getId()); model.addAttribute("fileWarnState", fileWarnState); FileWarnInfo fileWarnInfo = fileWarnInfoService.selectById(fileWarnState.getFileWarnId()); //提取主机备注 begin fileWarnInfo.setHostname(fileWarnInfo.getHostname() + HostUtil.addRemark(fileWarnInfo.getHostname())); //提取主机备注 end model.addAttribute("fileWarnInfo", fileWarnInfo); } catch (Exception e) { logger.error("查询日志监控信息详情错误", e); logInfoService.save("查询日志监控信息详情错误", e.toString(), StaticKeys.LOG_XTCZ); } return "file/stateView"; } /** * 删除日志监控 * * @param id * @param model * @param request * @param redirectAttributes * @return */ @RequestMapping(value = "del") public String delete(Model model, HttpServletRequest request, RedirectAttributes redirectAttributes) { String errorMsg = "删除日志监控信息错误"; FileWarnInfo FileWarnInfo = new FileWarnInfo(); try { if (!StringUtils.isEmpty(request.getParameter("id"))) { String[] ids = request.getParameter("id").split(","); for (String id : ids) { FileWarnInfo = fileWarnInfoService.selectById(id); logInfoService.save("删除日志监控:" + FileWarnInfo.getHostname(), "删除日志监控:" + FileWarnInfo.getHostname(), StaticKeys.LOG_XTCZ); } fileWarnInfoService.deleteById(ids); } } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "redirect:/fileWarnInfo/list"; } }