package com.sobey.cmop.mvc.web.apply.iaas; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.sobey.cmop.mvc.comm.BaseController; import com.sobey.cmop.mvc.entity.Apply; import com.sobey.cmop.mvc.entity.ComputeItem; import com.sobey.cmop.mvc.entity.MonitorCompute; import com.sobey.cmop.mvc.entity.MonitorElb; import com.sobey.cmop.mvc.entity.NetworkElbItem; /** * 负责ELB监控MonitorElb & 实例监控MonitorCompute的管理 * * @author liukai * */ @Controller @RequestMapping(value = "/apply/monitor") public class MonitorController extends BaseController { private static final String REDIRECT_SUCCESS_URL = "redirect:/apply/"; /** * 跳转到新增页面 */ @RequestMapping(value = "/save", method = RequestMethod.GET) public String createForm(Model model) { return "apply/monitor/monitorForm"; } /** * 新增监控(实例 & ELB) * * @param serviceTag * 服务标签 * @param priority * 优先级 * @param serviceStart * 服务开始时间 * @param serviceEnd * 服务结束时间 * @param description * 说明 * @param monitorMails * 监控邮件lb * @param monitorPhones * 监控手机列表 * @param elbIds * 监控的elbId数组 * @param computeIds * 监控的实例ComputeId数组 * @param cpuWarns * CPU占用报警数组 * @param cpuCriticals * CPU占用警告数组 * @param memoryWarns * 内存占用报警数组 * @param memoryCriticals * 内存占用警告数组 * @param pingLossWarns * 网络丢包报警数组 * @param pingLossCriticals * 网络丢包警告数组 * @param diskWarns * 硬盘可用报警数组 * @param diskCriticals * 硬盘可用警告数组 * @param pingDelayWarns * 网络延时率报警数组 * @param pingDelayCriticals * 网络延时率警告数组 * @param maxProcessWarns * 最大进程数报警数组 * @param maxProcessCriticals * 最大进程数警告数组 * @param ports * 监控端口数组 * @param processes * 监控进程数组 * @param mountPoints * 挂载路径数组 * @param redirectAttributes * @return */ @RequestMapping(value = "/save/", method = RequestMethod.POST) public String save( // Apply @RequestParam(value = "serviceTag") String serviceTag, @RequestParam(value = "priority") Integer priority, @RequestParam(value = "serviceStart") String serviceStart, @RequestParam(value = "serviceEnd") String serviceEnd, @RequestParam(value = "description") String description, // monitorMail , monitorPhone @RequestParam(value = "monitorMails") String[] monitorMails, @RequestParam(value = "monitorPhones") String[] monitorPhones, // monitor_Elb @RequestParam(value = "elbIds", required = false) String[] elbIds, // monitor_Compute @RequestParam(value = "computeIds", required = false) String[] computeIds, @RequestParam(value = "cpuWarns", required = false) String[] cpuWarns, @RequestParam(value = "cpuCriticals", required = false) String[] cpuCriticals, @RequestParam(value = "memoryWarns", required = false) String[] memoryWarns, @RequestParam(value = "memoryCriticals", required = false) String[] memoryCriticals, @RequestParam(value = "pingLossWarns", required = false) String[] pingLossWarns, @RequestParam(value = "pingLossCriticals", required = false) String[] pingLossCriticals, @RequestParam(value = "diskWarns", required = false) String[] diskWarns, @RequestParam(value = "diskCriticals", required = false) String[] diskCriticals, @RequestParam(value = "pingDelayWarns", required = false) String[] pingDelayWarns, @RequestParam(value = "pingDelayCriticals", required = false) String[] pingDelayCriticals, @RequestParam(value = "maxProcessWarns", required = false) String[] maxProcessWarns, @RequestParam(value = "maxProcessCriticals", required = false) String[] maxProcessCriticals, @RequestParam(value = "ports", required = false) String[] ports, @RequestParam(value = "processes", required = false) String[] processes, @RequestParam(value = "mountPoints", required = false) String[] mountPoints, RedirectAttributes redirectAttributes) { Apply apply = new Apply(); apply.setServiceTag(serviceTag); apply.setPriority(priority); apply.setServiceStart(serviceStart); apply.setServiceEnd(serviceEnd); apply.setDescription(description); comm.monitorServcie .saveMonitorToApply(apply, monitorMails, monitorPhones, elbIds, computeIds, cpuWarns, cpuCriticals, memoryWarns, memoryCriticals, pingLossWarns, pingLossCriticals, diskWarns, diskCriticals, pingDelayWarns, pingDelayCriticals, maxProcessWarns, maxProcessCriticals, ports, processes, mountPoints); redirectAttributes.addFlashAttribute("message", "创建监控成功."); return REDIRECT_SUCCESS_URL; } // ========== ELB监控 =============// /** * 从服务申请表页面跳转到ELB监控的修改页面. */ @RequestMapping(value = "/elb/update/{id}/applyId/{applyId}", method = RequestMethod.GET) public String updateElbForm(@PathVariable("id") Integer id, @PathVariable("applyId") Integer applyId, Model model) { model.addAttribute("monitorElb", comm.monitorElbServcie.getMonitorElb(id)); model.addAttribute("monitorMails", comm.monitorMailService.getMonitorMailByApplyList(applyId)); model.addAttribute("monitorPhones", comm.monitorPhoneService.getMonitorPhoneByApplyList(applyId)); return "apply/monitor/monitorElbUpateForm"; } /** * 修改ELB监控.完成后跳转到applyId的服务申请修改页面 * * @param id * @param applyId * 服务申请单ID * @param elbId * 修改后的elbId * @param redirectAttributes * @return */ @RequestMapping(value = "/elb/update/{id}/applyId", method = RequestMethod.POST) public String updateElb(@PathVariable("id") Integer id, @RequestParam("applyId") Integer applyId, @RequestParam(value = "elbId") Integer elbId, RedirectAttributes redirectAttributes) { MonitorElb monitorElb = comm.monitorElbServcie.getMonitorElb(id); comm.monitorElbServcie.updateMonitorElbToApply(monitorElb, elbId); redirectAttributes.addFlashAttribute("message", "修改ELB监控 " + monitorElb.getIdentifier() + " 成功"); return "redirect:/apply/update/" + applyId; } /** * 删除ELB监控后,跳转到applyId的服务申请修改页面 */ @RequestMapping(value = "/elb/delete/{id}/applyId/{applyId}") public String deleteElb(@PathVariable("id") Integer id, @PathVariable("applyId") Integer applyId, RedirectAttributes redirectAttributes) { comm.monitorElbServcie.deleteMonitorElb(id); redirectAttributes.addFlashAttribute("message", "删除ELB监控成功"); return "redirect:/apply/update/" + applyId; } // ========== Compute监控 =============// /** * 从服务申请表页面跳转到Compute监控的修改页面. */ @RequestMapping(value = "/compute/update/{id}/applyId/{applyId}", method = RequestMethod.GET) public String updateComputeForm(@PathVariable("id") Integer id, @PathVariable("applyId") Integer applyId, Model model) { MonitorCompute monitorCompute = comm.monitorComputeServcie.getMonitorCompute(id); model.addAttribute("monitorCompute", monitorCompute); model.addAttribute("ports", comm.monitorComputeServcie.wrapMonitorComputeParametToList(monitorCompute.getPort())); model.addAttribute("processes", comm.monitorComputeServcie.wrapMonitorComputeParametToList(monitorCompute.getProcess())); model.addAttribute("mountPoints", comm.monitorComputeServcie.wrapMonitorComputeParametToList(monitorCompute.getMountPoint())); model.addAttribute("monitorMails", comm.monitorMailService.getMonitorMailByApplyList(applyId)); model.addAttribute("monitorPhones", comm.monitorPhoneService.getMonitorPhoneByApplyList(applyId)); return "apply/monitor/monitorComputeUpateForm"; } /** * 修改Compute监控.完成后跳转到applyId的服务申请修改页面 * * @param id * @param applyId * 服务申请单ID * @param computeId * 监控实例的ID * @param cpuWarn * CPU占用报警 * @param cpuCritical * CPU占用警告 * @param memoryWarn * 内存占用报警 * @param memoryCritical * 内存占用警告 * @param pingLossWarn * 网络丢包报警 * @param pingLossCritical * 网络丢包警告 * @param diskWarn * 硬盘可用报警 * @param diskCritical * 硬盘可用警告 * @param pingDelayWarn * 网络延时率报警 * @param pingDelayCritical * 网络延时率警告 * @param maxProcessWarn * 最大进程数报警 * @param maxProcessCritical * 最大进程数警告 * @param port * 监控端口 * @param process * 监控进程 * @param mountPoint * 挂载路径 * @param redirectAttributes * * * @return */ @RequestMapping(value = "/compute/update/{id}/applyId", method = RequestMethod.POST) public String updateCompute(@PathVariable("id") Integer id, @RequestParam("applyId") Integer applyId, @RequestParam(value = "ipAddress") String ipAddress, @RequestParam(value = "cpuWarn") String cpuWarn, @RequestParam(value = "cpuCritical") String cpuCritical, @RequestParam(value = "memoryWarn") String memoryWarn, @RequestParam(value = "memoryCritical") String memoryCritical, @RequestParam(value = "pingLossWarn") String pingLossWarn, @RequestParam(value = "pingLossCritical") String pingLossCritical, @RequestParam(value = "diskWarn") String diskWarn, @RequestParam(value = "diskCritical") String diskCritical, @RequestParam(value = "pingDelayWarn") String pingDelayWarn, @RequestParam(value = "pingDelayCritical") String pingDelayCritical, @RequestParam(value = "maxProcessWarn") String maxProcessWarn, @RequestParam(value = "maxProcessCritical") String maxProcessCritical, @RequestParam(value = "port", required = false) String port, @RequestParam(value = "process", required = false) String process, @RequestParam(value = "mountPoint", required = false) String mountPoint, RedirectAttributes redirectAttributes) { MonitorCompute monitorCompute = comm.monitorComputeServcie.getMonitorCompute(id); comm.monitorComputeServcie.updateMonitorComputeToApply(monitorCompute, ipAddress, cpuWarn, cpuCritical, memoryWarn, memoryCritical, pingLossWarn, pingLossCritical, diskWarn, diskCritical, pingDelayWarn, pingDelayCritical, maxProcessWarn, maxProcessCritical, port, process, mountPoint); redirectAttributes.addFlashAttribute("message", "修改实例监控 " + monitorCompute.getIdentifier() + " 成功"); return "redirect:/apply/update/" + applyId; } /** * 删除Compute监控后,跳转到applyId的服务申请修改页面 */ @RequestMapping(value = "/compute/delete/{id}/applyId/{applyId}") public String deleteCompute(@PathVariable("id") Integer id, @PathVariable("applyId") Integer applyId, RedirectAttributes redirectAttributes) { comm.monitorComputeServcie.deleteMonitorCompute(id); redirectAttributes.addFlashAttribute("message", "删除实例监控成功"); return "redirect:/apply/update/" + applyId; } /** * 用户已有的负载均衡器ELB * * @return */ @ModelAttribute("elbResources") public List<NetworkElbItem> elbResources() { return comm.basicUnitService.getNetworkElbItemListByResources(getCurrentUserId()); } /** * 用户已有的实例compute * * @return */ @ModelAttribute("computeResources") public List<ComputeItem> computeResources() { return comm.basicUnitService.getComputeItemListByResources(getCurrentUserId()); } }