@Override public List<JSONObject> getNodes(String dcGroup, String service, String nodeType) { List<JSONObject> results = new ArrayList<JSONObject>(); List<Check> checks = consulClient.getHealthChecksForService(getGroupName(dcGroup), new QueryParams(getDcName(dcGroup))).getValue(); for (Check check : checks) { String serviceId = check.getServiceId(); String[] strings = serviceId.split("-"); if (strings[1].equals(service)) { Check.CheckStatus status = check.getStatus(); JSONObject node = new JSONObject(); if (nodeType.equals(status.toString())) { node.put("host", strings[0]); node.put("info", null); results.add(node); } } } return results; }
public boolean isPassingChecks() { for (Check check : this.service.getChecks()) { if (check.getStatus() != Check.CheckStatus.PASSING) { return false; } } return true; } }
public boolean isPassingChecks(HealthService service) { for (Check check : service.getChecks()) { if (check.getStatus() != Check.CheckStatus.PASSING) { return false; } } return true; }
public boolean isPassingChecks() { for (Check check : this.service.getChecks()) { if (check.getStatus() != Check.CheckStatus.PASSING) { return false; } } return true; } }
@Override public List<Server> getFilteredListOfServers(List<Server> servers) { List<Server> okServers = new ArrayList<>(servers.size()); for (Server server : servers) { String appName = server.getMetaInfo().getAppName(); String instanceId = server.getMetaInfo().getInstanceId(); //TODO: cache getHealthChecks? this is hit often List<Check> serviceChecks = client.getHealthChecksForService(appName, QueryParams.DEFAULT).getValue(); boolean serviceOk = true; for (Check check : serviceChecks) { if (check.getServiceId().equals(instanceId) && check.getStatus() != Check.CheckStatus.PASSING) { serviceOk = false; break; // just need one to fail } } if (serviceOk) { okServers.add(server); } } return okServers; }
@Override public Host apply(HealthService info) { String hostName = ConsulHelper.findHost(info); Map<String, String> metaData = ConsulHelper.getMetadata(info); Host.Status status = Host.Status.Up; for (com.ecwid.consul.v1.health.model.Check check : info.getChecks()) { if (check.getStatus() == Check.CheckStatus.CRITICAL) { status = Host.Status.Down; break; } } String rack = null; try { if (metaData.containsKey("cloud") && StringUtils.equals(metaData.get("cloud"), "aws")) { rack = metaData.get("availability-zone"); } else { rack = metaData.get("rack"); } } catch (Throwable t) { Logger.error("Error getting rack for host " + info.getNode(), t); } if (rack == null) { Logger.error("Rack wasn't found for host:" + info.getNode() + " there may be issues matching it up to the token map"); } Host host = new Host(hostName, hostName, info.getService().getPort(), rack, String.valueOf(metaData.get("datacenter")), status); return host; } }));
@Override public List<Server> getFilteredListOfServers(List<Server> servers) { List<Server> okServers = new ArrayList<>(servers.size()); for (Server server : servers) { String appName = server.getMetaInfo().getAppName(); String instanceId = server.getMetaInfo().getInstanceId(); //TODO: cache getHealthChecks? this is hit often List<Check> serviceChecks = client.getHealthChecksForService(appName, QueryParams.DEFAULT).getValue(); boolean serviceOk = true; for (Check check : serviceChecks) { if (check.getServiceId().equals(instanceId) && check.getStatus() != Check.CheckStatus.PASSING) { serviceOk = false; break; // just need one to fail } } if (serviceOk) { okServers.add(server); } } return okServers; }