package com.vip.saturn.job.console.marathon;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.vip.saturn.job.console.SaturnEnvProperties;
import com.vip.saturn.job.console.domain.container.ContainerConfig;
import com.vip.saturn.job.console.domain.container.ContainerStatus;
import com.vip.saturn.job.console.domain.container.ContainerToken;
import com.vip.saturn.job.console.exception.SaturnJobConsoleException;
import com.vip.saturn.job.console.service.ContainerRestService;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @author hebelala
*/
@Service("marathonRestAdapter")
public class MarathonRestAdapter implements ContainerRestService {
private static final Logger LOGGER = LoggerFactory.getLogger(MarathonRestAdapter.class);
private String getUserName(ContainerToken containerToken) {
try {
return containerToken.getKeyValue().get("userName");
} catch (Exception e) {
return "";
}
}
private String getPassword(ContainerToken containerToken) {
try {
return containerToken.getKeyValue().get("password");
} catch (Exception e) {
return "";
}
}
@Override
public String serializeContainerToken(ContainerToken containerToken) throws SaturnJobConsoleException {
if (containerToken != null) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("userName", getUserName(containerToken));
jsonObject.put("password", getPassword(containerToken));
return jsonObject.toJSONString();
} else {
return null;
}
}
@Override
public ContainerToken deserializeContainerToken(String containerTokenStr) throws SaturnJobConsoleException {
if (containerTokenStr != null) {
Map<String, String> keyValue = JSON.parseObject(containerTokenStr, new TypeReference<Map<String, String>>() {
}.getType());
ContainerToken containerToken = new ContainerToken();
containerToken.setKeyValue(keyValue);
return containerToken;
} else {
return null;
}
}
@Override
public void checkContainerTokenNotNull(ContainerToken containerToken) throws SaturnJobConsoleException {
if (containerToken == null || containerToken.getKeyValue() == null) {
throw new SaturnJobConsoleException("Please input userName and password");
}
if (containerToken.getKeyValue().get("userName") == null) {
throw new SaturnJobConsoleException("Please input userName");
}
if (containerToken.getKeyValue().get("password") == null) {
throw new SaturnJobConsoleException("Please input password");
}
}
@Override
public boolean containerTokenEquals(ContainerToken ctNew, ContainerToken ctOld) throws SaturnJobConsoleException {
if (ctNew == null && ctOld == null) {
return true;
} else if (ctNew == null && ctOld != null || ctNew != null && ctOld == null) {
return false;
} else if (ctNew.equals(ctOld)) {
return true;
} else {
String unNew = getUserName(ctNew);
String unOld = getUserName(ctOld);
String pwNew = getPassword(ctNew);
String pwOld = getPassword(ctOld);
return unNew.equals(unOld) && pwNew.equals(pwOld);
}
}
@Override
public String getContainerScaleJobShardingItemParameters(ContainerToken containerToken, String appId, Integer instances) throws SaturnJobConsoleException {
try {
String auth = Base64.encodeBase64String((getUserName(containerToken) + ":" + getPassword(containerToken)).getBytes("UTF-8"));
String url = "";
if (SaturnEnvProperties.VIP_SATURN_DCOS_REST_URI != null && SaturnEnvProperties.VIP_SATURN_DCOS_REST_URI.endsWith("/")) {
url = SaturnEnvProperties.VIP_SATURN_DCOS_REST_URI + "v2/apps/" + appId + "?force=true";
} else {
url = SaturnEnvProperties.VIP_SATURN_DCOS_REST_URI + "/v2/apps/" + appId + "?force=true";
}
return "0=curl -X PUT -H \"Content-Type:application/json\" -H \"Authorization:Basic " + auth + "\" --data '{\"instances\":" + instances + "}' " + url;
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
throw new SaturnJobConsoleException(e);
}
}
@Override
public ContainerStatus getContainerStatus(ContainerToken containerToken, String appId) throws SaturnJobConsoleException {
return MarathonRestClient.getContainerStatus(getUserName(containerToken), getPassword(containerToken), appId);
}
@Override
public void deploy(ContainerToken containerToken, ContainerConfig containerConfig) throws SaturnJobConsoleException {
MarathonRestClient.deploy(getUserName(containerToken), getPassword(containerToken), containerConfig);
}
@Override
public void scale(ContainerToken containerToken, String appId, Integer instances) throws SaturnJobConsoleException {
MarathonRestClient.scale(getUserName(containerToken), getPassword(containerToken), appId, instances);
}
@Override
public void destroy(ContainerToken containerToken, String appId) throws SaturnJobConsoleException {
MarathonRestClient.destroy(getUserName(containerToken), getPassword(containerToken), appId);
}
@Override
public int count(ContainerToken containerToken, String appId) throws SaturnJobConsoleException {
return MarathonRestClient.count(getUserName(containerToken), getPassword(containerToken), appId);
}
@Override
public String info(ContainerToken containerToken, String appId) throws SaturnJobConsoleException {
return MarathonRestClient.info(getUserName(containerToken), getPassword(containerToken), appId);
}
@Override
public String getRegistryCatalog() throws SaturnJobConsoleException {
return MarathonRestClient.getRegistryCatalog();
}
@Override
public String getRegistryRepositoryTags(String repository) throws SaturnJobConsoleException {
return MarathonRestClient.getRegistryRepositoriesTagsList(repository);
}
}