This is an automated email from the ASF dual-hosted git repository.

sk0x50 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new d8d3df13f22 IGNITE-25694 Add JMX configuration for remote monitoring 
to logs (#6066)
d8d3df13f22 is described below

commit d8d3df13f220f5bcf6e04c0b7726470a809892cf
Author: Slava Koptilin <[email protected]>
AuthorDate: Wed Jun 18 16:10:19 2025 +0300

    IGNITE-25694 Add JMX configuration for remote monitoring to logs (#6066)
---
 .../ignite/internal/app/IgniteServerImpl.java      | 44 +++++++++++++++++++---
 1 file changed, 39 insertions(+), 5 deletions(-)

diff --git 
a/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteServerImpl.java
 
b/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteServerImpl.java
index 10260dea776..d83180ece2f 100644
--- 
a/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteServerImpl.java
+++ 
b/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteServerImpl.java
@@ -40,6 +40,7 @@ import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteServer;
 import org.apache.ignite.InitParameters;
 import org.apache.ignite.internal.eventlog.api.IgniteEventType;
+import org.apache.ignite.internal.lang.IgniteStringFormatter;
 import org.apache.ignite.internal.lang.NodeStoppingException;
 import org.apache.ignite.internal.logger.IgniteLogger;
 import org.apache.ignite.internal.logger.Loggers;
@@ -394,6 +395,8 @@ public class IgniteServerImpl implements IgniteServer {
 
         logAvailableResources();
 
+        ackRemoteManagement();
+
         return instance.startAsync().handle((result, throwable) -> {
             if (throwable != null) {
                 return CompletableFuture.<Void>failedFuture(throwable);
@@ -415,11 +418,6 @@ public class IgniteServerImpl implements IgniteServer {
         }).thenCompose(identity());
     }
 
-    private static void logAvailableResources() {
-        LOG.info("Available processors: {}", 
Runtime.getRuntime().availableProcessors());
-        LOG.info("Max heap: {}", Runtime.getRuntime().maxMemory());
-    }
-
     @Override
     public void start() {
         sync(startAsync());
@@ -457,6 +455,42 @@ public class IgniteServerImpl implements IgniteServer {
         LOG.info("{}" + lineSeparator() + "{}{}" + lineSeparator(), banner, 
padding, "Apache Ignite ver. " + version);
     }
 
+    private static void logAvailableResources() {
+        LOG.info("Available processors: {}", 
Runtime.getRuntime().availableProcessors());
+        LOG.info("Max heap: {}", Runtime.getRuntime().maxMemory());
+    }
+
+    private static void ackRemoteManagement() {
+        if (LOG.isInfoEnabled()) {
+            boolean jmxEnabled = 
System.getProperty("com.sun.management.jmxremote") != null;
+
+            if (jmxEnabled) {
+                String jmxMessage = "Remote management[JMX (remote: on, port: 
{}, auth: {}, ssl: {})]";
+
+                String port = 
System.getProperty("com.sun.management.jmxremote.port", "<n/a>");
+                boolean authEnabled = 
Boolean.getBoolean("com.sun.management.jmxremote.authenticate");
+                // By default SSL is enabled, that's why additional check for 
null is needed.
+                // 
https://docs.oracle.com/en/java/javase/11/management/monitoring-and-management-using-jmx-technology.html
+                boolean sslEnabled = 
Boolean.getBoolean("com.sun.management.jmxremote.ssl")
+                        || 
(System.getProperty("com.sun.management.jmxremote.ssl") == null);
+
+                LOG.info(IgniteStringFormatter.format(jmxMessage, port, 
onOff(authEnabled), onOff(sslEnabled)));
+            } else {
+                LOG.info("Remote management[JMX (remote: off)]");
+            }
+        }
+    }
+
+    /**
+     * Gets "on" or "off" string for given boolean value.
+     *
+     * @param b Boolean value to convert.
+     * @return Result string.
+     */
+    private static String onOff(boolean b) {
+        return b ? "on" : "off";
+    }
+
     private static void sync(CompletableFuture<Void> future) {
         try {
             future.get();

Reply via email to