@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; }
@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 Object getStatus(ConsulRegistration registration) { String serviceId = registration.getServiceId(); Response<List<Check>> response = client.getHealthChecksForService(serviceId, QueryParams.DEFAULT); List<Check> checks = response.getValue(); for (Check check : checks) { if (check.getServiceId().equals(registration.getInstanceId())) { if (check.getName().equalsIgnoreCase("Service Maintenance Mode")) { return OUT_OF_SERVICE.getCode(); } } } return UP.getCode(); } }
@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 Object getStatus(ConsulRegistration registration) { String serviceId = registration.getServiceId(); Response<List<Check>> response = client.getHealthChecksForService(serviceId, QueryParams.DEFAULT); List<Check> checks = response.getValue(); for (Check check : checks) { if (check.getServiceId().equals(registration.getInstanceId())) { if (check.getName().equalsIgnoreCase("Service Maintenance Mode")) { return OUT_OF_SERVICE.getCode(); } } } return UP.getCode(); } }