From ba25718db2bac9305ff0cab7787efd85f035283f Mon Sep 17 00:00:00 2001 From: Scott Leberknight <174812+sleberknight@users.noreply.github.com> Date: Thu, 15 Aug 2024 15:31:21 -0400 Subject: [PATCH] Log warnings if there are multiple application and/or admin connectors (#191) * Add logging to ConsulServiceListener when there are multiple application and/or admin connectors * Shimmed several counters into the existing loop instead of trying to refactor it * Put new logging logic in a new method, logWarningsIfNecessary, which is called from within the loop Closes #189 --- .../consul/core/ConsulServiceListener.java | 58 +++++++++++++++++-- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/kiwiproject/dropwizard/consul/core/ConsulServiceListener.java b/src/main/java/org/kiwiproject/dropwizard/consul/core/ConsulServiceListener.java index 32b278b..0d16af7 100644 --- a/src/main/java/org/kiwiproject/dropwizard/consul/core/ConsulServiceListener.java +++ b/src/main/java/org/kiwiproject/dropwizard/consul/core/ConsulServiceListener.java @@ -14,7 +14,6 @@ import java.util.HashSet; import java.util.List; import java.util.Optional; -import java.util.Set; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -48,34 +47,81 @@ public ConsulServiceListener(ConsulAdvertiser advertiser, @Override public void serverStarted(Server server) { String applicationScheme = null; - int applicationPort = -1; - int adminPort = -1; - Set hosts = new HashSet<>(); + var applicationPort = -1; + var adminPort = -1; + var hosts = new HashSet(); + + var applicationConnectorCount = 0; + var adminConnectorCount = 0; + var otherConnectorCount = 0; for (var connector : server.getConnectors()) { + @SuppressWarnings("resource") var serverConnector = (ServerConnector) connector; + hosts.add(serverConnector.getHost()); + if (APPLICATION_NAME.equals(connector.getName())) { applicationPort = serverConnector.getLocalPort(); applicationScheme = getScheme(connector.getProtocols()); + ++applicationConnectorCount; + } else if (ADMIN_NAME.equals(connector.getName())) { adminPort = serverConnector.getLocalPort(); + ++adminConnectorCount; + } else { applicationPort = serverConnector.getLocalPort(); applicationScheme = getScheme(connector.getProtocols()); adminPort = applicationPort; + ++otherConnectorCount; } } + logWarningsIfNecessary(server, applicationConnectorCount, adminConnectorCount, otherConnectorCount); + LOG.debug( - "applicationScheme: {}, applicationPort: {}, adminPort: {}", + "Register with Consul using applicationScheme: {}, applicationPort: {}, adminPort: {}, hosts: {}", applicationScheme, applicationPort, - adminPort); + adminPort, + hosts); register(applicationScheme, applicationPort, adminPort, hosts); } + private void logWarningsIfNecessary(Server server, + int applicationConnectorCount, + int adminConnectorCount, + int otherConnectorCount) { + + if (server.getConnectors().length == 0) { + LOG.error("There are NO connectors for the Server!" + + " Consul registration will fail or not work as expected!"); + + return; // the following conditionals cannot be true if we're here + } + + if (applicationConnectorCount > 1 ) { + LOG.warn("There is more than one application connector." + + " Only the last one's scheme and port will be registered with Consul" + + " unless specified in ConsulFactory configuration!"); + } + + if (adminConnectorCount > 1) { + LOG.warn("There is more than one admin connector." + + " Only the last one's port will be registered with Consul" + + " unless specified in ConsulFactory configuration!"); + } + + if (otherConnectorCount > 0) { + LOG.warn("There is an 'other' connector (not application or admin)." + + " Its port will be used as application and admin port," + + " and its scheme as application scheme" + + " unless specified in ConsulFactory configuration!"); + } + } + /** * Return the protocol scheme from a list of protocols. *