From fc60341c281f2c5335c56ceaf06a209318d1966a Mon Sep 17 00:00:00 2001 From: emeroad Date: Thu, 25 May 2023 16:47:41 +0900 Subject: [PATCH] [#9932] Remove thrift dependency of Tools module --- tools/pom.xml | 49 +----- .../tools/NetworkAvailabilityChecker.java | 153 ++++++------------ .../tools/network/AbstractNetworkChecker.java | 15 +- .../pinpoint/tools/network/TCPChecker.java | 16 +- .../pinpoint/tools/network/UDPChecker.java | 91 ----------- .../network/grpc/GrpcTransportConfig.java | 70 +++----- .../network/thrift/ThriftTransportConfig.java | 55 ------- .../pinpoint/tools/utils/IOUtils.java | 15 +- .../pinpoint/tools/utils/Logger.java | 11 ++ .../pinpoint/tools/utils/NumberUtils.java | 10 ++ .../tools/utils/PropertyResolver.java | 29 ++++ .../tools/utils/PropertyResolverTest.java | 38 +++++ 12 files changed, 182 insertions(+), 370 deletions(-) delete mode 100644 tools/src/main/java/com/navercorp/pinpoint/tools/network/UDPChecker.java delete mode 100644 tools/src/main/java/com/navercorp/pinpoint/tools/network/thrift/ThriftTransportConfig.java create mode 100644 tools/src/main/java/com/navercorp/pinpoint/tools/utils/Logger.java create mode 100644 tools/src/main/java/com/navercorp/pinpoint/tools/utils/NumberUtils.java create mode 100644 tools/src/main/java/com/navercorp/pinpoint/tools/utils/PropertyResolver.java create mode 100644 tools/src/test/java/com/navercorp/pinpoint/tools/utils/PropertyResolverTest.java diff --git a/tools/pom.xml b/tools/pom.xml index 6d742eec8209..e117bdad6534 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -14,56 +14,11 @@ jar - - com.navercorp.pinpoint - pinpoint-bootstrap-core - ${project.version} - - - com.navercorp.pinpoint - pinpoint-thrift - ${project.version} - - - org.apache.thrift - libthrift - - - - org.slf4j - slf4j-api - - - org.apache.logging.log4j - log4j-slf4j-impl - - - org.apache.logging.log4j - log4j-core - + - - - - maven-assembly-plugin - - - package - - single - - - - - - jar-with-dependencies - - false - - - + diff --git a/tools/src/main/java/com/navercorp/pinpoint/tools/NetworkAvailabilityChecker.java b/tools/src/main/java/com/navercorp/pinpoint/tools/NetworkAvailabilityChecker.java index 3cbf42f54eb0..0202d4ba752a 100644 --- a/tools/src/main/java/com/navercorp/pinpoint/tools/NetworkAvailabilityChecker.java +++ b/tools/src/main/java/com/navercorp/pinpoint/tools/NetworkAvailabilityChecker.java @@ -16,24 +16,16 @@ package com.navercorp.pinpoint.tools; -import com.navercorp.pinpoint.bootstrap.config.ProfilerConfig; -import com.navercorp.pinpoint.bootstrap.config.ProfilerConfigLoader; -import com.navercorp.pinpoint.bootstrap.config.Profiles; -import com.navercorp.pinpoint.common.util.PropertyUtils; -import com.navercorp.pinpoint.thrift.io.HeaderTBaseSerializer; -import com.navercorp.pinpoint.thrift.io.HeaderTBaseSerializerFactory; -import com.navercorp.pinpoint.thrift.io.NetworkAvailabilityCheckPacket; import com.navercorp.pinpoint.tools.network.NetworkChecker; import com.navercorp.pinpoint.tools.network.TCPChecker; -import com.navercorp.pinpoint.tools.network.UDPChecker; import com.navercorp.pinpoint.tools.network.grpc.GrpcTransportConfig; -import com.navercorp.pinpoint.tools.network.thrift.ThriftTransportConfig; -import org.apache.thrift.TException; +import com.navercorp.pinpoint.tools.utils.Logger; -import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Arrays; import java.util.Properties; /** @@ -41,100 +33,79 @@ */ public class NetworkAvailabilityChecker { - private static final String SEPARATOR = File.separator; + public static final String ACTIVE_PROFILE_KEY = "pinpoint.profiler.profiles.active"; + public static final String CONFIG_FILE_NAME = "pinpoint-root.config"; + public static final String PROFILE_CONFIG_FILE_NAME = "pinpoint.config"; + + private static final Logger logger = new Logger(); public static void main(String[] args) { if (args.length != 1) { - System.out.println("usage : " + NetworkAvailabilityChecker.class.getSimpleName() + " AGENT_CONFIG_FILE"); + logger.info("usage : " + NetworkAvailabilityChecker.class.getSimpleName() + " AGENT_CONFIG_FILE"); return; } String configPath = args[0]; + Path filePath = Paths.get(configPath); final Properties defaultProperties = new Properties(); - loadFileProperties(defaultProperties, configPath); + loadFileProperties(defaultProperties, filePath); - File file = new File(configPath); - String path = file.getAbsoluteFile().getParent(); + Path path = filePath.toAbsolutePath().getParent(); - if (configPath.contains(Profiles.CONFIG_FILE_NAME)) { + if (configPath.contains(CONFIG_FILE_NAME)) { // 2. load profile final String activeProfile = getActiveProfile(defaultProperties); - System.out.println("Active profile : " + activeProfile); + logger.info("Active profile : " + activeProfile); if (activeProfile == null) { - System.out.println("Could not find activeProfile : null"); + logger.info("Could not find activeProfile : null"); return; } - final File activeProfileConfigFile = new File(path, "profiles" + SEPARATOR + activeProfile + SEPARATOR + Profiles.PROFILE_CONFIG_FILE_NAME); - loadFileProperties(defaultProperties, activeProfileConfigFile.getAbsolutePath()); - } - - final ProfilerConfig profilerConfig = ProfilerConfigLoader.load(defaultProperties); - if (profilerConfig.getTransportModule().toString().equals("GRPC")) { - - System.out.println("Transport Module set to GRPC"); - - GrpcTransportConfig grpcTransportConfig = new GrpcTransportConfig(); - grpcTransportConfig.read(defaultProperties); + final Path activeProfileConfigFile = Paths.get(path.toString(), "profiles", activeProfile, PROFILE_CONFIG_FILE_NAME); - try { - checkGRPCBase(grpcTransportConfig); - } catch (Exception e) { - e.printStackTrace(); - } + loadFileProperties(defaultProperties, activeProfileConfigFile.toAbsolutePath()); + } - try { - checkGRPCMeta(grpcTransportConfig); - } catch (Exception e) { - e.printStackTrace(); - } + logger.info("Transport Module set to GRPC"); - try { - checkGRPCStat(grpcTransportConfig); - } catch (Exception e) { - e.printStackTrace(); - } + GrpcTransportConfig grpcTransportConfig = new GrpcTransportConfig(defaultProperties); - try { - checkGRPCSpan(grpcTransportConfig); - } catch (Exception e) { - e.printStackTrace(); - } - - } else { + try { + checkGRPCBase(grpcTransportConfig); + } catch (Exception e) { + e.printStackTrace(); + } - System.out.println("Transport Module set to THRIFT"); - ThriftTransportConfig thriftTransportConfig = new ThriftTransportConfig(); - thriftTransportConfig.read(defaultProperties); - try { - checkUDPStat(thriftTransportConfig); - } catch (Exception e) { - e.printStackTrace(); - } + try { + checkGRPCMeta(grpcTransportConfig); + } catch (Exception e) { + e.printStackTrace(); + } - try { - checkUDPSpan(thriftTransportConfig); - } catch (Exception e) { - e.printStackTrace(); - } + try { + checkGRPCStat(grpcTransportConfig); + } catch (Exception e) { + e.printStackTrace(); + } - try { - checkTCP(thriftTransportConfig); - } catch (Exception e) { - e.printStackTrace(); - } + try { + checkGRPCSpan(grpcTransportConfig); + } catch (Exception e) { + e.printStackTrace(); } + } private static String getActiveProfile(Properties defaultProperties) { - return defaultProperties.getProperty(Profiles.ACTIVE_PROFILE_KEY, "release"); + return defaultProperties.getProperty(ACTIVE_PROFILE_KEY, "release"); } - private static void loadFileProperties(Properties properties, String filePath) { + private static void loadFileProperties(Properties properties, Path filePath) { try { - PropertyUtils.loadProperty(properties, Paths.get(filePath)); + InputStream inputStream = Files.newInputStream(filePath); + properties.load(inputStream); } catch (IOException e) { throw new IllegalStateException(String.format("%s load fail Caused by:%s", filePath, e.getMessage()), e); } @@ -172,38 +143,4 @@ private static void checkGRPCSpan(GrpcTransportConfig grpcTransportConfig) throw checker.check(); } - private static void checkUDPStat(ThriftTransportConfig profilerConfig) throws Exception { - String ip = profilerConfig.getCollectorStatServerIp(); - int port = profilerConfig.getCollectorStatServerPort(); - - NetworkChecker checker = new UDPChecker("UDP-STAT", ip, port); - checker.check(getNetworkCheckPayload(), getNetworkCheckResponsePayload()); - } - - - private static void checkUDPSpan(ThriftTransportConfig profilerConfig) throws Exception { - String ip = profilerConfig.getCollectorSpanServerIp(); - int port = profilerConfig.getCollectorSpanServerPort(); - - NetworkChecker checker = new UDPChecker("UDP-SPAN", ip, port); - checker.check(getNetworkCheckPayload(), getNetworkCheckResponsePayload()); - } - - private static void checkTCP(ThriftTransportConfig profilerConfig) throws Exception { - String ip = profilerConfig.getCollectorTcpServerIp(); - int port = profilerConfig.getCollectorTcpServerPort(); - - NetworkChecker checker = new TCPChecker("TCP", ip, port); - checker.check(); - } - - private static byte[] getNetworkCheckPayload() throws TException { - HeaderTBaseSerializer serializer = new HeaderTBaseSerializerFactory(65535).createSerializer(); - return serializer.serialize(new NetworkAvailabilityCheckPacket()); - } - - private static byte[] getNetworkCheckResponsePayload() { - return Arrays.copyOf(NetworkAvailabilityCheckPacket.DATA_OK, NetworkAvailabilityCheckPacket.DATA_OK.length); - } - } diff --git a/tools/src/main/java/com/navercorp/pinpoint/tools/network/AbstractNetworkChecker.java b/tools/src/main/java/com/navercorp/pinpoint/tools/network/AbstractNetworkChecker.java index 246443353cd0..845dd0d568c9 100644 --- a/tools/src/main/java/com/navercorp/pinpoint/tools/network/AbstractNetworkChecker.java +++ b/tools/src/main/java/com/navercorp/pinpoint/tools/network/AbstractNetworkChecker.java @@ -1,6 +1,7 @@ package com.navercorp.pinpoint.tools.network; import com.navercorp.pinpoint.tools.utils.HostResolver; +import com.navercorp.pinpoint.tools.utils.Logger; import java.io.IOException; import java.net.InetAddress; @@ -16,6 +17,8 @@ public abstract class AbstractNetworkChecker implements NetworkChecker { private static final String WHITE_SPACE = " "; // 4space private static final String LINE_SEPARATOR = System.lineSeparator(); + private final Logger logger = new Logger(); + private final String testName; private final InetSocketAddress hostAddress; @@ -43,8 +46,7 @@ public void check() throws IOException { report.append(createReport(ipAddress, check)); } - System.out.println(report); - + logger.info(report); } @Override @@ -59,7 +61,7 @@ public void check(byte[] requestData, byte[] expectedResponseData) throws IOExce report.append(createReport(ipAddress, check)); } - System.out.println(report); + logger.info(report); } private String getHostName(InetSocketAddress hostAddress) { @@ -70,10 +72,9 @@ private String createReport(InetSocketAddress socketAddress, boolean check) { String ip = getIp(socketAddress, socketAddress.getHostName()); int port = socketAddress.getPort(); - StringBuilder report = new StringBuilder(); - report.append(WHITE_SPACE).append("=> ").append(ip).append(":").append(port); - report.append(" [").append(check ? "SUCCESS" : "FAIL").append("]").append(LINE_SEPARATOR); - return report.toString(); + String report = WHITE_SPACE + "=> " + ip + ":" + port + + " [" + (check ? "SUCCESS" : "FAIL") + "]" + LINE_SEPARATOR; + return report; } protected String getIp(InetSocketAddress socketAddress, String defaultValue) { diff --git a/tools/src/main/java/com/navercorp/pinpoint/tools/network/TCPChecker.java b/tools/src/main/java/com/navercorp/pinpoint/tools/network/TCPChecker.java index e1a9763024ca..68ac05d2b32a 100644 --- a/tools/src/main/java/com/navercorp/pinpoint/tools/network/TCPChecker.java +++ b/tools/src/main/java/com/navercorp/pinpoint/tools/network/TCPChecker.java @@ -1,6 +1,7 @@ package com.navercorp.pinpoint.tools.network; import com.navercorp.pinpoint.tools.utils.IOUtils; +import com.navercorp.pinpoint.tools.utils.Logger; import java.io.IOException; import java.io.InputStream; @@ -15,6 +16,8 @@ */ public class TCPChecker extends AbstractNetworkChecker { + private static final Logger logger = new Logger(); + public TCPChecker(String testName, String hostName, int port) throws UnknownHostException { this(testName, new InetSocketAddress(hostName, port)); } @@ -29,7 +32,7 @@ protected boolean check(InetSocketAddress address) throws IOException { try (Socket socket = createSocket(address)) { return socket.isConnected(); } catch (IOException e) { - e.printStackTrace(); + logger.info(e); } return false; } @@ -43,17 +46,16 @@ protected boolean check(InetSocketAddress address, byte[] requestData, byte[] ex return Arrays.equals(expectedResponseData, responseData); } catch (IOException e) { - e.printStackTrace(); + logger.info(e); } return false; } private Socket createSocket(InetSocketAddress socketAddress) throws IOException { - try (Socket socket = new Socket()) { - socket.setSoTimeout(3000); - socket.connect(socketAddress); - return socket; - } + Socket socket = new Socket(); + socket.setSoTimeout(3000); + socket.connect(socketAddress); + return socket; } private void write(Socket socket, byte[] requestData) throws IOException { diff --git a/tools/src/main/java/com/navercorp/pinpoint/tools/network/UDPChecker.java b/tools/src/main/java/com/navercorp/pinpoint/tools/network/UDPChecker.java deleted file mode 100644 index 661773cdb49b..000000000000 --- a/tools/src/main/java/com/navercorp/pinpoint/tools/network/UDPChecker.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.navercorp.pinpoint.tools.network; - -import com.navercorp.pinpoint.tools.utils.IOUtils; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetSocketAddress; -import java.net.UnknownHostException; -import java.util.Arrays; - -/** - * @author Taejin Koo - */ -public class UDPChecker extends AbstractNetworkChecker { - - public UDPChecker(String testName, String hostName, int port) throws UnknownHostException { - this(testName, new InetSocketAddress(hostName, port)); - } - - public UDPChecker(String testName, InetSocketAddress hostAddress) throws UnknownHostException { - super(testName, hostAddress); - } - - @Override - protected boolean check(InetSocketAddress address) throws IOException { - try (DatagramSocket socket = createSocket(address)) { - return socket.isConnected(); - } catch (IOException e) { - e.printStackTrace(); - } - return false; - } - - @Override - protected boolean check(InetSocketAddress address, byte[] requestData, byte[] expectedResponseData) { - try (DatagramSocket socket = createSocket()){ - - write(socket, requestData, address); - byte[] responseData = read(socket, expectedResponseData.length); - - return Arrays.equals(expectedResponseData, responseData); - } catch (IOException e) { - e.printStackTrace(); - } - return false; - } - - private DatagramSocket createSocket() throws IOException { - DatagramSocket socket = new DatagramSocket(); - - socket.setSoTimeout(3000); - return socket; - } - - private DatagramSocket createSocket(InetSocketAddress socketAddress) throws IOException { - final DatagramSocket socket = new DatagramSocket(); - - boolean success = false; - try { - socket.setSoTimeout(3000); - socket.connect(socketAddress); - success = true; - } finally { - if (!success) { - IOUtils.closeQuietly(socket); - } - } - - return socket; - } - - private void write(DatagramSocket socket, byte[] requestData, InetSocketAddress address) throws IOException { - DatagramPacket datagramPacket = new DatagramPacket(requestData, requestData.length, address); - socket.send(datagramPacket); - } - - private byte[] read(DatagramSocket socket, int readSize) throws IOException { - byte[] buf = new byte[readSize]; - - DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length); - socket.receive(datagramPacket); - - int length = datagramPacket.getLength(); - if (length == 0) { - return IOUtils.EMPTY_BYTES; - } - return Arrays.copyOf(buf, length); - } - -} diff --git a/tools/src/main/java/com/navercorp/pinpoint/tools/network/grpc/GrpcTransportConfig.java b/tools/src/main/java/com/navercorp/pinpoint/tools/network/grpc/GrpcTransportConfig.java index fd22ec55579b..76cabd99f24f 100644 --- a/tools/src/main/java/com/navercorp/pinpoint/tools/network/grpc/GrpcTransportConfig.java +++ b/tools/src/main/java/com/navercorp/pinpoint/tools/network/grpc/GrpcTransportConfig.java @@ -16,11 +16,13 @@ package com.navercorp.pinpoint.tools.network.grpc; -import com.navercorp.pinpoint.common.config.Value; -import com.navercorp.pinpoint.common.config.util.ValueAnnotationProcessor; + +import com.navercorp.pinpoint.tools.utils.PropertyResolver; import java.util.Properties; +import static com.navercorp.pinpoint.tools.utils.NumberUtils.parseInt; + /** * @author Roy Kim */ @@ -31,75 +33,55 @@ public class GrpcTransportConfig { private static final int DEFAULT_STAT_COLLECTOR_PORT = 9992; private static final int DEFAULT_SPAN_COLLECTOR_PORT = 9993; - @Value("${profiler.transport.grpc.agent.collector.ip}") - private String agentCollectorIp = DEFAULT_IP; - @Value("${profiler.transport.grpc.agent.collector.port}") - private int agentCollectorPort = DEFAULT_AGENT_COLLECTOR_PORT; - - @Value("${profiler.transport.grpc.metadata.collector.ip}") - private String metadataCollectorIp = DEFAULT_IP; - @Value("${profiler.transport.grpc.metadata.collector.port}") - private int metadataCollectorPort = DEFAULT_AGENT_COLLECTOR_PORT; - - @Value("${profiler.transport.grpc.stat.collector.ip}") - private String statCollectorIp = DEFAULT_IP; - @Value("${profiler.transport.grpc.stat.collector.port}") - private int statCollectorPort = DEFAULT_STAT_COLLECTOR_PORT; - - @Value("${profiler.transport.grpc.span.collector.ip}") - private String spanCollectorIp = DEFAULT_IP; - @Value("${profiler.transport.grpc.span.collector.port}") - private int spanCollectorPort = DEFAULT_SPAN_COLLECTOR_PORT; - - public void read(Properties properties) { - final ValueAnnotationProcessor reader = new ValueAnnotationProcessor(); - reader.process(this, properties); + private final PropertyResolver resolver; + + + public GrpcTransportConfig(Properties resolver) { + this.resolver = new PropertyResolver(resolver); } public String getAgentCollectorIp() { - return agentCollectorIp; + return resolve("profiler.transport.grpc.agent.collector.ip", DEFAULT_IP); + } + + private String resolve(String key) { + return resolver.resolve(key, null); + } + + private String resolve(String key, String defaultValue) { + return resolver.resolve(key, defaultValue); } public int getAgentCollectorPort() { - return agentCollectorPort; + return parseInt(resolve("profiler.transport.grpc.agent.collector.port"), DEFAULT_AGENT_COLLECTOR_PORT); } public String getMetadataCollectorIp() { - return metadataCollectorIp; + return resolve("profiler.transport.grpc.metadata.collector.ip", DEFAULT_IP); } public int getMetadataCollectorPort() { - return metadataCollectorPort; + return parseInt(resolve("profiler.transport.grpc.metadata.collector.port"), DEFAULT_AGENT_COLLECTOR_PORT); } public String getStatCollectorIp() { - return statCollectorIp; + return resolve("profiler.transport.grpc.stat.collector.ip", DEFAULT_IP); } public int getStatCollectorPort() { - return statCollectorPort; + return parseInt(resolve("profiler.transport.grpc.stat.collector.port"), DEFAULT_STAT_COLLECTOR_PORT); } public String getSpanCollectorIp() { - return spanCollectorIp; + return resolve("profiler.transport.grpc.span.collector.ip", DEFAULT_IP); } public int getSpanCollectorPort() { - return spanCollectorPort; + return parseInt(resolve("profiler.transport.grpc.span.collector.port"), DEFAULT_SPAN_COLLECTOR_PORT); } @Override public String toString() { - final StringBuilder sb = new StringBuilder("GrpcTransportConfig{"); - sb.append("agentCollectorIp='").append(agentCollectorIp).append('\''); - sb.append(", agentCollectorPort=").append(agentCollectorPort); - sb.append(", metadataCollectorIp='").append(metadataCollectorIp).append('\''); - sb.append(", metadataCollectorPort=").append(metadataCollectorPort); - sb.append(", statCollectorIp='").append(statCollectorIp).append('\''); - sb.append(", statCollectorPort=").append(statCollectorPort); - sb.append(", spanCollectorIp='").append(spanCollectorIp).append('\''); - sb.append(", spanCollectorPort=").append(spanCollectorPort); - sb.append('}'); - return sb.toString(); + return resolver.toString(); } } \ No newline at end of file diff --git a/tools/src/main/java/com/navercorp/pinpoint/tools/network/thrift/ThriftTransportConfig.java b/tools/src/main/java/com/navercorp/pinpoint/tools/network/thrift/ThriftTransportConfig.java deleted file mode 100644 index 5c91947dd19f..000000000000 --- a/tools/src/main/java/com/navercorp/pinpoint/tools/network/thrift/ThriftTransportConfig.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.navercorp.pinpoint.tools.network.thrift; - -import com.navercorp.pinpoint.common.config.Value; -import com.navercorp.pinpoint.common.config.util.ValueAnnotationProcessor; - -import java.util.Properties; - -public class ThriftTransportConfig { - - private static final String DEFAULT_IP = "127.0.0.1"; - - @Value("${profiler.collector.span.ip}") - private String collectorSpanServerIp = DEFAULT_IP; - @Value("${profiler.collector.span.port}") - private int collectorSpanServerPort = 9996; - - @Value("${profiler.collector.stat.ip}") - private String collectorStatServerIp = DEFAULT_IP; - @Value("${profiler.collector.stat.port}") - private int collectorStatServerPort = 9995; - - @Value("${profiler.collector.tcp.ip}") - private String collectorTcpServerIp = DEFAULT_IP; - @Value("${profiler.collector.tcp.port}") - private int collectorTcpServerPort = 9994; - - public String getCollectorSpanServerIp() { - return collectorSpanServerIp; - } - - public int getCollectorSpanServerPort() { - return collectorSpanServerPort; - } - - public String getCollectorStatServerIp() { - return collectorStatServerIp; - } - - public int getCollectorStatServerPort() { - return collectorStatServerPort; - } - - public String getCollectorTcpServerIp() { - return collectorTcpServerIp; - } - - public int getCollectorTcpServerPort() { - return collectorTcpServerPort; - } - - public void read(Properties properties) { - final ValueAnnotationProcessor reader = new ValueAnnotationProcessor(); - reader.process(this, properties); - } -} diff --git a/tools/src/main/java/com/navercorp/pinpoint/tools/utils/IOUtils.java b/tools/src/main/java/com/navercorp/pinpoint/tools/utils/IOUtils.java index 1a397b920787..33fda1fba32c 100644 --- a/tools/src/main/java/com/navercorp/pinpoint/tools/utils/IOUtils.java +++ b/tools/src/main/java/com/navercorp/pinpoint/tools/utils/IOUtils.java @@ -16,9 +16,8 @@ package com.navercorp.pinpoint.tools.utils; +import java.io.Closeable; import java.io.IOException; -import java.net.DatagramSocket; -import java.net.Socket; /** * @author Woonduk Kang(emeroad) @@ -32,20 +31,14 @@ public final class IOUtils { private IOUtils() { } - public static void closeQuietly(Socket socket) { - if (socket != null) { + public static void closeQuietly(Closeable closeable) { + if (closeable != null) { try { - socket.close(); + closeable.close(); } catch (IOException ignored) { // skip } } } - public static void closeQuietly(DatagramSocket socket) { - if (socket != null) { - socket.close(); - } - } - } diff --git a/tools/src/main/java/com/navercorp/pinpoint/tools/utils/Logger.java b/tools/src/main/java/com/navercorp/pinpoint/tools/utils/Logger.java new file mode 100644 index 000000000000..82edd3f4ed05 --- /dev/null +++ b/tools/src/main/java/com/navercorp/pinpoint/tools/utils/Logger.java @@ -0,0 +1,11 @@ +package com.navercorp.pinpoint.tools.utils; + +public final class Logger { + public void info(CharSequence log) { + System.out.println(log); + } + + public void info(Throwable th) { + th.printStackTrace(); + } +} diff --git a/tools/src/main/java/com/navercorp/pinpoint/tools/utils/NumberUtils.java b/tools/src/main/java/com/navercorp/pinpoint/tools/utils/NumberUtils.java new file mode 100644 index 000000000000..4c6759e64f9f --- /dev/null +++ b/tools/src/main/java/com/navercorp/pinpoint/tools/utils/NumberUtils.java @@ -0,0 +1,10 @@ +package com.navercorp.pinpoint.tools.utils; + +public final class NumberUtils { + public static int parseInt(String value, int defaultValue) { + if (value == null) { + return defaultValue; + } + return Integer.parseInt(value); + } +} diff --git a/tools/src/main/java/com/navercorp/pinpoint/tools/utils/PropertyResolver.java b/tools/src/main/java/com/navercorp/pinpoint/tools/utils/PropertyResolver.java new file mode 100644 index 000000000000..39a42d9529a2 --- /dev/null +++ b/tools/src/main/java/com/navercorp/pinpoint/tools/utils/PropertyResolver.java @@ -0,0 +1,29 @@ +package com.navercorp.pinpoint.tools.utils; + +import java.util.Properties; + +public class PropertyResolver { + + + private static final String startToken = "${"; + private static final String endToken = "}"; + + private final Properties properties; + + public PropertyResolver(Properties properties) { + this.properties = properties; + } + + public String resolve(String key) { + return resolve(key, null); + } + + public String resolve(String key, String defaultValue) { + String value = properties.getProperty(key, defaultValue); + if (value.startsWith(startToken) && value.endsWith(endToken)) { + key = value.substring(startToken.length(), value.length() - endToken.length()); + value = resolve(key, defaultValue); + } + return value; + } +} diff --git a/tools/src/test/java/com/navercorp/pinpoint/tools/utils/PropertyResolverTest.java b/tools/src/test/java/com/navercorp/pinpoint/tools/utils/PropertyResolverTest.java new file mode 100644 index 000000000000..d3bf2ab623a1 --- /dev/null +++ b/tools/src/test/java/com/navercorp/pinpoint/tools/utils/PropertyResolverTest.java @@ -0,0 +1,38 @@ +package com.navercorp.pinpoint.tools.utils; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Properties; + +class PropertyResolverTest { + + @Test + void resolve() { + Properties properties = new Properties(); + properties.setProperty("reference.value", "${value1}"); + properties.setProperty("value1", "1"); + + PropertyResolver resolver = new PropertyResolver(properties); + + String refValue = resolver.resolve("reference.value"); + Assertions.assertEquals("1", refValue); + + String value = resolver.resolve("value1"); + Assertions.assertEquals("1", value); + } + + @Test + void resolve2() { + Properties properties = new Properties(); + properties.setProperty("reference.value1", "${reference.value2}"); + properties.setProperty("reference.value2", "${value1}"); + properties.setProperty("value1", "1"); + + PropertyResolver resolver = new PropertyResolver(properties); + + String refValue = resolver.resolve("reference.value1"); + Assertions.assertEquals("1", refValue); + + } +} \ No newline at end of file