Interface RequestContext

All Superinterfaces:
RequestInfoProvider, RequestMetadata

public interface RequestContext extends RequestInfoProvider
Provides information about a request, such as the requestId, sessionId, remoteAddress and more. RequestContext is currently used as an abstraction for HTTP and SSH requests, but can easily be used for other protocols as well.
See Also:
  • Method Details

    • addCleanupCallback

      void addCleanupCallback(@Nonnull Runnable callback)
      Registers a cleanup task that is executed when the current request ends. Note that the callback will only be called for the current request.
      Parameters:
      callback - callback that should be called when the request ends
      Throws:
      IllegalStateException - if no request is active
    • addLabel

      void addLabel(@Nonnull String label)
      Adds a label to the request context that will be included in the access logs. Use this purely for diagnostic / analysis purposes.
      Parameters:
      label - the label to add
      Throws:
      IllegalStateException - if no request is active
    • getId

      @Nonnull String getId()
      Returns a highly unique (though not guaranteeably unique) request ID.

      The request ID contains:

      1. The minute of the current day
      2. The number of requests, including the current one, which have been serviced by the application since it was started
      3. The number of requests which were being processed concurrently at the time the ID was generated
      These fields are separated by an "x". The minute of the day portion resets each night, and the concurrency count rises and falls with the load on the server. The request count is monotonically increasing until the long for the counter wraps (which at 1,000 requests per second will take 252 million years).

      It is worth noting that the uniqueness period required for request IDs is 1 day, which is the period at which log files are rotated. The goal of this ID is not to be universally unique so much as it is to allow support to easily trace the logging related to a single request, within the log files.

      Returns:
      the generated request ID
      Throws:
      IllegalStateException - if no request is active
    • isActive

      boolean isActive()
      Returns:
      true if the request is in progress. false if there is no current request or the request has finished
    • getBytesRead

      long getBytesRead()
      Returns:
      the number of bytes read from the client for this request
      Since:
      4.4
    • getBytesWritten

      long getBytesWritten()
      Returns:
      the number of bytes written to the client for this request
      Since:
      4.4
    • getDuration

      @Nonnull Optional<Duration> getDuration()
      Returns:
      a Duration representing the amount of wall time taken to process this request or Optional.empty() if the duration has not been set
      Since:
      4.4
    • setBytesRead

      void setBytesRead(long bytesRead)
      Report on the number of bytes read for this request.
      Parameters:
      bytesRead - the number of bytes read
      Throws:
      IllegalStateException - if no request is active
    • setBytesWritten

      void setBytesWritten(long bytesWritten)
      Report on the number of bytes written for this request.
      Parameters:
      bytesWritten - the number of bytes written
      Throws:
      IllegalStateException - if no request is active
    • setResponseCode

      void setResponseCode(int responseCode)
      The response code of the request. HTTP(S) requests the HTTP response code is used. SSH requests the exit code of the git process is used.
      Parameters:
      responseCode - the request response code
      Throws:
      IllegalStateException - if no request is active
    • wrap

      @Nonnull <T> Callable<T> wrap(@Nonnull Callable<T> callable)
      Wraps the provided Callable so that it executes with this request context, including its full state (e.g. authenticated user, etc.).
      Parameters:
      callable - the runnable to wrap
      Returns:
      the wrapped runnable
      Since:
      7.9
    • wrap

      @Nonnull Runnable wrap(@Nonnull Runnable runnable)
      Wraps the provided Runnable so that it executes with this request context, including its full state (e.g. authenticated user, etc.).
      Parameters:
      runnable - the runnable to wrap
      Returns:
      the wrapped runnable
      Since:
      7.9