aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-process/src
diff options
context:
space:
mode:
authorEric Hartmann <hartmann.eric@gmail.Com>2017-03-21 13:50:43 +0100
committerGitHub <noreply@github.com>2017-03-21 13:50:43 +0100
commit7e3819c67725d92e4078c16c4cdd3d6cb8629d5d (patch)
treebd8e11d4341151e6786c797c447954effaff3ff6 /server/sonar-process/src
parentff0efa8afb8e47ae7dea5f0a190b1772ba59ec0e (diff)
downloadsonarqube-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.java48
-rw-r--r--server/sonar-process/src/test/java/org/sonar/process/NetworkUtilsTest.java5
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(".* \\(.*\\)");
+ }
}