gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

context.go (2329B)


      1 // Copyright The OpenTelemetry Authors
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //     http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 package trace // import "go.opentelemetry.io/otel/trace"
     16 
     17 import "context"
     18 
     19 type traceContextKeyType int
     20 
     21 const currentSpanKey traceContextKeyType = iota
     22 
     23 // ContextWithSpan returns a copy of parent with span set as the current Span.
     24 func ContextWithSpan(parent context.Context, span Span) context.Context {
     25 	return context.WithValue(parent, currentSpanKey, span)
     26 }
     27 
     28 // ContextWithSpanContext returns a copy of parent with sc as the current
     29 // Span. The Span implementation that wraps sc is non-recording and performs
     30 // no operations other than to return sc as the SpanContext from the
     31 // SpanContext method.
     32 func ContextWithSpanContext(parent context.Context, sc SpanContext) context.Context {
     33 	return ContextWithSpan(parent, nonRecordingSpan{sc: sc})
     34 }
     35 
     36 // ContextWithRemoteSpanContext returns a copy of parent with rsc set explicly
     37 // as a remote SpanContext and as the current Span. The Span implementation
     38 // that wraps rsc is non-recording and performs no operations other than to
     39 // return rsc as the SpanContext from the SpanContext method.
     40 func ContextWithRemoteSpanContext(parent context.Context, rsc SpanContext) context.Context {
     41 	return ContextWithSpanContext(parent, rsc.WithRemote(true))
     42 }
     43 
     44 // SpanFromContext returns the current Span from ctx.
     45 //
     46 // If no Span is currently set in ctx an implementation of a Span that
     47 // performs no operations is returned.
     48 func SpanFromContext(ctx context.Context) Span {
     49 	if ctx == nil {
     50 		return noopSpan{}
     51 	}
     52 	if span, ok := ctx.Value(currentSpanKey).(Span); ok {
     53 		return span
     54 	}
     55 	return noopSpan{}
     56 }
     57 
     58 // SpanContextFromContext returns the current Span's SpanContext.
     59 func SpanContextFromContext(ctx context.Context) SpanContext {
     60 	return SpanFromContext(ctx).SpanContext()
     61 }