Class TracingFilter

  • All Implemented Interfaces:
    jakarta.servlet.Filter

    public class TracingFilter
    extends Object
    implements jakarta.servlet.Filter
    Tracing servlet filter. Filter can be programmatically added to ServletContext or initialized via web.xml. Following code examples show possible initialization:
     {
         @code
         TracingFilter filter = new TracingFilter(tracer);
         servletContext.addFilter("tracingFilter", filter);
     }
     
    Or include filter in web.xml and:
     
      GlobalTracer.register(tracer);
      servletContext.setAttribute({@link TracingFilter#SPAN_DECORATORS}, listOfDecorators); // optional, if no present ServletFilterSpanDecorator.STANDARD_TAGS is applied
     
     
    Current server span context is accessible via ServletRequest.getAttribute(String) with name SERVER_SPAN_CONTEXT.
    Author:
    Pavol Loffay
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static String SERVER_SPAN_CONTEXT
      Used as a key of ServletRequest.setAttribute(String, Object) to inject server span context
      static String SKIP_PATTERN
      Use as a key of ServletContext.setAttribute(String, Object) to skip pattern
      static String SPAN_DECORATORS
      Use as a key of ServletContext.setAttribute(String, Object) to set span decorators
      protected io.opentracing.Tracer tracer  
    • Field Detail

      • SPAN_DECORATORS

        public static final String SPAN_DECORATORS
        Use as a key of ServletContext.setAttribute(String, Object) to set span decorators
      • SKIP_PATTERN

        public static final String SKIP_PATTERN
        Use as a key of ServletContext.setAttribute(String, Object) to skip pattern
      • SERVER_SPAN_CONTEXT

        public static final String SERVER_SPAN_CONTEXT
        Used as a key of ServletRequest.setAttribute(String, Object) to inject server span context
      • tracer

        protected io.opentracing.Tracer tracer
    • Constructor Detail

      • TracingFilter

        public TracingFilter()
        Tracer instance has to be registered with GlobalTracer.register(Tracer).
      • TracingFilter

        public TracingFilter​(io.opentracing.Tracer tracer)
        Parameters:
        tracer -
      • TracingFilter

        public TracingFilter​(io.opentracing.Tracer tracer,
                             List<ServletFilterSpanDecorator> spanDecorators,
                             Pattern skipPattern)
        Parameters:
        tracer - tracer
        spanDecorators - decorators
        skipPattern - null or pattern to exclude certain paths from tracing e.g. "/health"
    • Method Detail

      • init

        public void init​(jakarta.servlet.FilterConfig filterConfig)
                  throws jakarta.servlet.ServletException
        Specified by:
        init in interface jakarta.servlet.Filter
        Throws:
        jakarta.servlet.ServletException
      • doFilter

        public void doFilter​(jakarta.servlet.ServletRequest servletRequest,
                             jakarta.servlet.ServletResponse servletResponse,
                             jakarta.servlet.FilterChain chain)
                      throws IOException,
                             jakarta.servlet.ServletException
        Specified by:
        doFilter in interface jakarta.servlet.Filter
        Throws:
        IOException
        jakarta.servlet.ServletException
      • destroy

        public void destroy()
        Specified by:
        destroy in interface jakarta.servlet.Filter
      • isTraced

        protected boolean isTraced​(jakarta.servlet.http.HttpServletRequest httpServletRequest,
                                   jakarta.servlet.http.HttpServletResponse httpServletResponse)
        It checks whether a request should be traced or not.
        Parameters:
        httpServletRequest - request
        httpServletResponse - response
        Returns:
        whether request should be traced or not
      • serverSpanContext

        public static io.opentracing.SpanContext serverSpanContext​(jakarta.servlet.ServletRequest servletRequest)
        Get context of server span.
        Parameters:
        servletRequest - request
        Returns:
        server span context