package com.sobey.cmop.mvc.web.basicdata;
import java.util.List;
import java.util.Map;
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.entity.ServerModel;
import com.sobey.cmop.mvc.service.onecmdb.OneCmdbService;
import com.sobey.framework.utils.Servlets;
/**
* HostServerController负责服务器主机的管理
*
* @author liukai
*
*/
@Controller
@RequestMapping(value = "/basicdata/host")
public class HostServerController extends BaseController {
private static final String REDIRECT_SUCCESS_URL = "redirect:/basicdata/host/";
@RequestMapping(value = { "list", "" })
public String list(@RequestParam(value = "page", defaultValue = "1") int pageNumber,
@RequestParam(value = "page.size", defaultValue = PAGE_SIZE) int pageSize,
@RequestParam(value = "serverType", required = false, defaultValue = "") String serverType, Model model,
ServletRequest request) {
Map<String, Object> searchParams = Servlets.getParametersStartingWith(request, REQUEST_PREFIX);
// 将搜索条件编码成字符串,分页的URL
model.addAttribute("searchParams", Servlets.encodeParameterStringWithPrefix(searchParams, REQUEST_PREFIX));
model.addAttribute("page", comm.hostServerService.getHostServerPageable(searchParams, pageNumber, pageSize));
return "basicdata/host/hostList";
}
/**
* 跳转到新增页面
*
* @param model
* @return
*/
@RequestMapping(value = "/save", method = RequestMethod.GET)
public String createForm(Model model) {
return "basicdata/host/hostForm";
}
/**
* 新增HostServer
*
* @param serverType
* 服务器类型
* @param serverModelId
* 服务器型号
* @param rack
* 机柜位置
* @param site
* 模块位置
* @param nicSite
* 网卡位置
* @param switchs
* 交换机(alias+name)
* @param switchSite
* 交换机口
* @param mac
* mac
* @param height
* 高度
* @param locationAlias
* IDC alias
* @param ipAddress
* 服务器自身IP
* @param description
* 说明
* @return
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(@RequestParam(value = "serverModelId") Integer serverModelId,
@RequestParam(value = "rack") String rack, @RequestParam(value = "site") String site,
@RequestParam(value = "switchs") String switchs,
@RequestParam(value = "switchSite") String switchSite,
@RequestParam(value = "height") String height,
@RequestParam(value = "locationAlias") String locationAlias,
@RequestParam(value = "ipAddress") String ipAddress,
@RequestParam(value = "serverType") Integer serverType,
@RequestParam(value = "description") String description,
@RequestParam(value = "managementMac") String managementMac,
// 网卡
@RequestParam(value = "nicSite", required = false) String[] nicSites,
@RequestParam(value = "nicMac", required = false) String[] nicMacs,
@RequestParam(value = "nicIpAddress", required = false) String[] nicIpAddress,
RedirectAttributes redirectAttributes) {
boolean flag = comm.hostServerService.addHostServer(serverType, serverModelId, rack, site, switchs, switchSite,
height, locationAlias, ipAddress, description, managementMac, nicSites, nicMacs, nicIpAddress);
redirectAttributes.addFlashAttribute("message", flag ? "创建服务器成功!"
: "服务器名称已存在,请按照格式 Company Model Rack-Site 正确输入.");
return REDIRECT_SUCCESS_URL;
}
/**
* 跳转至修改页面
*
* @param id
* @param model
* @return
*/
@RequestMapping(value = "/update/{id}", method = RequestMethod.GET)
public String updateForm(@PathVariable("id") Integer id, Model model) {
model.addAttribute("hostServer", comm.hostServerService.getHostServer(id));
return "basicdata/host/hostForm";
}
/**
* 修改HostServer
*
* @param id
* hostServerId
* @param serverType
* 服务器类型
* @param serverModelId
* 服务器型号
* @param rack
* 机柜位置
* @param site
* 模块位置
* @param nicSite
* 网卡位置
* @param switchs
* 交换机(alias+name)
* @param switchSite
* 交换机口
* @param mac
* mac
* @param height
* 高度
* @param locationAlias
* IDC alias
* @param ipAddress
* 服务器自身IP
* @param description
* 说明
* @param redirectAttributes
* @return
*/
@RequestMapping(value = "/update", method = RequestMethod.POST)
public String update(@RequestParam(value = "id") Integer id,
@RequestParam(value = "serverModelId") Integer serverModelId, @RequestParam(value = "rack") String rack,
@RequestParam(value = "site") String site,
@RequestParam(value = "switchs") String switchs,
@RequestParam(value = "switchSite") String switchSite,
@RequestParam(value = "height") String height,
@RequestParam(value = "locationAlias") String locationAlias,
@RequestParam(value = "ipAddress") String ipAddress,
@RequestParam(value = "serverType") Integer serverType,
@RequestParam(value = "description") String description,
@RequestParam(value = "managementMac") String managementMac,
// 网卡
@RequestParam(value = "nicSite", required = false) String[] nicSites,
@RequestParam(value = "nicMac", required = false) String[] nicMacs,
@RequestParam(value = "nicIpAddress", required = false) String[] nicIpAddress,
RedirectAttributes redirectAttributes) {
boolean flag = comm.hostServerService.updateHostServer(id, serverType, serverModelId, rack, site, switchs,
switchSite, height, locationAlias, ipAddress, description, managementMac, nicSites, nicMacs,
nicIpAddress);
redirectAttributes.addFlashAttribute("message", flag ? "修改服务器成功!"
: "服务器名称已存在,请按照格式 Company Model Rack-Site 正确输入.");
return REDIRECT_SUCCESS_URL;
}
/**
* 删除服务器 HostServer
*
* @param id
* @param redirectAttributes
* @return
*/
@RequestMapping(value = "delete/{id}")
public String delete(@PathVariable("id") Integer id, RedirectAttributes redirectAttributes) {
boolean flag = comm.hostServerService.delete(id);
redirectAttributes.addFlashAttribute("message", flag ? "删除服务器成功!" : "删除服务器失败!");
return REDIRECT_SUCCESS_URL;
}
/**
* 跳转到HostServer详情页面
*/
@RequestMapping(value = "/detail/{id}", method = RequestMethod.GET)
public String detail(@PathVariable("id") Integer id, Model model) {
model.addAttribute("hostServer", comm.hostServerService.getHostServer(id));
return "basicdata/host/hostDetail";
}
/**
* 跳转至查看hostServer下虚拟机的查看页面.
*
* @param id
* @param model
* @return
*/
@RequestMapping(value = { "hostTree/{id}" })
public String hostTree(@PathVariable("id") Integer id, Model model) {
model.addAttribute("hostServer", comm.hostServerService.getHostServer(id));
model.addAttribute("ecsList", comm.hostServerService.getEcsByHost(id));
model.addAttribute("server", comm.operateService.findHostMapByServerType(2)); // 物理机
model.addAttribute("vm", comm.operateService.findHostMapByServerType(1)); // 宿主机
return "basicdata/host/hostTree";
}
/**
* 重新保存hostServer和PCS,ECS的关系.
*
* @param id
* hostServerId
* @param computeIds
* 实例的IP数组
* @param serverAlias
* 实例关联的hostServer alias 数组
* @param redirectAttributes
* @return
*/
@RequestMapping(value = "/hostTree", method = RequestMethod.POST)
public String updateHostTree(@RequestParam(value = "computeIds", required = false) String[] computeIds,
@RequestParam(value = "serverAlias", required = false) String[] serverAlias,
RedirectAttributes redirectAttributes) {
comm.hostServerService.updateHostServerTree(computeIds, serverAlias);
redirectAttributes.addFlashAttribute("message", "更新宿主机/服务器挂载的实例");
return REDIRECT_SUCCESS_URL;
}
@RequestMapping(value = { "syn" })
public String syn(Model model, RedirectAttributes redirectAttributes) {
String rtn = comm.hostServerService.syn();
String[] rtnArr = rtn.split("-");
if (rtnArr[0].equals("true")) {
redirectAttributes.addFlashAttribute("message", "同步宿主机和虚拟机成功!共计:宿主机(" + rtnArr[1] + "),虚拟机(" + rtnArr[2]
+ ")");
}
return REDIRECT_SUCCESS_URL;
}
@RequestMapping(value = { "export" })
public String export(Model model, RedirectAttributes redirectAttributes) {
boolean flag = comm.hostServerService.export();
if (flag) {
redirectAttributes.addFlashAttribute("message", "导出宿主机及其虚拟机关系成功!D:\\Host_Vm.xls");
}
return REDIRECT_SUCCESS_URL;
}
/**
* 获得oneCMDB中的Rack.
*
* @return
*/
@ModelAttribute("rackMap")
public Map<String, String> getRackFromOnecmdb() {
return OneCmdbService.findCiByText("Rack");
}
/**
* 获得oneCMDB中的Switch.
*
* @return
*/
@ModelAttribute("switchMap")
public Map<String, String> getSwitchFromOnecmdb() {
return OneCmdbService.findCiByText("Switch");
}
/**
* 服务器型号getServerModel list
*
* @return
*/
@ModelAttribute("serverModelList")
public List<ServerModel> getServerModelList() {
return comm.serverModelService.getServerModelList();
}
}