ac8743269c
Actually removes a bunch of code to manage the JMX connector, since as of jdk8u102, the standard jmx connector answers to property setting bind address -> can restrict access. Note that the RMI connector will now (as is jdk normal) _bind_ to 0.0.0.0, but it will not answer non-local requests if "remote" is not enabled. This is the default jdk behaviour. In any case, we rely on setting the appropriate properties instead, and also allow pass-through of -D flags to java, which in turn means those who wish can turn on both auth and ssl, set key/trust stores etc etc. Message-Id: <1485357178-20714-1-git-send-email-calle@scylladb.com>
63 lines
2.4 KiB
Java
63 lines
2.4 KiB
Java
/*
|
|
* Copyright 2015 Cloudius Systems
|
|
*/
|
|
package com.scylladb.jmx.main;
|
|
|
|
import static java.lang.management.ManagementFactory.getPlatformMBeanServer;
|
|
import static java.util.Arrays.asList;
|
|
|
|
import java.lang.reflect.Constructor;
|
|
|
|
import javax.management.MBeanServer;
|
|
|
|
import org.apache.cassandra.db.commitlog.CommitLog;
|
|
import org.apache.cassandra.db.compaction.CompactionManager;
|
|
import org.apache.cassandra.gms.FailureDetector;
|
|
import org.apache.cassandra.gms.Gossiper;
|
|
import org.apache.cassandra.locator.EndpointSnitchInfo;
|
|
import org.apache.cassandra.net.MessagingService;
|
|
import org.apache.cassandra.service.CacheService;
|
|
import org.apache.cassandra.service.GCInspector;
|
|
import org.apache.cassandra.service.StorageProxy;
|
|
import org.apache.cassandra.service.StorageService;
|
|
import org.apache.cassandra.streaming.StreamManager;
|
|
|
|
import com.scylladb.jmx.api.APIClient;
|
|
import com.scylladb.jmx.api.APIConfig;
|
|
import com.scylladb.jmx.metrics.APIMBean;
|
|
|
|
public class Main {
|
|
// todo: command line options. Make us an agent class (also)
|
|
private static final APIConfig config = new APIConfig();
|
|
public static final APIClient client = new APIClient(config);
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
System.out.println("Connecting to " + config.getBaseUrl());
|
|
System.out.println("Starting the JMX server");
|
|
|
|
MBeanServer server = getPlatformMBeanServer();
|
|
for (Class<? extends APIMBean> clazz : asList(StorageService.class, StorageProxy.class, MessagingService.class,
|
|
CommitLog.class, Gossiper.class, EndpointSnitchInfo.class, FailureDetector.class, CacheService.class,
|
|
CompactionManager.class, GCInspector.class, StreamManager.class)) {
|
|
Constructor<? extends APIMBean> c = clazz.getDeclaredConstructor(APIClient.class);
|
|
APIMBean m = c.newInstance(client);
|
|
server.registerMBean(m, null);
|
|
}
|
|
|
|
try {
|
|
// forces check for dynamically created mbeans
|
|
server.queryNames(null, null);
|
|
} catch (IllegalStateException e) {
|
|
// ignore this. Just means we started before scylla.
|
|
}
|
|
|
|
String jmxPort = System.getProperty("com.sun.management.jmxremote.port");
|
|
System.out.println("JMX is enabled to receive remote connections on port: " + jmxPort);
|
|
|
|
for (;;) {
|
|
Thread.sleep(Long.MAX_VALUE);
|
|
}
|
|
}
|
|
|
|
}
|