Authored by qinchao

权重展示加检查

package com.monitor.switchs;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.model.HostInfo;
import com.monitor.common.HostTagConstant;
... ... @@ -614,6 +615,7 @@ public class NginxSwitchCtrl {
//lb描述
Map<String, Object> lbMap=new HashMap<>();
Map<String, TreeMap<String,Integer>> lbWeightDescrMap=new LinkedHashMap<>();
List<LbModel> lbList=getJavaLb();
Set<String> java_nginx_az1=new HashSet<>();
Set<String> java_nginx_az2=new HashSet<>();
... ... @@ -628,9 +630,10 @@ public class NginxSwitchCtrl {
return new BaseResponse(201,"请求lb信息error,lb:"+lb.getLbId());
}
Map<String,Integer> ipInWeight=new HashMap<>();
addJavaNgingList(tmp.getBackendSet(),ipInWeight,java_nginx_az1,java_nginx_az2,java_nginx_az3);
TreeMap<String,Integer> ipWeightAll=new TreeMap<>();//自动有顺序
addJavaNgingList(tmp.getBackendSet(),ipWeightAll,ipInWeight,java_nginx_az1,java_nginx_az2,java_nginx_az3);
lbMap.put(lb.getKey(),ipInWeight);
lbWeightDescrMap.put(lb.getKey(),ipWeightAll);
}else{
QcloudForwardLbModel tmp=getAlbFromQcloud(lb);
if(tmp==null){
... ... @@ -656,8 +659,15 @@ public class NginxSwitchCtrl {
for(QcloudForwardLbModelDataRule rule:data.getRules()){
if (domainList.contains(rule.getDomain())) {
if(domainList.get(0).equals(rule.getDomain())){
addJavaNgingList(rule.getBackends(),ipInWeight,java_nginx_az1,java_nginx_az2,java_nginx_az3);
TreeMap<String,Integer> ipWeightAll=new TreeMap<>();//自动有顺序
addJavaNgingList(rule.getBackends(),ipWeightAll,ipInWeight,java_nginx_az1,java_nginx_az2,java_nginx_az3);
lbWeightDescrMap.put(lb.getKey()+"-"+rule.getLocationId()+"-"+protocolType+"-"+port+"-"+rule.getDomain(),ipWeightAll);
}else{
TreeMap<String,Integer> ipWeightAll=new TreeMap<>();//自动有顺序
for(QcloudLbModelBackend backend:rule.getBackends()){
ipWeightAll.put(backend.getLanIp(),backend.getWeight());
}
lbWeightDescrMap.put(lb.getKey()+"-"+rule.getLocationId()+"-"+protocolType+"-"+port+"-"+rule.getDomain(),ipWeightAll);
/*Map<String,Integer> tmp_ipInWeight=new HashMap<>();
Set<String> tmp_java_nginx_az1=new HashSet<>();
Set<String> tmp_java_nginx_az2=new HashSet<>();
... ... @@ -691,37 +701,53 @@ public class NginxSwitchCtrl {
}
if(!CollectionUtils.isEqualCollection(java_nginx_az1_cmdb,Lists.newArrayList(java_nginx_az1))){
return new BaseResponse(201, "负载均衡nginx与cmdb标签nginx不一致,cmdb:"+StringUtils.join(java_nginx_az1_cmdb,",")
+",lb nginx:"+StringUtils.join(java_nginx_az1,","));
return new BaseResponse(201, "负载均衡nginx与cmdb标签nginx不一致,\r\ncmdb:"+StringUtils.join(java_nginx_az1_cmdb,",")
+",\r\nlb nginx:"+StringUtils.join(java_nginx_az1,","));
}
if(!CollectionUtils.isEqualCollection(java_nginx_az2_cmdb,Lists.newArrayList(java_nginx_az2))){
return new BaseResponse(201, "负载均衡nginx与cmdb标签nginx不一致,cmdb:"+StringUtils.join(java_nginx_az2_cmdb,",")
+",lb nginx:"+StringUtils.join(java_nginx_az2,","));
return new BaseResponse(201, "负载均衡nginx与cmdb标签nginx不一致,\r\ncmdb:"+StringUtils.join(java_nginx_az2_cmdb,",")
+",\r\nlb nginx:"+StringUtils.join(java_nginx_az2,","));
}
if(!CollectionUtils.isEqualCollection(java_nginx_az3_cmdb,Lists.newArrayList(java_nginx_az3))){
return new BaseResponse(201, "负载均衡nginx与cmdb标签nginx不一致,cmdb:"+StringUtils.join(java_nginx_az3_cmdb,",")
+",lb nginx:"+StringUtils.join(java_nginx_az3,","));
return new BaseResponse(201, "负载均衡nginx与cmdb标签nginx不一致,\r\ncmdb:"+StringUtils.join(java_nginx_az3_cmdb,",")
+",\r\nlb nginx:"+StringUtils.join(java_nginx_az3,","));
}
map.put("lbMap", Lists.newArrayList(lbMap));
//校验,每个key下挂载的机器的数量是一样的,必须是所有的nginx,只是权重不同
int count=0;
List<String> ipsLast= null;
String lastKey="";
Map<String ,List<String>> checkWeightMap=new HashMap<>();
for(String key:lbWeightDescrMap.keySet()){
TreeMap<String,Integer> ipWeight= lbWeightDescrMap.get(key);
List<String> ipsCurrent=Lists.newArrayList(ipWeight.keySet());
if(count==0){
ipsLast = ipsCurrent;
}else{
if(!CollectionUtils.isEqualCollection(ipsLast,ipsCurrent)){
return new BaseResponse(201, "请检测lb挂载的nginx 不一致 \r\n"+lastKey+":"+ipsLast+"\r\n"+key+":"+ipsCurrent);
}
if ("test1".equals(env)||"test".equals(env)) {
/*List<Map<String, Object>> az2List = localTest("az2");
List<Map<String, Object>> qcloudList = localTest("qq");
map.put("qcloudList", qcloudList);
map.put("qcloudaz2List",az2List);*/
return new BaseResponse(map);
}
}
//map.put("awsList", getUpstreamTagNginxList(1,null));
String azTag=key.substring(0,3);
if(!checkWeightMap.containsKey(azTag)){
checkWeightMap.put(azTag,Lists.newArrayList(JSON.toJSONString(ipWeight),key));
}else{
if(!StringUtils.equals(JSON.toJSONString(ipWeight),checkWeightMap.get(azTag).get(0))){
return new BaseResponse(201, "请检测lb挂载的nginx 权重不一致 \r\n"+checkWeightMap.get(azTag).get(1)+":"+checkWeightMap.get(azTag).get(0)+"\r\n"+key+":"+JSON.toJSONString(ipWeight));
}
}
//map.put("qcloudList", getUpstreamTagNginxList(2,"az1"));
lastKey = key;
count++;
}
//map.put("qcloudaz2List", getUpstreamTagNginxList(2,"az2"));
return new BaseResponse(map);
}catch (Exception e){
logger.error(" NginxSwitchCtrl - viewNginxConf - init - error" , e);
... ... @@ -744,12 +770,13 @@ public class NginxSwitchCtrl {
return lbList;
}
private void addJavaNgingList(List<QcloudLbModelBackend> backendList,Map<String,Integer> ipInWeight,Set<String> java_nginx_az1,Set<String> java_nginx_az2,Set<String> java_nginx_az3){
private void addJavaNgingList(List<QcloudLbModelBackend> backendList,Map<String,Integer> ipWeightAll,Map<String,Integer> ipInWeight,Set<String> java_nginx_az1,Set<String> java_nginx_az2,Set<String> java_nginx_az3){
for(QcloudLbModelBackend backend:backendList){
//记录权重
if(backend.getWeight()>0){
ipInWeight.put(backend.getLanIp(),backend.getWeight());
}
ipWeightAll.put(backend.getLanIp(),backend.getWeight());
//记录nginx机器
if(backend.getInstanceName().contains("az1")){
java_nginx_az1.add(backend.getLanIp());
... ...