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.DockerInfo; import com.wgcloud.entity.DockerState; import com.wgcloud.entity.HostGroup; 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.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @version v3.3 * @ClassName:DockerInfoController.java * @author: http://www.wgstart.com * @date: 2021年1月16日 * @Description: docker信息管理 * @Copyright: 2019-2021 wgcloud. All rights reserved. */ @Controller @RequestMapping("/dockerInfo") public class DockerInfoController { private static final Logger logger = LoggerFactory.getLogger(DockerInfoController.class); @Resource private DockerInfoService dockerInfoService; @Resource private DockerStateService dockerStateService; @Resource private LogInfoService logInfoService; @Resource private SystemInfoService systemInfoService; @Resource private DashboardService dashboardService; @Resource private ExcelExportService excelExportService; @Resource private HostGroupService hostGroupService; @Autowired private TokenUtils tokenUtils; @Autowired private CommonConfig commonConfig; /** * agent查询docker列表 * * @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 DockerInfoList = dockerInfoService.selectAllByParams(params); return ResDataUtils.resetSuccessJson(DockerInfoList); } catch (Exception e) { logger.error("agent获取docker信息错误", e); logInfoService.save("agent获取docker信息错误", e.toString(), StaticKeys.LOG_XTCZ); return ResDataUtils.resetErrorJson(e.toString()); } } /** * 根据条件查询docker信息列表 * * @param model * @param request * @return */ @RequestMapping(value = "list") public String dockerInfoList(DockerInfo DockerInfo, Model model, HttpServletRequest request) { Map params = new HashMap(); try { StringBuffer url = new StringBuffer(); String hostname = null; if (!StringUtils.isEmpty(DockerInfo.getHostname())) { hostname = DockerInfo.getHostname(); params.put("hostname", hostname.trim()); url.append("&hostname=").append(hostname); } if (!StringUtils.isEmpty(DockerInfo.getAccount())) { params.put("account", DockerInfo.getAccount()); url.append("&account=").append(DockerInfo.getAccount()); } if (!StringUtils.isEmpty(DockerInfo.getState())) { params.put("state", DockerInfo.getState()); url.append("&state=").append(DockerInfo.getState()); } if (!StringUtils.isEmpty(DockerInfo.getGroupId())) { params.put("groupId", DockerInfo.getGroupId()); url.append("&groupId=").append(DockerInfo.getGroupId()); } if (!StringUtils.isEmpty(DockerInfo.getOrderBy())) { params.put("orderBy", DockerInfo.getOrderBy()); params.put("orderType", DockerInfo.getOrderType()); url.append("&orderBy=").append(DockerInfo.getOrderBy()); url.append("&orderType=").append(DockerInfo.getOrderType()); } //校验是否需要添加过滤用户查询条件 HostUtil.addAccountquery(request, params); PageInfo pageInfo = dockerInfoService.selectByParams(params, DockerInfo.getPage(), DockerInfo.getPageSize()); Map paramsLogInfo = new HashMap(); for (DockerInfo dockerInfo1 : pageInfo.getList()) { dockerInfo1.setHostname(dockerInfo1.getHostname() + HostUtil.addRemark(dockerInfo1.getHostname())); //设置所属用户账号 begin if (StaticKeys.TRUE_VAL.equals(commonConfig.getUserInfoManage())) { dockerInfo1.setAccount(HostUtil.getAccount(dockerInfo1.getHostname())); } //设置所属用户账号 begin //设置累积告警次数 begin if (StaticKeys.TRUE_VAL.equals(commonConfig.getShowWarnCount())) { String warnQueryWd = dockerInfo1.getDockerName() + "," + dockerInfo1.getHostname(); paramsLogInfo.clear(); paramsLogInfo.put("hostname", warnQueryWd); paramsLogInfo.put("hostnameNe", "已恢复"); dockerInfo1.setWarnCount(logInfoService.countByParams(paramsLogInfo)); dockerInfo1.setWarnQueryWd(warnQueryWd); } //设置累积告警次数 end } //设置分组 List hostGroupList = new ArrayList<>(); if (StaticKeys.TRUE_VAL.equals(commonConfig.getHostGroup())) { hostGroupList = dockerInfoService.setGroupInList(pageInfo.getList()); } //设置用户列表 HostUtil.addAccountListModel(model); PageUtil.initPageNumber(pageInfo, model); model.addAttribute("pageUrl", "/dockerInfo/list?1=1" + url.toString()); model.addAttribute("page", pageInfo); model.addAttribute("dockerInfo", DockerInfo); model.addAttribute("hostGroupList", hostGroupList); } catch (Exception e) { logger.error("查询docker信息错误", e); logInfoService.save("查询docker信息错误", e.toString(), StaticKeys.LOG_XTCZ); } return "docker/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)) { DockerInfo ho = null; for (String id : ids.split(",")) { ho = dockerInfoService.selectById(id); ho.setGroupId(groupId); dockerInfoService.updateById(ho); logInfoService.save(HostUtil.getAccountByRequest(request).getAccount() + "设置docker分组:" + ho.getHostname() + "," + ho.getDockerName(), "分组:" + hostGroup.getGroupName(), StaticKeys.LOG_XTCZ); } } } catch (Exception e) { logger.error("保存docker分组信息错误", e); logInfoService.save("保存docker分组信息错误", e.toString(), StaticKeys.LOG_XTCZ); } return "redirect:/dockerInfo/list"; } /** * 保存docker监控信息 * * @param DockerInfo * @param model * @param request * @return */ @RequestMapping(value = "save") public String saveDockerInfo(DockerInfo dockerInfo, Model model, HttpServletRequest request) { String errorMsg = "保存docker信息错误"; try { if (StringUtils.isEmpty(dockerInfo.getId())) { dockerInfoService.save(dockerInfo, request); dockerInfoService.saveLog(request, StaticKeys.LOG_ADD, dockerInfo); } else { dockerInfoService.updateById(dockerInfo); dockerInfoService.saveLog(request, StaticKeys.LOG_UPDATE, dockerInfo); } } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "redirect:/dockerInfo/list"; } /** * 批量保存docker监控信息 * * @param DockerInfo * @param model * @param request * @return */ @RequestMapping(value = "saveBatch") public String saveBatchDockerInfo(DockerInfo dockerInfo, Model model, HttpServletRequest request) { String errorMsg = "批量保存docker信息错误"; try { String[] hostnames = request.getParameterValues("hostnames"); if (null == hostnames || hostnames.length < 1) { return "redirect:/dockerInfo/list"; } for (String selectedHost : hostnames) { dockerInfo.setHostname(selectedHost); dockerInfoService.save(dockerInfo, request); } } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "redirect:/dockerInfo/list"; } /** * 添加 * * @param model * @param request * @return */ @RequestMapping(value = "edit") public String edit(Model model, HttpServletRequest request) { String errorMsg = "添加docker信息"; String id = request.getParameter("id"); DockerInfo DockerInfo = new DockerInfo(); try { //校验是否需要添加过滤用户查询条件 Map params = new HashMap(); HostUtil.addAccountquery(request, params); List systemInfoList = systemInfoService.selectAllByParams(params); model.addAttribute("systemInfoList", systemInfoList); if (StringUtils.isEmpty(id)) { model.addAttribute("dockerInfo", DockerInfo); return "docker/add"; } DockerInfo = dockerInfoService.selectById(id); model.addAttribute("dockerInfo", DockerInfo); } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "docker/add"; } /** * 批量添加 * * @param model * @param request * @return */ @RequestMapping(value = "editBatch") public String editBatch(Model model, HttpServletRequest request) { String errorMsg = "批量添加docker信息"; DockerInfo DockerInfo = new DockerInfo(); try { //校验是否需要添加过滤用户查询条件 Map params = new HashMap(); HostUtil.addAccountquery(request, params); List systemInfoList = systemInfoService.selectAllByParams(params); model.addAttribute("systemInfoList", systemInfoList); model.addAttribute("dockerInfo", DockerInfo); } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "docker/addBatch"; } /** * 查看该docker统计图 * * @param model * @param request * @return */ @RequestMapping(value = "view") public String viewChart(Model model, HttpServletRequest request) { String errorMsg = "查看docker信息图表错误"; String id = request.getParameter("id"); String startTime = request.getParameter(StaticKeys.SEARCH_START_TIME); String endTime = request.getParameter(StaticKeys.SEARCH_END_TIME); String am = request.getParameter("am"); DockerInfo dockerInfo = new DockerInfo(); try { dockerInfo = dockerInfoService.selectById(id); //提取主机备注 begin dockerInfo.setHostname(dockerInfo.getHostname() + HostUtil.addRemark(dockerInfo.getHostname())); //提取主机备注 end Map params = new HashMap(); dashboardService.setDateParam(am, startTime, endTime, params, model); model.addAttribute("amList", dashboardService.getAmList()); params.put("dockerInfoId", dockerInfo.getId()); model.addAttribute("dockerInfo", dockerInfo); List DockerStateList = dockerStateService.selectAllByParams(params); // 设置图表的副标题,内存的最高、平均、最低值 dockerStateService.setSubtitle(model, DockerStateList); model.addAttribute("dockerStateList", JSONUtil.parseArray(DockerStateList)); } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "docker/view"; } /** * 查看该docker统计图,导出excel * * @param model * @param request * @return */ @RequestMapping(value = "chartExcel") public void chartExcel(Model model, HttpServletRequest request, HttpServletResponse response) { String errorMsg = "docker信息统计图导出excel"; String id = request.getParameter("id"); String startTime = request.getParameter(StaticKeys.SEARCH_START_TIME); String endTime = request.getParameter(StaticKeys.SEARCH_END_TIME); String am = request.getParameter("am"); try { if (StringUtils.isEmpty(id)) { response.setContentType("text/html;charset=UTF-8"); response.getOutputStream().write(StaticKeys.EXCEL_PARAM_ERROR.getBytes()); return; } Map params = new HashMap(); params.put("dockerInfoId", id); dashboardService.setDateParam(am, startTime, endTime, params, model); excelExportService.exportDockerExcel(params, response); } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } } /** * 删除docker信息 * * @param id * @param model * @param request * @param redirectAttributes * @return */ @RequestMapping(value = "del") public String delete(Model model, HttpServletRequest request, RedirectAttributes redirectAttributes) { String errorMsg = "删除docker信息错误"; DockerInfo DockerInfo = new DockerInfo(); try { if (!StringUtils.isEmpty(request.getParameter("id"))) { String[] ids = request.getParameter("id").split(","); for (String id : ids) { DockerInfo = dockerInfoService.selectById(id); dockerInfoService.saveLog(request, StaticKeys.LOG_DEL, DockerInfo); } dockerInfoService.deleteById(ids); } } catch (Exception e) { logger.error(errorMsg, e); logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ); } return "redirect:/dockerInfo/list"; } }