package com.sobey.cmop.mvc.web.resource; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.servlet.ServletRequest; 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.constant.ResourcesConstant; import com.sobey.cmop.mvc.entity.ComputeItem; import com.sobey.cmop.mvc.entity.MonitorCompute; import com.sobey.cmop.mvc.entity.NetworkElbItem; import com.sobey.cmop.mvc.entity.Resources; import com.sobey.framework.utils.Servlets; /** * ResourcesController负责资源Resources的管理 * * @author liukai * */ @Controller @RequestMapping(value = "/resources") public class ResourcesController extends BaseController { private static final String REDIRECT_SUCCESS_URL = "redirect:/resources/"; /** * 显示资源Resources的List */ @RequestMapping(value = { "list", "" }) public String assigned(@RequestParam(value = "page", defaultValue = "1") int pageNumber, @RequestParam(value = "page.size", defaultValue = PAGE_SIZE) int pageSize, Model model, ServletRequest request) { Map<String, Object> searchParams = Servlets.getParametersStartingWith(request, REQUEST_PREFIX); model.addAttribute("page", comm.resourcesService.getResourcesPageable(searchParams, pageNumber, pageSize)); // 将搜索条件编码成字符串,分页的URL model.addAttribute("searchParams", Servlets.encodeParameterStringWithPrefix(searchParams, REQUEST_PREFIX)); /** * 返回不同服务类型的资源统计.页面参数为:服务类型名+COUNT. eg: PCSCOUNT,ECSCOUNT. * * 服务类型注意是从ResourcesConstant.ServiceType中迭代出来的. 所以枚举中修改了名称的话, 页面的参数名和链接后的查询参数也需要修改. */ for (Entry<Integer, String> entry : ResourcesConstant.ServiceType.map.entrySet()) { model.addAttribute(entry.getValue() + "COUNT", comm.resourcesService.getResourcesStatistics(entry.getKey())); } return "resource/resourceList"; } /** * 跳转到变更页面 */ @RequestMapping(value = "/update/{id}", method = RequestMethod.GET) public String updateForm(@PathVariable("id") Integer id, Model model) { Resources resources = comm.resourcesService.getResources(id); model.addAttribute("resources", resources); model.addAttribute("change", comm.changeServcie.findChangeByResourcesId(id)); String updateUrl = ""; Integer serviceId = resources.getServiceId(); // 服务类型 Integer serviceType = resources.getServiceType(); if (serviceType.equals(ResourcesConstant.ServiceType.PCS.toInteger()) || serviceType.equals(ResourcesConstant.ServiceType.ECS.toInteger())) { model.addAttribute("compute", comm.computeService.getComputeItem(serviceId)); updateUrl = "resource/form/compute"; } else if (serviceType.equals(ResourcesConstant.ServiceType.ES3.toInteger())) { model.addAttribute("storage", comm.es3Service.getStorageItem(serviceId)); updateUrl = "resource/form/storage"; } else if (serviceType.equals(ResourcesConstant.ServiceType.ELB.toInteger())) { NetworkElbItem networkElbItem = comm.elbService.getNetworkElbItem(serviceId); model.addAttribute("elb", networkElbItem); updateUrl = "resource/form/elb"; } else if (serviceType.equals(ResourcesConstant.ServiceType.EIP.toInteger())) { model.addAttribute("eip", comm.eipService.getNetworkEipItem(serviceId)); model.addAttribute("elbResources", comm.basicUnitService.getNetworkElbItemListByResources(getCurrentUserId())); updateUrl = "resource/form/eip"; } else if (serviceType.equals(ResourcesConstant.ServiceType.DNS.toInteger())) { model.addAttribute("dns", comm.dnsService.getNetworkDnsItem(serviceId)); model.addAttribute("eipResources", comm.basicUnitService.getNetworkEipItemListByResources(getCurrentUserId())); updateUrl = "resource/form/dns"; } else if (serviceType.equals(ResourcesConstant.ServiceType.MONITOR_COMPUTE.toInteger())) { MonitorCompute monitorCompute = comm.monitorComputeServcie.getMonitorCompute(serviceId); 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())); updateUrl = "resource/form/monitorCompute"; } else if (serviceType.equals(ResourcesConstant.ServiceType.MONITOR_ELB.toInteger())) { model.addAttribute("monitorElb", comm.monitorElbServcie.getMonitorElb(serviceId)); updateUrl = "resource/form/monitorElb"; } else if (serviceType.equals(ResourcesConstant.ServiceType.MDN.toInteger())) { model.addAttribute("mdn", comm.mdnService.getMdnItem(serviceId)); updateUrl = "resource/form/mdn"; } else if (serviceType.equals(ResourcesConstant.ServiceType.CP.toInteger())) { model.addAttribute("cp", comm.cpService.getCpItem(serviceId)); updateUrl = "resource/form/cp"; } else { updateUrl = "resource/resourceList"; } return updateUrl; } /** * 资源回收. * * <pre> * 1.根据ID查询该资源属于哪种类型(PCS,ECS,ES3...)并获得各个单元的对象. * 2.查询该资源对象关联的所有资源(根据不同的资源关联的资源对象也不同),拼接成邮件,直接发送至redmine第一接收人处. * 3.审批->工单处理完成后,再物理删除cmop本地的数据以及oneCMDB的数据(通过API实现). * </pre> */ @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET) public String delete(@PathVariable("id") Integer id, RedirectAttributes redirectAttributes) { List<Resources> resourcesList = new ArrayList<Resources>(); resourcesList.add(comm.resourcesService.getResources(id)); boolean result = comm.resourcesService.recycleResources(resourcesList); redirectAttributes.addFlashAttribute("message", result ? "资源回收中..." : "资源回收失败,请稍后重试"); return REDIRECT_SUCCESS_URL; } /** * 跳转到详情页面 */ @RequestMapping(value = "/detail/{id}", method = RequestMethod.GET) public String detail(@PathVariable("id") Integer id, Model model) { Resources resources = comm.resourcesService.getResources(id); model.addAttribute("resources", resources); model.addAttribute("change", comm.changeServcie.findChangeByResourcesId(id)); String detailUrl = null; Integer serviceId = resources.getServiceId(); // 服务类型 Integer serviceType = resources.getServiceType(); if (serviceType.equals(ResourcesConstant.ServiceType.PCS.toInteger()) || serviceType.equals(ResourcesConstant.ServiceType.ECS.toInteger())) { model.addAttribute("compute", comm.computeService.getComputeItem(serviceId)); detailUrl = "resource/detail/computeDetail"; } else if (serviceType.equals(ResourcesConstant.ServiceType.ES3.toInteger())) { model.addAttribute("storage", comm.es3Service.getStorageItem(serviceId)); detailUrl = "resource/detail/storageDetail"; } else if (serviceType.equals(ResourcesConstant.ServiceType.ELB.toInteger())) { model.addAttribute("elb", comm.elbService.getNetworkElbItem(serviceId)); detailUrl = "resource/detail/elbDetail"; } else if (serviceType.equals(ResourcesConstant.ServiceType.EIP.toInteger())) { model.addAttribute("eip", comm.eipService.getNetworkEipItem(serviceId)); detailUrl = "resource/detail/eipDetail"; } else if (serviceType.equals(ResourcesConstant.ServiceType.DNS.toInteger())) { model.addAttribute("dns", comm.dnsService.getNetworkDnsItem(serviceId)); detailUrl = "resource/detail/dnsDetail"; } else if (serviceType.equals(ResourcesConstant.ServiceType.MONITOR_COMPUTE.toInteger())) { model.addAttribute("monitorCompute", comm.monitorComputeServcie.getMonitorCompute(serviceId)); detailUrl = "resource/detail/monitorComputeDetail"; } else if (serviceType.equals(ResourcesConstant.ServiceType.MONITOR_ELB.toInteger())) { model.addAttribute("monitorElb", comm.monitorElbServcie.getMonitorElb(serviceId)); detailUrl = "resource/detail/monitorElbDetail"; } else if (serviceType.equals(ResourcesConstant.ServiceType.MDN.toInteger())) { model.addAttribute("mdn", comm.mdnService.getMdnItem(serviceId)); detailUrl = "resource/detail/mdnDetail"; } else if (serviceType.equals(ResourcesConstant.ServiceType.CP.toInteger())) { model.addAttribute("cp", comm.cpService.getCpItem(serviceId)); detailUrl = "resource/detail/cpDetail"; } else { detailUrl = "resource/resourceList"; } return detailUrl; } @ModelAttribute("computeResources") public List<ComputeItem> computeResources() { return comm.basicUnitService.getComputeItemListByResources(getCurrentUserId()); } }