/** * Copyright 2016 vip.com. * <p> * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * </p> */ package com.vip.saturn.job.console.controller; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.google.common.base.Strings; import com.vip.saturn.job.console.domain.JobBriefInfo; import com.vip.saturn.job.console.domain.RegistryCenterClient; import com.vip.saturn.job.console.domain.RequestResult; import com.vip.saturn.job.console.domain.TreeNode; import com.vip.saturn.job.console.service.InitRegistryCenterService; import com.vip.saturn.job.console.service.JobDimensionService; import com.vip.saturn.job.console.service.RegistryCenterService; import com.vip.saturn.job.console.service.impl.RegistryCenterServiceImpl; import com.vip.saturn.job.console.utils.ThreadLocalCuratorClient; @RestController @RequestMapping("registry_center") public class RegistryCenterController extends AbstractController { protected static Logger LOGGER = LoggerFactory.getLogger(RegistryCenterController.class); public static final String ZK_CONFIG_KEY = "zk_config_key"; public static final String TITLE_FORMAT = "<a href='job_detail?jobName=%s&nns=%s' target='contentFrame' title='%s'>%s</a>"; public static final String SHELL_ICON_CLASS = "devicon devicon-linux-plain"; public static final String JAVA_ICON_CLASS = "devicon devicon-java-plain"; public static final String MSG_ICON_CLASS = "fa fa-reorder"; @Resource private JobDimensionService jobDimensionService; @Resource private RegistryCenterService registryCenterService; @RequestMapping(method = RequestMethod.GET) public Map<?, ?> load(final HttpSession session) { Map<String, Object> model = new HashMap<String, Object>(); model.put("configs", RegistryCenterServiceImpl.ZKADDR_TO_ZKCLUSTER_MAP.get(getCurrentZkAddr(session)).getRegCenterConfList()); model.put("currentZk", getCurrentZkAddr(session)); return model; } @RequestMapping(value = "refreshRegCenter", method = RequestMethod.GET) public RequestResult refreshRegCenter(final String nameAndNamespace, final HttpSession session, final HttpServletRequest request) { return registryCenterService.refreshRegCenter(); } @RequestMapping(value = "connect", method = RequestMethod.POST) public Map<String, Object> connect(final String nameAndNamespace, final HttpSession session) { RegistryCenterClient client = registryCenterService.connect(nameAndNamespace); Map<String, Object> model = new HashMap<String, Object>(); setSession(client, session); model.put("isSuccesssful", client.isConnected()); if (client.isConnected()) { model.put("namespace", client.getCuratorClient().getNamespace()); } return model; } @RequestMapping(value = "selectZk", method = RequestMethod.POST) public String selectZk(final HttpSession session, String newZkBsKey) { setCurrentZkAddr(newZkBsKey, session); return "ok"; } private String replaceQuotation(String str) { if(str == null) { return ""; } else { return str.replaceAll("\'", "'").replaceAll("\"", """); } } private List<TreeNode> connectAndLoadJobs(HttpServletRequest request, String nns, final HttpSession session) { setSession(registryCenterService.connect(nns), session); // set threadlocal session. RegistryCenterClient client = getClientInSession(session); if (null == client || !client.isConnected()) { return null; } ThreadLocalCuratorClient.setCuratorClient(client.getCuratorClient()); Collection<JobBriefInfo> jobs = jobDimensionService.getAllJobsBriefInfo(null,null); List<TreeNode> nodes = new ArrayList<>(); for (Iterator<JobBriefInfo> iterator = jobs.iterator(); iterator.hasNext();) { JobBriefInfo jobBriefInfo = (JobBriefInfo) iterator.next(); TreeNode node = new TreeNode(String.format(TITLE_FORMAT, jobBriefInfo.getJobName(), nns, replaceQuotation(jobBriefInfo.getDescription()), jobBriefInfo.getJobName())); node.setFolder(false); switch (jobBriefInfo.getJobType()) { case MSG_JOB: node.setIcon(MSG_ICON_CLASS); break; case JAVA_JOB: node.setIcon(JAVA_ICON_CLASS); break; case SHELL_JOB: node.setIcon(SHELL_ICON_CLASS); default: break; } nodes.add(node); } return nodes; } @RequestMapping(value = "loadTree", method = RequestMethod.GET) public List<TreeNode> loadTree(HttpServletRequest request, Integer id, String fp, final HttpSession session) throws ExecutionException { if (!Strings.isNullOrEmpty(fp)) { return connectAndLoadJobs(request, fp, session); } return InitRegistryCenterService.ZKBSKEY_TO_TREENODE_MAP.get(getCurrentZkAddr(session)).getChildren(); } @RequestMapping(value = "jobs", method = RequestMethod.GET) public Collection<JobBriefInfo> getAllJobsBriefInfo() { return jobDimensionService.getAllJobsBriefInfo(null,null); } }