All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.helidon.tracing.jersey.client.internal.TracingContext Maven / Gradle / Ivy

Go to download

Support for propagation of tracing information when using Jersey Client. This library can be used with Helidon-SE. When used with helidon-microprofile-tracing, automated propagation of tracing context is done, there is no need to configure the client or request in any way.

The newest version!
/*
 * Copyright (c) 2019, 2022 Oracle and/or its affiliates.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.helidon.tracing.jersey.client.internal;

import java.util.List;
import java.util.Map;

import io.helidon.tracing.SpanContext;
import io.helidon.tracing.Tracer;

/**
 * Context for outbound tracing.
 * This is an internal API used from jersey integration
 * with Tracing (currently MP tracing), to share a ThreadLocal instance.
 * 

* This class is mutable, to support chains of tracing filters that create * additional spans and that need to update the parent span of this context. */ public final class TracingContext { private SpanContext parentSpan; private final Tracer tracer; private final Map> inboundHeaders; private final boolean traceClient; /** * Create a new tracing context with client tracing enabled. * * @param tracer tracer to use * @param inboundHeaders inbound header to be used for context propagation * @return a new tracing context (not associated with current thread) * @see #parentSpan(io.helidon.tracing.SpanContext) */ public static TracingContext create(Tracer tracer, Map> inboundHeaders) { return new TracingContext(tracer, inboundHeaders, true); } /** * Create a new tracing context. * * @param tracer tracer to use * @param inboundHeaders inbound header to be used for context propagation * @param clientEnabled whether client tracing should be enabled or not * @return a new tracing context (not associated with current thread) * @see #parentSpan(SpanContext) */ public static TracingContext create(Tracer tracer, Map> inboundHeaders, boolean clientEnabled) { return new TracingContext(tracer, inboundHeaders, clientEnabled); } private TracingContext(Tracer tracer, Map> inboundHeaders, boolean traceClient) { this.tracer = tracer; this.inboundHeaders = inboundHeaders; this.traceClient = traceClient; } /** * Whether client (outbound) calls should be traced. * * @return {@code true} if tracing is enabled for client calls */ public boolean traceClient() { return traceClient; } /** * Parent span to use for new spans created. * * @return span context to act as a parent for newly created spans */ public SpanContext parentSpan() { return parentSpan; } /** * Tracer to be used when creating new spans. * * @return tracer to use */ public Tracer tracer() { return tracer; } /** * Map of headers that were received by server for an inbound call, * may be used to propagate additional headers fro outbound request. * * @return map of inbound headers */ public Map> inboundHeaders() { return inboundHeaders; } /** * Update the parent span - this may be used by filters that inject * a new span between to original parent and the outbound call. * @param context new parent span context */ public void parentSpan(SpanContext context) { this.parentSpan = context; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy