PServiceCallInstrumentation.java
- package net.morimekta.providence;
- import javax.annotation.Nonnull;
- import javax.annotation.Nullable;
- import java.util.concurrent.TimeUnit;
- /**
- * Interface handling the instrumentation of service calls.
- */
- @FunctionalInterface
- public interface PServiceCallInstrumentation {
- /**
- * After each service call this method is called with the duration, call and
- * response objects. Exceptions from the call is ignored, and will not affect
- * the response in any way.
- * <p>
- * Note that the timing may not include the whole stack time since receiving
- * the first packet, that is dependent on the specific implementation and the
- * limitations there. E.g. it does not include the time receiving the first
- * HTTP packet with the headers, or waiting for free worker threads when using
- * <code>ProvidenceServlet</code>.
- *
- * @param duration The duration of handling the service call in milliseconds,
- * including receiving and sending it.
- * @param call The call triggered.
- * @param reply The reply returned.
- */
- void onComplete(double duration,
- @Nullable PServiceCall<?> call,
- @Nullable PServiceCall<?> reply);
- /**
- * Called when the service call failed in the transport layer itself with something
- * not related to the actual service call. The attempted call will be provided if
- * known. When this method is called, then some part of the service call did not
- * complete either inward (e.g. invalid call definition), or outward (e.g. network
- * errors).
- *
- * @param e The exception thrown.
- * @param duration The duration of handling the service call in milliseconds,
- * including receiving and sending it.
- * @param call The service call.
- * @param reply The service reply.
- */
- default void onTransportException(@Nonnull Exception e,
- double duration,
- @Nullable PServiceCall<?> call,
- @Nullable PServiceCall<?> reply) {
- // Ignored
- }
- /**
- * A simple NO-OP instrumentation instance.
- */
- PServiceCallInstrumentation NOOP = (duration, call, reply) -> {};
- /**
- * Handy constant for calculating MS duration.
- */
- long NS_IN_MILLIS = TimeUnit.MILLISECONDS.toNanos(1);
- }