package com.netflix.discovery.util; import com.netflix.discovery.shared.Applications; import com.netflix.eureka.DefaultEurekaServerConfig; import com.netflix.eureka.EurekaServerConfig; import com.netflix.eureka.transport.JerseyReplicationClient; import com.netflix.eureka.resources.DefaultServerCodecs; import static com.netflix.discovery.util.EurekaEntityFunctions.countInstances; /** * A tool for running diagnostic tasks against a discovery server. Currently limited to observing * of consistency of delta updates. * * @author Tomasz Bak */ public class DiagnosticClient { public static void main(String[] args) throws InterruptedException { String discoveryURL = args[0]; long startTime = System.currentTimeMillis(); EurekaServerConfig serverConfig = new DefaultEurekaServerConfig("eureka."); JerseyReplicationClient client = JerseyReplicationClient.createReplicationClient( serverConfig, new DefaultServerCodecs(serverConfig), discoveryURL ); Applications applications = client.getApplications().getEntity(); System.out.println("Applications count=" + applications.getRegisteredApplications().size()); System.out.println("Instance count=" + countInstances(applications)); while (true) { long delay = System.currentTimeMillis() - startTime; if (delay >= 30000) { System.out.println("Processing delay exceeds 30sec; we may be out of sync"); } else { long waitTime = 30 * 1000 - delay; System.out.println("Waiting " + waitTime / 1000 + "sec before next fetch..."); Thread.sleep(15 * 1000); } startTime = System.currentTimeMillis(); Applications delta = client.getDelta().getEntity(); Applications merged = EurekaEntityFunctions.mergeApplications(applications, delta); if (merged.getAppsHashCode().equals(delta.getAppsHashCode())) { System.out.println("Hash codes match: " + delta.getAppsHashCode() + "(delta count=" + countInstances(delta) + ')'); applications = merged; } else { System.out.println("ERROR: hash codes do not match (" + delta.getAppsHashCode() + "(delta) != " + merged.getAppsHashCode() + " (merged) != " + applications.getAppsHashCode() + "(old apps)" + "(delta count=" + countInstances(delta) + ')' ); applications = client.getApplications().getEntity(); } } } }