aboutsummaryrefslogtreecommitdiffstats
path: root/jdisc_http_service
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-05-18 12:39:36 +0200
committerBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-05-18 12:41:03 +0200
commit720627ae953e5aba6080f1083ba5ad0588f27142 (patch)
treeeb2dcb231388dbd1a4fc3afa99876b2fc5de765c /jdisc_http_service
parent93ac313611b05ee7e711024f1271e15e21679bae (diff)
Add support for inspecting Jetty metrics through JMX
Diffstat (limited to 'jdisc_http_service')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java27
-rw-r--r--jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.server.def6
2 files changed, 33 insertions, 0 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
index 837f21519f2..16600edec7f 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
@@ -15,6 +15,8 @@ import com.yahoo.jdisc.http.server.FilterBindings;
import com.yahoo.jdisc.service.AbstractServerProvider;
import com.yahoo.jdisc.service.CurrentContainer;
import org.eclipse.jetty.http.HttpField;
+import org.eclipse.jetty.jmx.ConnectorServer;
+import org.eclipse.jetty.jmx.MBeanContainer;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.RequestLog;
@@ -37,8 +39,11 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
+import javax.management.remote.JMXServiceURL;
import javax.servlet.DispatcherType;
+import java.lang.management.ManagementFactory;
import java.net.BindException;
+import java.net.MalformedURLException;
import java.nio.channels.FileChannel;
import java.nio.channels.ServerSocketChannel;
import java.nio.file.Path;
@@ -138,6 +143,7 @@ public class JettyHttpServer extends AbstractServerProvider {
initializeJettyLogging();
server = new Server();
+ setupJmx(server, serverConfig);
((QueuedThreadPool)server.getThreadPool()).setMaxThreads(serverConfig.maxWorkerThreads());
Map<Path, FileChannel> keyStoreChannels = getKeyStoreFileChannels(osgiFramework.bundleContext());
@@ -193,6 +199,27 @@ public class JettyHttpServer extends AbstractServerProvider {
}
}
+ private static void setupJmx(Server server, ServerConfig serverConfig) {
+ if (serverConfig.jmx().enabled()) {
+ System.setProperty("java.rmi.server.hostname", "localhost");
+ server.addBean(
+ new MBeanContainer(ManagementFactory.getPlatformMBeanServer()));
+ server.addBean(
+ new ConnectorServer(
+ createJmxLoopbackOnlyServiceUrl(serverConfig.jmx().listenPort()),
+ "org.eclipse.jetty.jmx:name=rmiconnectorserver"));
+ }
+ }
+
+ private static JMXServiceURL createJmxLoopbackOnlyServiceUrl(int port) {
+ try {
+ return new JMXServiceURL(
+ "rmi", "localhost", port, "/jndi/rmi://localhost:" + port + "/jmxrmi");
+ } catch (MalformedURLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
private HandlerCollection getHandlerCollection(
ServerConfig serverConfig,
ServletPathsConfig servletPathsConfig,
diff --git a/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.server.def b/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.server.def
index 01206869862..006a6726a90 100644
--- a/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.server.def
+++ b/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.server.def
@@ -26,3 +26,9 @@ filter[].binding string
# Max number of threads in pool
maxWorkerThreads int default = 200
+
+# Enable embedded JMX server. Note: only accessible through the loopback interface.
+jmx.enabled bool default = false
+
+# Listen port for the JMX server.
+jmx.listenPort int default = 1099