001package io.prometheus.jmx;
002
003import io.prometheus.client.exporter.MetricsServlet;
004import io.prometheus.client.hotspot.DefaultExports;
005import java.lang.instrument.Instrumentation;
006import java.io.FileReader;
007import org.eclipse.jetty.server.Server;
008import org.eclipse.jetty.servlet.ServletContextHandler;
009import org.eclipse.jetty.servlet.ServletHolder;
010import org.eclipse.jetty.util.thread.QueuedThreadPool;
011
012public class JavaAgent {
013   static Server server;
014
015   public static void premain(String agentArgument, Instrumentation instrumentation) throws Exception {
016     String[] args = agentArgument.split(":");
017     if (args.length != 2) {
018       System.err.println("Usage: -javaagent:/path/to/JavaAgent.jar=<port>:<json configuration file>");
019       System.exit(1);
020     }
021     new JmxCollector(new FileReader(args[1])).register();
022     DefaultExports.initialize();
023
024     int port = Integer.parseInt(args[0]);
025     server = new Server(port);
026     QueuedThreadPool pool = new QueuedThreadPool();
027     pool.setDaemon(true);
028     server.setThreadPool(pool);
029     ServletContextHandler context = new ServletContextHandler();
030     context.setContextPath("/");
031     server.setHandler(context);
032     context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics");
033     server.start();
034   }
035}