add flags for healthyOps and HealthCheckConf

This commit is contained in:
fanqq 2016-06-16 17:01:24 +08:00
parent f7342347d2
commit 68139a3f1b
5 changed files with 47 additions and 6 deletions

View file

@ -6,6 +6,7 @@ import com.ctrip.zeus.exceptions.ValidationException;
import com.ctrip.zeus.executor.TaskManager;
import com.ctrip.zeus.model.entity.*;
import com.ctrip.zeus.restful.message.ResponseHandler;
import com.ctrip.zeus.service.build.ConfigService;
import com.ctrip.zeus.service.model.*;
import com.ctrip.zeus.service.nginx.CertificateConfig;
import com.ctrip.zeus.service.nginx.CertificateInstaller;
@ -74,6 +75,8 @@ public class OperationResource {
private CertificateInstaller certificateInstaller;
@Resource
private EntityFactory entityFactory;
@Resource
private ConfigService configService;
private static DynamicLongProperty apiTimeout = DynamicPropertyFactory.getInstance().getLongProperty("api.timeout", 15000L);
private static DynamicBooleanProperty healthyOpsActivate = DynamicPropertyFactory.getInstance().getBooleanProperty("healthy.operation.active", false);
@ -304,16 +307,27 @@ public class OperationResource {
groupId = groupCriteriaQuery.queryByName(groupName);
}
}
Group gp = groupRepository.getById(groupId);
if (gp == null) {
throw new ValidationException("Group Id or Name not found!");
}
if (null != batch && batch.equals(true)) {
Group gp = groupRepository.getById(groupId);
List<GroupServer> servers = gp.getGroupServers();
for (GroupServer gs : servers) {
_ips.add(gs.getIp());
}
} else if (ips != null) {
_ips = ips;
List<GroupServer> servers = gp.getGroupServers();
for (GroupServer gs : servers) {
if (ips.contains(gs.getIp())) {
_ips.add(gs.getIp());
}
}
}
if (_ips.size() == 0) {
throw new ValidationException("Not found ip in group.GroupId:" + groupId + " ip:" + ips.toString());
}
if (healthyOpsActivate.get()) {
return memberOps(hh, groupId, _ips, true, TaskOpsType.HEALTHY_OPS);
} else {
@ -349,7 +363,15 @@ public class OperationResource {
_ips.add(gs.getIp());
}
} else if (ips != null) {
_ips = ips;
List<GroupServer> servers = gp.getGroupServers();
for (GroupServer gs : servers) {
if (ips.contains(gs.getIp())) {
_ips.add(gs.getIp());
}
}
}
if (_ips.size() == 0) {
throw new ValidationException("Not found ip in group.GroupId:" + groupId + " ip:" + ips.toString());
}
if (healthyOpsActivate.get()) {
return memberOps(hh, groupId, _ips, false, TaskOpsType.HEALTHY_OPS);
@ -526,6 +548,15 @@ public class OperationResource {
}
slbIds.add(tmp.getSlbId());
}
//TODO flag for Healthy ops
if (type.equals(TaskOpsType.HEALTHY_OPS)) {
for (Long slbId : slbIds) {
if (!configService.getEnable("healthy.operation.active", slbId, null, null, false)) {
logger.info("healthy.operation.active is false. slbId:" + slbId);
return healthyOps(hh, groupId, ips, up);
}
}
}
List<OpsTask> tasks = new ArrayList<>();
for (Long slbId : slbIds) {

View file

@ -22,8 +22,9 @@ public class HealthCheckConf {
public String generate(VirtualServer vs, Group group) throws Exception {
Long vsId = vs.getId();
Long groupId = group.getId();
Long slbId = vs.getSlbId();
if (!configService.getEnable("upstream.healthCheck", null, vsId, groupId, true)) {
if (!configService.getEnable("upstream.healthCheck", slbId, vsId, groupId, true)) {
return "";
}

View file

@ -213,6 +213,7 @@ public class GroupStatusServiceImpl implements GroupStatusService {
groupServerStatus.setPull(pullIn);
groupServerStatus.setHealthy(raise);
groupServerStatus.setUp(up);
groupServerStatus.setOnline(true);
status.addGroupServerStatus(groupServerStatus);
}
res.add(status);
@ -237,14 +238,18 @@ public class GroupStatusServiceImpl implements GroupStatusService {
Group onlineGroup = onlineGroups.get(groupId);
Set<String> onlineMembers = new HashSet<>();
Map<String, GroupServer> members = new HashMap<>();
if (onlineGroup != null) {
for (GroupServer groupServer : onlineGroup.getGroupServers()) {
onlineMembers.add(groupServer.getIp());
members.put(groupServer.getIp(),groupServer);
}
}
List<GroupServer> groupServerList = group.getGroupServers();
for (GroupServer gs : groupServerList) {
members.put(gs.getIp(),gs);
}
for (GroupServer gs : members.values()) {
GroupServerStatus groupServerStatus = new GroupServerStatus();
groupServerStatus.setIp(gs.getIp());
groupServerStatus.setPort(gs.getPort());
@ -277,6 +282,7 @@ public class GroupStatusServiceImpl implements GroupStatusService {
groupServerStatus.setPull(pullIn);
groupServerStatus.setHealthy(raise);
groupServerStatus.setUp(up);
groupServerStatus.setOnline(onlineMembers.contains(gs.getIp()));
status.addGroupServerStatus(groupServerStatus);
}
res.add(status);

View file

@ -24,6 +24,7 @@
<element name="pull" value-type="boolean" />
<element name="healthy" value-type="boolean" />
<element name="up" value-type="boolean" />
<element name="online" value-type="boolean" />
<element name="discription" value-type="String" />
</entity>
<entity name="group-status-list">

View file

@ -13,6 +13,7 @@
<pull>true</pull>
<healthy>true</healthy>
<up>true</up>
<online>false</online>
<discription>status</discription>
</group-server-status>
<group-server-status>
@ -23,6 +24,7 @@
<pull>true</pull>
<healthy>true</healthy>
<up>true</up>
<online>false</online>
<discription>status</discription>
</group-server-status>
</group-status>