|
|
package com.monitor.switchs;
|
|
|
|
|
|
import com.monitor.model.response.BaseResponse;
|
|
|
import com.yoho.ops.cmdb.qcloud.model.QcloudCLBModel;
|
|
|
import com.yoho.ops.cmdb.qcloud.model.QcloudForwardLbModel;
|
|
|
import com.yoho.ops.cmdb.qcloud.model.QcloudForwardLbModelData;
|
|
|
import com.yoho.ops.cmdb.qcloud.model.QcloudForwardLbModelDataRule;
|
|
|
import com.yoho.ops.cmdb.qcloud.util.QcloudSdkUtil;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* @author craig.qin
|
|
|
* pch5切换 -- 现在已经迁移到docker
|
|
|
* 所以nginx的切换启用新的
|
|
|
*/
|
|
|
@Controller
|
|
|
@RequestMapping("/pch5DockerSwitch")
|
|
|
public class Pch5DockerSwitchCtrl {
|
|
|
private final static Logger logger = LoggerFactory.getLogger("switchLogger");
|
|
|
|
|
|
//pch5 blk负载均衡,传统型
|
|
|
private final String ELB_BLK_ID="lb-2wfrxx7p";
|
|
|
//pch5 pc\wap负载均衡,应用型
|
|
|
private final String ELB_PCH5_ID="lb-7cowsd61";
|
|
|
|
|
|
//pc node 对于域名
|
|
|
private final List<String> elb_pch5_pc_domain=Arrays.asList("*.yohobuy.com","activity.yoho.cn");
|
|
|
private final List<String> elb_pch5_wap_domain=Arrays.asList("m.yohobuy.com","*.m.yohobuy.com");
|
|
|
|
|
|
|
|
|
//当前环境
|
|
|
@Value("${system.envi}")
|
|
|
private String env;
|
|
|
|
|
|
@RequestMapping(value = "/getDockerElbStatus")
|
|
|
@ResponseBody
|
|
|
public BaseResponse getDockerElbStatus() {
|
|
|
BaseResponse response = new BaseResponse();
|
|
|
QcloudCLBModel clb=QcloudSdkUtil.describeLoadBalancerBackends(ELB_BLK_ID);
|
|
|
QcloudForwardLbModel forwardlb= QcloudSdkUtil.describeForwardLBBackends(ELB_PCH5_ID);
|
|
|
|
|
|
Set<String> az1IPs_blk=new HashSet<>();
|
|
|
Set<String> az2IPs_blk=new HashSet<>();
|
|
|
boolean inGray_blk=false;
|
|
|
for(QcloudCLBModel.Backend beckend:clb.getBackendSet()){
|
|
|
String insName_lower=beckend.getInstanceName().toLowerCase();
|
|
|
if(insName_lower.contains("az1")){
|
|
|
az1IPs_blk.add(beckend.getLanIp());
|
|
|
}else if(insName_lower.contains("az2")){
|
|
|
az2IPs_blk.add(beckend.getLanIp());
|
|
|
if(beckend.getWeight()<=0){
|
|
|
inGray_blk = true;
|
|
|
}
|
|
|
if(inGray_blk&&beckend.getWeight()>0){
|
|
|
response.setCode(201);
|
|
|
response.setMessage(beckend.getInstanceName()+"命名不规范,az2 nginx权重不一致:lanIp="+beckend.getLanIp());
|
|
|
return response;
|
|
|
}
|
|
|
}else{
|
|
|
response.setCode(201);
|
|
|
response.setMessage(beckend.getInstanceName()+"命名不规范,需指定az1或者az2:lanIp="+beckend.getLanIp());
|
|
|
return response;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
Set<String> az1IPs_pc=new HashSet<>();
|
|
|
Set<String> az2IPs_pc=new HashSet<>();
|
|
|
boolean inGray_pc=false;
|
|
|
|
|
|
Set<String> az1IPs_wap=new HashSet<>();
|
|
|
Set<String> az2IPs_wap=new HashSet<>();
|
|
|
boolean inGray_wap=false;
|
|
|
|
|
|
for(QcloudForwardLbModelData forwardLbModelData:forwardlb.getData()){
|
|
|
for(QcloudForwardLbModelDataRule rule:forwardLbModelData.getRules()){
|
|
|
String domain=rule.getDomain();
|
|
|
if(!elb_pch5_pc_domain.contains(domain)&&!elb_pch5_wap_domain.contains(domain)){
|
|
|
continue;//排除别的域名,比如shops
|
|
|
}
|
|
|
boolean inPcDomain=true;
|
|
|
if(elb_pch5_wap_domain.contains(domain)){
|
|
|
inPcDomain = false;
|
|
|
}
|
|
|
for(QcloudForwardLbModelDataRule.Backend forwardBackend:rule.getBackends()){
|
|
|
String insName_lower=forwardBackend.getInstanceName().toLowerCase();
|
|
|
if(insName_lower.contains("az1")){
|
|
|
if(inPcDomain){
|
|
|
az1IPs_pc.add(forwardBackend.getLanIp());
|
|
|
}else{
|
|
|
az1IPs_wap.add(forwardBackend.getLanIp());
|
|
|
}
|
|
|
}else if(insName_lower.contains("az2")){
|
|
|
if(inPcDomain){
|
|
|
az2IPs_pc.add(forwardBackend.getLanIp());
|
|
|
if(forwardBackend.getWeight()<=0){
|
|
|
inGray_pc = true;
|
|
|
}
|
|
|
if(inGray_pc&&forwardBackend.getWeight()>0){
|
|
|
response.setCode(201);
|
|
|
response.setMessage(forwardBackend.getInstanceName()+"命名不规范,az2 nginx权重不一致:lanIp="+forwardBackend.getLanIp());
|
|
|
return response;
|
|
|
}
|
|
|
}else{
|
|
|
az2IPs_wap.add(forwardBackend.getLanIp());
|
|
|
if(forwardBackend.getWeight()<=0){
|
|
|
inGray_wap = true;
|
|
|
}
|
|
|
if(inGray_wap&&forwardBackend.getWeight()>0){
|
|
|
response.setCode(201);
|
|
|
response.setMessage(forwardBackend.getInstanceName()+"命名不规范,az2 nginx权重不一致:lanIp="+forwardBackend.getLanIp());
|
|
|
return response;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
response.setCode(201);
|
|
|
response.setMessage(forwardBackend.getInstanceName()+"命名不规范,需指定az1或者az2:lanIp="+forwardBackend.getLanIp());
|
|
|
return response;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
Map<String,Object> ipsUnderElbMap=new LinkedHashMap<>();
|
|
|
|
|
|
Set<String> az1Ips=new HashSet<>();
|
|
|
az1Ips.addAll(az1IPs_blk);
|
|
|
az1Ips.addAll(az1IPs_pc);
|
|
|
az1Ips.addAll(az1IPs_wap);
|
|
|
Set<String> az2Ips=new HashSet<>();
|
|
|
az2Ips.addAll(az2IPs_blk);
|
|
|
az2Ips.addAll(az2IPs_pc);
|
|
|
az2Ips.addAll(az2IPs_wap);
|
|
|
|
|
|
ipsUnderElbMap.put("az1Ips",az1Ips);
|
|
|
ipsUnderElbMap.put("az2Ips",az2Ips);
|
|
|
|
|
|
ipsUnderElbMap.put("inAz1_blk", StringUtils.join(az1IPs_blk,","));
|
|
|
ipsUnderElbMap.put("inAz1_pc",StringUtils.join(az1IPs_pc,","));
|
|
|
ipsUnderElbMap.put("inAz1_wap", StringUtils.join(az1IPs_wap,","));
|
|
|
|
|
|
ipsUnderElbMap.put("inAz2_blk", StringUtils.join(az2IPs_blk,","));
|
|
|
ipsUnderElbMap.put("inAz2_pc", StringUtils.join(az2IPs_pc,","));
|
|
|
ipsUnderElbMap.put("inAz2_wap", StringUtils.join(az2IPs_wap,","));
|
|
|
|
|
|
ipsUnderElbMap.put("inGray_blk",inGray_blk);
|
|
|
ipsUnderElbMap.put("inGray_pc",inGray_pc);
|
|
|
ipsUnderElbMap.put("inGray_wap",inGray_wap);
|
|
|
|
|
|
response.setData(ipsUnderElbMap);
|
|
|
return response;
|
|
|
}
|
|
|
|
|
|
|
|
|
} |
...
|
...
|
|