001package io.prometheus.client.examples.guice; 002 003import com.google.inject.Inject; 004import com.google.inject.Singleton; 005import io.prometheus.client.Prometheus; 006import io.prometheus.client.examples.guice.servlet.BarServlet; 007import io.prometheus.client.examples.guice.servlet.FooServlet; 008import io.prometheus.client.utility.servlet.MetricsServlet; 009import org.eclipse.jetty.servlet.ServletContextHandler; 010import org.eclipse.jetty.servlet.ServletHolder; 011 012import java.util.Set; 013 014 015/** 016 * <p>An example encapsulation for a full end-to-end server.</p> 017 */ 018@Singleton 019public class Server { 020 private final org.eclipse.jetty.server.Server server; 021 private final FooServlet foo; 022 private final BarServlet bar; 023 private final Set<Prometheus.ExpositionHook> hooks; 024 025 @Inject 026 public Server(org.eclipse.jetty.server.Server server, final FooServlet foo, 027 final BarServlet bar, final Set<Prometheus.ExpositionHook> hooks) { 028 this.server = server; 029 this.foo = foo; 030 this.bar = bar; 031 this.hooks = hooks; 032 } 033 034 /** 035 * <p> 036 * We are optionally demonstrating the ability to dynamically add extra {@link 037 * io.prometheus.client.Prometheus.ExpositionHook} via Guice. It is possible to add 038 * registrations in static blocks, but here we are using Guice's {@link 039 * com.google.inject.multibindings.Multibinder} capability to provision some hooks. 040 *</p> 041 */ 042 public void configure() { 043 for (final Prometheus.ExpositionHook hook : hooks) { 044 Prometheus.defaultAddPreexpositionHook(hook); 045 } 046 047 Prometheus.defaultInitialize(); 048 049 final ServletContextHandler context = new ServletContextHandler(); 050 context.setContextPath("/"); 051 server.setHandler(context); 052 context.addServlet(new ServletHolder(foo), "/foo"); 053 context.addServlet(new ServletHolder(bar), "/bar"); 054 context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics"); 055 } 056 057 public void run() { 058 try { 059 server.start(); // Throws Exception — really? 060 server.join(); 061 } catch (final Exception e) { 062 throw new RuntimeException(e); 063 } 064 } 065}