package com.vip.saturn.job.console.controller;
import com.vip.saturn.job.console.SaturnEnvProperties;
import com.vip.saturn.job.console.domain.AddContainerModel;
import com.vip.saturn.job.console.domain.RequestResult;
import com.vip.saturn.job.console.domain.container.ContainerConfig;
import com.vip.saturn.job.console.domain.container.ContainerToken;
import com.vip.saturn.job.console.domain.container.vo.ContainerScaleJobVo;
import com.vip.saturn.job.console.domain.container.vo.ContainerVo;
import com.vip.saturn.job.console.exception.SaturnJobConsoleException;
import com.vip.saturn.job.console.service.ContainerService;
import com.vip.saturn.job.console.utils.CronExpression;
import com.vip.saturn.job.console.utils.SaturnConstants;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
/**
* @author hebelala
*/
@RestController
@RequestMapping("/container")
public class ContainerController extends AbstractController {
private static final Logger LOGGER = LoggerFactory.getLogger(ContainerController.class);
@Resource
private ContainerService containerService;
@RequestMapping(value = "getContainerToken", method = RequestMethod.GET)
public RequestResult getContainerToken(HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
Object containerToken = containerService.getContainerToken();
requestResult.setSuccess(true);
requestResult.setObj(containerToken);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "saveOrUpdateContainerToken", method = RequestMethod.POST)
public RequestResult saveOrUpdateContainerToken(ContainerToken containerToken, HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
if (containerToken == null) {
throw new SaturnJobConsoleException("Please input container token");
}
containerService.checkContainerTokenNotNull(containerToken);
containerService.saveOrUpdateContainerToken(containerToken);
requestResult.setSuccess(true);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "/getContainerVos", method = RequestMethod.GET)
public RequestResult getContainerVos(HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
List<ContainerVo> containerVos = containerService.getContainerVos();
requestResult.setSuccess(true);
requestResult.setObj(containerVos);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "/addContainer", method = RequestMethod.POST)
@ResponseBody
public RequestResult addContainer(AddContainerModel addContainerModel, HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
if (addContainerModel.getContainerToken() == null) {
throw new SaturnJobConsoleException("Please input container token");
}
containerService.checkContainerTokenNotNull(addContainerModel.getContainerToken());
containerService.saveOrUpdateContainerTokenIfNecessary(addContainerModel.getContainerToken());
ContainerConfig containerConfig = new ContainerConfig();
containerConfig.setTaskId(addContainerModel.getTaskId());
containerConfig.setCmd(addContainerModel.getCmd());
containerConfig.setCpus(addContainerModel.getCpus());
containerConfig.setMem(addContainerModel.getMem());
containerConfig.setInstances(addContainerModel.getInstances());
containerConfig.setConstraints(addContainerModel.getConstraints());
containerConfig.setEnv(addContainerModel.getEnv());
containerConfig.setPrivileged(addContainerModel.getPrivileged() == null ? false : addContainerModel.getPrivileged());
containerConfig.setForcePullImage(addContainerModel.getForcePullImage() == null ? true : addContainerModel.getForcePullImage());
containerConfig.setParameters(addContainerModel.getParameters());
containerConfig.setVolumes(addContainerModel.getVolumes());
containerConfig.setImage(addContainerModel.getImage());
containerConfig.setCreateTime(System.currentTimeMillis());
String imageNew = "";
String vipSaturnDcosRegistryUri = SaturnEnvProperties.VIP_SATURN_DCOS_REGISTRY_URI;
if (vipSaturnDcosRegistryUri == null || vipSaturnDcosRegistryUri.trim().length() == 0) {
String errorMsg = "VIP_SATURN_DCOS_REGISTRY_URI is not configured";
requestResult.setSuccess(false);
requestResult.setMessage(errorMsg);
return requestResult;
} else {
if (vipSaturnDcosRegistryUri.startsWith("http://")) {
String tmp = vipSaturnDcosRegistryUri.substring("http://".length());
while (tmp.endsWith("/")) {
tmp = tmp.substring(0, tmp.length() - 1);
}
imageNew = tmp + "/" + addContainerModel.getImage();
} else if (vipSaturnDcosRegistryUri.startsWith("https://")) {
String tmp = vipSaturnDcosRegistryUri.substring("https://".length());
while (tmp.endsWith("/")) {
tmp = tmp.substring(0, tmp.length() - 1);
}
imageNew = tmp + "/" + addContainerModel.getImage();
}
}
containerConfig.setImage(imageNew);
if (containerConfig.getEnv() == null) {
containerConfig.setEnv(new HashMap<String, String>());
}
if (!containerConfig.getEnv().containsKey(SaturnEnvProperties.NAME_VIP_SATURN_ZK_CONNECTION)) {
containerConfig.getEnv().put(SaturnEnvProperties.NAME_VIP_SATURN_ZK_CONNECTION, getCurrentZkAddr(request.getSession()));
}
containerService.addContainer(containerConfig);
requestResult.setSuccess(true);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "/updateContainerInstances", method = RequestMethod.POST)
public RequestResult updateContainerInstances(String taskId, Integer instances, HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
if (taskId == null) {
throw new SaturnJobConsoleException("The taskId cannot be null");
}
if (instances == null || instances < 0) {
throw new SaturnJobConsoleException("Please input the positive instances");
}
containerService.updateContainerInstances(taskId, instances);
requestResult.setSuccess(true);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "/removeContainer", method = RequestMethod.POST)
public RequestResult removeContainer(String taskId, HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
if (taskId == null) {
throw new SaturnJobConsoleException("The taskId cannot be null");
}
containerService.removeContainer(taskId);
requestResult.setSuccess(true);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "/getContainerDetail", method = RequestMethod.GET)
public RequestResult getContainerDetail(String taskId, HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
if (taskId == null) {
throw new SaturnJobConsoleException("The taskId cannot be null");
}
String containerDetail = containerService.getContainerDetail(taskId);
requestResult.setSuccess(true);
requestResult.setObj(containerDetail);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "/getRegistryCatalog", method = RequestMethod.GET)
public RequestResult getRegistryCatalog(HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
String registryCatalog = containerService.getRegistryCatalog();
requestResult.setSuccess(true);
requestResult.setObj(registryCatalog);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "/getRegistryRepositoryTags", method = RequestMethod.GET)
public RequestResult getRegistryRepositoryTags(String repository, HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
if (repository == null) {
throw new SaturnJobConsoleException("The repository cannot be null");
}
String constraints = containerService.getRegistryRepositoryTags(repository);
requestResult.setSuccess(true);
requestResult.setObj(constraints);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "/getTimeZoneIds", method = RequestMethod.GET)
public RequestResult getTimeZoneIds(HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
requestResult.setSuccess(true);
requestResult.setObj(SaturnConstants.TIME_ZONE_IDS);
return requestResult;
}
@RequestMapping(value = "/addContainerScaleJob", method = RequestMethod.POST)
public RequestResult addContainerScaleJob(String taskId, String jobDesc, Integer instances, String timeZone, String cron, HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
if (taskId == null) {
throw new SaturnJobConsoleException("The taskId cannot be null");
}
if (jobDesc == null) {
throw new SaturnJobConsoleException("The jobDesc cannot be null");
}
if (instances == null || instances < 0) {
throw new SaturnJobConsoleException("Please input the positive instances");
}
if (timeZone == null || timeZone.trim().length() == 0) {
throw new SaturnJobConsoleException("The timeZone cannot be null or empty");
}
if (cron == null || cron.trim().length() == 0) {
throw new SaturnJobConsoleException("The cron cannot be null or empty");
}
try {
CronExpression.validateExpression(cron);
} catch (ParseException e) {
throw new SaturnJobConsoleException("The cron is not valid, " + e.toString());
}
containerService.addContainerScaleJob(taskId, jobDesc, instances, timeZone, cron);
requestResult.setSuccess(true);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "/getContainerScaleJobVo", method = RequestMethod.GET)
public RequestResult getContainerScaleJob(String taskId, String jobName, HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
if (taskId == null) {
throw new SaturnJobConsoleException("The taskId cannot be null");
}
if (jobName == null) {
throw new SaturnJobConsoleException("The jobName cannot be null");
}
ContainerScaleJobVo containerScaleJob = containerService.getContainerScaleJobVo(taskId, jobName);
requestResult.setSuccess(true);
requestResult.setObj(containerScaleJob);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "/enableContainerScaleJob", method = RequestMethod.POST)
public RequestResult enableContainerScaleJob(String jobName, Boolean enable, HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
if (jobName == null) {
throw new SaturnJobConsoleException("The jobName cannot be null");
}
if (enable == null) {
throw new SaturnJobConsoleException("The enable cannot be null");
}
containerService.enableContainerScaleJob(jobName, enable);
requestResult.setSuccess(true);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
@RequestMapping(value = "/deleteContainerScaleJob", method = RequestMethod.POST)
public RequestResult deleteContainerScaleJob(String taskId, String jobName, HttpServletRequest request) {
RequestResult requestResult = new RequestResult();
try {
if (taskId == null) {
throw new SaturnJobConsoleException("The taskId cannot be null");
}
if (jobName == null) {
throw new SaturnJobConsoleException("The jobName cannot be null");
}
containerService.deleteContainerScaleJob(taskId, jobName);
requestResult.setSuccess(true);
} catch (SaturnJobConsoleException e) {
requestResult.setSuccess(false);
requestResult.setMessage(e.getMessage());
} catch (Throwable t) {
requestResult.setSuccess(false);
requestResult.setMessage(t.toString());
}
return requestResult;
}
}