001package io.prometheus.cloudwatch; 002 003import io.prometheus.client.hotspot.DefaultExports; 004import io.prometheus.client.servlet.jakarta.exporter.MetricsServlet; 005import java.io.FileReader; 006import java.util.EnumSet; 007import org.eclipse.jetty.http.HttpMethod; 008import org.eclipse.jetty.server.HttpConfiguration; 009import org.eclipse.jetty.server.HttpConnectionFactory; 010import org.eclipse.jetty.server.Server; 011import org.eclipse.jetty.server.ServerConnector; 012import org.eclipse.jetty.servlet.ServletContextHandler; 013import org.eclipse.jetty.servlet.ServletHolder; 014 015public class WebServer { 016 017 public static String configFilePath; 018 019 public static void main(String[] args) throws Exception { 020 if (args.length < 2) { 021 System.err.println("Usage: WebServer <port> <yml configuration file>"); 022 System.exit(1); 023 } 024 025 configFilePath = args[1]; 026 CloudWatchCollector collector = null; 027 new BuildInfoCollector().register(); 028 try (FileReader reader = new FileReader(configFilePath); ) { 029 collector = new CloudWatchCollector(reader).register(); 030 } 031 DefaultExports.initialize(); 032 033 ReloadSignalHandler.start(collector); 034 035 int port = Integer.parseInt(args[0]); 036 Server server = new Server(); 037 HttpConfiguration httpConfig = new HttpConfiguration(); 038 httpConfig.addCustomizer(new DisallowHttpMethods(EnumSet.of(HttpMethod.TRACE))); 039 ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory(httpConfig)); 040 connector.setPort(port); 041 server.addConnector(connector); 042 043 ServletContextHandler context = new ServletContextHandler(); 044 context.setContextPath("/"); 045 server.setHandler(context); 046 context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics"); 047 context.addServlet(new ServletHolder(new DynamicReloadServlet(collector)), "/-/reload"); 048 context.addServlet(new ServletHolder(new HealthServlet()), "/-/healthy"); 049 context.addServlet(new ServletHolder(new HealthServlet()), "/-/ready"); 050 context.addServlet(new ServletHolder(new HomePageServlet()), "/"); 051 server.start(); 052 server.join(); 053 } 054}