/**
*
*/
package com.vip.saturn.job.console.controller;
import java.util.Collection;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.ui.ModelMap;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.vip.saturn.job.console.domain.RegistryCenterClient;
import com.vip.saturn.job.console.domain.RegistryCenterConfiguration;
import com.vip.saturn.job.console.domain.ZkCluster;
import com.vip.saturn.job.console.service.JobDimensionService;
import com.vip.saturn.job.console.service.JobOperationService;
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;
/**
* @author chembo.huang
*
*/
public class AbstractController {
public static final String ACTIVATED_CONFIG_SESSION_KEY = "activated_config";
public static final String REQUEST_NAMESPACE_PARAM = "nns";
public static final String CURRENT_ZK = "current_zk";
@Resource
protected RegistryCenterService registryCenterService;
@Resource
private JobDimensionService jobDimensionService;
@Resource
private JobOperationService jobOperationService;
@Value("${console.version}")
protected String version;
public static String getStackTrace(Throwable aThrowable) {
//add the class name and any message passed to constructor
final StringBuilder result = new StringBuilder("Trace: ");
result.append(aThrowable.toString());
final String NEW_LINE = "<br>";
result.append(NEW_LINE);
//add each element of the stack trace
for (StackTraceElement element : aThrowable.getStackTrace()) {
result.append(element);
result.append(NEW_LINE);
}
return result.toString();
}
public void setSession(final RegistryCenterClient client, final HttpSession session) {
ThreadLocalCuratorClient.setCuratorClient(client.getCuratorClient());
RegistryCenterConfiguration conf = registryCenterService.findConfig(client.getNameAndNamespace());
if(conf == null){
return;
}
session.setAttribute(ACTIVATED_CONFIG_SESSION_KEY, conf);
setCurrentZkAddr(conf.getZkAddressList(), session);
}
public void setCurrentZkAddr(String zkAddr, final HttpSession session) {
session.setAttribute(CURRENT_ZK, zkAddr);
}
public String getCurrentZkAddr(final HttpSession session) {
String zkAddr = (String)session.getAttribute(CURRENT_ZK);
if (zkAddr == null) {
Collection<ZkCluster> zks = RegistryCenterServiceImpl.ZKADDR_TO_ZKCLUSTER_MAP.values();
for (ZkCluster zkCluster : zks) {
setCurrentZkAddr(zkCluster.getZkAddr(), session);
return zkCluster.getZkAddr();
}
}
return zkAddr;
}
public RegistryCenterConfiguration getActivatedConfigInSession(final HttpSession session) {
return (RegistryCenterConfiguration) session.getAttribute(ACTIVATED_CONFIG_SESSION_KEY);
}
public RegistryCenterClient getClientInSession(final HttpSession session) {
RegistryCenterConfiguration reg = (RegistryCenterConfiguration) session.getAttribute(ACTIVATED_CONFIG_SESSION_KEY);
if (reg == null) {
return null;
}
return RegistryCenterServiceImpl.getCuratorByNameAndNamespace(reg.getNameAndNamespace());
}
public void setJobStatusAndIsEnabled(ModelMap model, String jobName) {
model.put("jobStatus", jobDimensionService.getJobStatus(jobName));
model.put("isEnabled", jobDimensionService.isJobEnabled(jobName));
}
public String getNamespace() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
RegistryCenterConfiguration configuration = (RegistryCenterConfiguration) request.getSession().getAttribute(AbstractController.ACTIVATED_CONFIG_SESSION_KEY);
if (configuration != null) {
return configuration.getNamespace();
}
return null;
}
}