diff options
author | Eric Hartmann <hartmann.eric@gmail.Com> | 2017-03-21 13:50:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-21 13:50:43 +0100 |
commit | 7e3819c67725d92e4078c16c4cdd3d6cb8629d5d (patch) | |
tree | bd8e11d4341151e6786c797c447954effaff3ff6 /server/sonar-process/src | |
parent | ff0efa8afb8e47ae7dea5f0a190b1772ba59ec0e (diff) | |
download | sonarqube-7e3819c67725d92e4078c16c4cdd3d6cb8629d5d.tar.gz sonarqube-7e3819c67725d92e4078c16c4cdd3d6cb8629d5d.zip |
SONAR-8935 Add a log when joining a cluster
Diffstat (limited to 'server/sonar-process/src')
-rw-r--r-- | server/sonar-process/src/main/java/org/sonar/process/NetworkUtils.java | 48 | ||||
-rw-r--r-- | server/sonar-process/src/test/java/org/sonar/process/NetworkUtilsTest.java | 5 |
2 files changed, 53 insertions, 0 deletions
diff --git a/server/sonar-process/src/main/java/org/sonar/process/NetworkUtils.java b/server/sonar-process/src/main/java/org/sonar/process/NetworkUtils.java index f6e74b53d92..556fc77d4a4 100644 --- a/server/sonar-process/src/main/java/org/sonar/process/NetworkUtils.java +++ b/server/sonar-process/src/main/java/org/sonar/process/NetworkUtils.java @@ -20,11 +20,21 @@ package org.sonar.process; import java.io.IOException; +import java.net.Inet4Address; +import java.net.InetAddress; import java.net.InetSocketAddress; +import java.net.NetworkInterface; import java.net.ServerSocket; +import java.net.SocketException; +import java.net.UnknownHostException; +import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.ArrayUtils; +import static java.lang.String.format; +import static java.util.Collections.list; +import static org.apache.commons.lang.StringUtils.isBlank; + public final class NetworkUtils { private static final RandomPortFinder RANDOM_PORT_FINDER = new RandomPortFinder(); @@ -37,6 +47,44 @@ public final class NetworkUtils { return RANDOM_PORT_FINDER.getNextAvailablePort(); } + /** + * Identifying the localhost machine + * It will try to retrieve the hostname and the IPv4 addresses + * + * @return "hostname (ipv4_1, ipv4_2...)" + */ + public static String getHostName() { + String hostname; + String ips; + try { + hostname = InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException e) { + hostname = "unresolved hostname"; + } + + try { + ips = list(NetworkInterface.getNetworkInterfaces()).stream() + .flatMap(netif -> + list(netif.getInetAddresses()).stream() + .filter(inetAddress -> + // Removing IPv6 for the time being + inetAddress instanceof Inet4Address && + // Removing loopback addresses, useless for identifying a server + !inetAddress.isLoopbackAddress() && + // Removing interfaces without IPs + !isBlank(inetAddress.getHostAddress()) + ) + .map(InetAddress::getHostAddress) + ) + .filter(p -> !isBlank(p)) + .collect(Collectors.joining(",")); + } catch (SocketException e) { + ips = "unresolved IPs"; + } + + return format("%s (%s)", hostname, ips); + } + static class RandomPortFinder { private static final int MAX_TRY = 10; // Firefox blocks some reserved ports : http://www-archive.mozilla.org/projects/netlib/PortBanning.html diff --git a/server/sonar-process/src/test/java/org/sonar/process/NetworkUtilsTest.java b/server/sonar-process/src/test/java/org/sonar/process/NetworkUtilsTest.java index e12aab1e2f3..9d9ea9a368b 100644 --- a/server/sonar-process/src/test/java/org/sonar/process/NetworkUtilsTest.java +++ b/server/sonar-process/src/test/java/org/sonar/process/NetworkUtilsTest.java @@ -75,4 +75,9 @@ public class NetworkUtilsTest { randomPortFinder.getNextAvailablePort(); } + + @Test + public void getHostName_must_return_a_value() { + assertThat(NetworkUtils.getHostName()).containsPattern(".* \\(.*\\)"); + } } |