Source code for opencensus.trace.propagation.text_format

# Copyright 2017, OpenCensus Authors
#
# 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.

from opencensus.trace.span_context import SpanContext
from opencensus.trace.trace_options import TraceOptions

_OPENCENSUS_TRACE_PREFIX = 'opencensus-trace'
_TRACE_ID_KEY = '{}-traceid'.format(_OPENCENSUS_TRACE_PREFIX)
_SPAN_ID_KEY = '{}-spanid'.format(_OPENCENSUS_TRACE_PREFIX)
_TRACE_OPTIONS_KEY = '{}-traceoptions'.format(_OPENCENSUS_TRACE_PREFIX)

DEFAULT_TRACE_OPTIONS = '1'


[docs]class TextFormatPropagator(object): """This class provides the basic utilities for extracting the trace information from a carrier which is a dict to form a SpanContext. And generating a dict using the provided SpanContext. """
[docs] def from_carrier(self, carrier): """Generate a SpanContext object using the information in the carrier. :type carrier: dict :param carrier: The carrier which has the trace_id, span_id, options information for creating a SpanContext. :rtype: :class:`~opencensus.trace.span_context.SpanContext` :returns: SpanContext generated from the carrier. """ trace_id = None span_id = None trace_options = None for key in carrier: key = key.lower() if key == _TRACE_ID_KEY: trace_id = carrier[key] if key == _SPAN_ID_KEY: span_id = carrier[key] if key == _TRACE_OPTIONS_KEY: trace_options = bool(carrier[key]) if trace_options is None: trace_options = DEFAULT_TRACE_OPTIONS return SpanContext( trace_id=trace_id, span_id=span_id, trace_options=TraceOptions(trace_options), from_header=True)
[docs] def to_carrier(self, span_context, carrier): """Inject the SpanContext fields to carrier dict. :type span_context: :class:`~opencensus.trace.span_context.SpanContext` :param span_context: SpanContext object. :type carrier: dict :param carrier: The carrier which holds the trace_id, span_id, options information from a SpanContext. :rtype: dict :returns: The carrier which holds the span context information. """ carrier[_TRACE_ID_KEY] = str(span_context.trace_id) if span_context.span_id is not None: carrier[_SPAN_ID_KEY] = str(span_context.span_id) carrier[_TRACE_OPTIONS_KEY] = str( span_context.trace_options.trace_options_byte) return carrier