import com.codahale.metrics.MetricRegistry;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.dropwizard.DropwizardExports;
import io.prometheus.client.exporter.MetricsServlet;
import io.prometheus.client.hotspot.DefaultExports;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
public class PrometheusReporter {
//创建Server,加载Connectors,加载handlers,加载Servlets等,启动服务start,最后加入服务器join。
//webappcontext 继承于servletContextHandler,servletContextHandler继承于contexthandler
//server 用于存储handler,handler分很多种,此处是servlet 运行在servletcontext 中,servlet 的工作是由handler来指挥和安排,handler是听从于外界的web 请求
//当外界web 请求过来时,首先接到这个请求的是handler,contexthandler 会根据请求的path找到and交由内部对应的servlet 来处理
//serlvet的存在和创建(即需要以下步骤完成的情况下才可能存在):包括创建server ,设置server端口,创建context ,设置contextpath,设置contexthandler
//添加servlet :需serlvet的存在和创建下可以操作的
public static void start( MetricRegistry registry ) throws Exception {
// Hook the Dropwizard registry into the Prometheus registry
// via the DropwizardExports collector.
//启动汽车前,先把汽车的监控连接到对的监控视屏上,方便监控视频可以采集到汽车的数据
CollectorRegistry.defaultRegistry.register(new DropwizardExports(registry));
// Expose Prometheus metrics.
Server server = new Server(9404);//将自己的端口设置为9094
ServletContextHandler context = new ServletContextHandler();//声明一个context
context.setContextPath("/");////设置contextPath
server.setHandler(context);//设置handler
context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics");//指定servlet和servlet匹配的url
//context.addServlet(new ServletHolder(new MetricsServlet()), "/hhh");
DefaultExports.initialize();
// Start the webserver.
server.start();
server.join();
}
}