@@ -31,6 +31,100 @@ compile 'io.opencensus:opencensus-api:0.19.0'
3131compile 'io.opencensus:opencensus-contrib-http-servlet:0.19.0'
3232```
3333
34+ ## Instrumenting HTTP Servlets
35+
36+ Users can instrument Http Servlets by simply adding OcHttpServletFilter.class to your servlet filter.
37+
38+ Below is an example of how a servlet is instrumented.
39+
40+ ``` java
41+
42+ import io.opencensus.contrib.http.servlet.OcHttpServletFilter ;
43+ import io.opencensus.contrib.http.util.HttpViews ;
44+ import io.opencensus.exporter.stats.prometheus.PrometheusStatsCollector ;
45+ import io.opencensus.exporter.trace.logging.LoggingTraceExporter ;
46+ import io.prometheus.client.exporter.HTTPServer ;
47+ import java.io.IOException ;
48+ import java.io.PrintWriter ;
49+ import java.util.EnumSet ;
50+ import javax.servlet.DispatcherType ;
51+ import javax.servlet.ServletException ;
52+ import javax.servlet.http.HttpServlet ;
53+ import javax.servlet.http.HttpServletRequest ;
54+ import javax.servlet.http.HttpServletResponse ;
55+ import org.eclipse.jetty.server.Request ;
56+ import org.eclipse.jetty.server.Server ;
57+ import org.eclipse.jetty.server.handler.AbstractHandler ;
58+ import org.eclipse.jetty.servlet.ServletContextHandler ;
59+ import org.eclipse.jetty.servlet.ServletHandler ;
60+
61+ public class HelloWorldServer extends AbstractHandler {
62+
63+ public static class HelloServlet extends HttpServlet {
64+ private static final long serialVersionUID = 1L ;
65+
66+ @Override
67+ protected void doGet (HttpServletRequest request , HttpServletResponse response )
68+ throws ServletException , IOException {
69+ PrintWriter pout = response. getWriter();
70+
71+ pout. print(" <html><body><h3>Hello Servlet Get</h3></body></html>" );
72+ return ;
73+ }
74+
75+ @Override
76+ protected void doPost (HttpServletRequest request , HttpServletResponse response )
77+ throws ServletException , IOException {
78+
79+ PrintWriter pout = response. getWriter();
80+ pout. print(" <html><body><h3>Hello Servlet Post</h3></body></html>" );
81+ return ;
82+ }
83+ }
84+
85+ public void handle (
86+ String target , Request baseRequest , HttpServletRequest request , HttpServletResponse response )
87+ throws IOException , ServletException {
88+ response. setContentType(" text/html;charset=utf-8" );
89+ response. setStatus(HttpServletResponse . SC_OK );
90+ baseRequest. setHandled(true );
91+ response. getWriter(). println(" <h1>Hello World. default handle</h1>" );
92+ }
93+
94+ private static void initStatsExporter () throws IOException {
95+ HttpViews . registerAllServerViews();
96+
97+ // Register stats exporter to a desired backend.
98+ PrometheusStatsCollector . createAndRegister();
99+ HTTPServer prometheusServer = new HTTPServer (9090 , true );
100+ }
101+
102+ private static void initTracing () {
103+ // Register trace exporter to a desired backend.
104+ LoggingTraceExporter . register();
105+ }
106+
107+ public static void main (String [] args ) throws Exception {
108+ initTracing();
109+ initStatsExporter();
110+ ServletContextHandler context = new ServletContextHandler (ServletContextHandler . SESSIONS );
111+ context. setContextPath(" /" );
112+
113+ Server server = new Server (8080 );
114+ ServletHandler handler = new ServletHandler ();
115+ server. setHandler(handler);
116+
117+ // Add OcHttpServletFilter to enable tracing and monitoring stats.
118+ handler. addFilterWithMapping(
119+ OcHttpServletFilter . class, " /*" , EnumSet . of(DispatcherType . REQUEST ));
120+ handler. addServletWithMapping(HelloServlet . class, " /*" );
121+
122+ server. start();
123+ server. join();
124+ }
125+ }
126+ ```
127+
34128[ travis-image ] : https://travis-ci.org/census-instrumentation/opencensus-java.svg?branch=master
35129[ travis-url ] : https://travis-ci.org/census-instrumentation/opencensus-java
36130[ appveyor-image ] : https://ci.appveyor.com/api/projects/status/hxthmpkxar4jq4be/branch/master?svg=true
0 commit comments