py_zipkin/zipkin.py
def _get_current_context(self):
        """Returns the current ZipkinAttrs and generates new ones if needed.

        :returns: (report_root_timestamp, zipkin_attrs)
        :rtype: (bool, ZipkinAttrs)
        """
        # This check is technically not necessary since only root spans will have
        # sample_rate, zipkin_attrs or a transport set. But it helps making the
        # code clearer by separating the logic for a root span from the one for a
        # child span.
        if self._is_local_root_span:

            # If sample_rate is set, we need to (re)generate a trace context.
            # If zipkin_attrs (trace context) were passed in as argument there are
            # 2 possibilities:
            # is_sampled = False --> we keep the same trace_id but re-roll the dice
            #                        for is_sampled.
            # is_sampled = True  --> we don't want to stop sampling halfway through
            #                        a sampled trace, so we do nothing.
            # If no zipkin_attrs were passed in, we generate new ones and start a
            # new trace.
            if self.sample_rate is not None:

                # If this trace is not sampled, we re-roll the dice.
                if self.zipkin_attrs_override and \
                        not self.zipkin_attrs_override.is_sampled:
                    # This will be the root span of the trace, so we should
                    # set timestamp and duration.
                    return True, create_attrs_for_span(
                        sample_rate=self.sample_rate,
                        trace_id=self.zipkin_attrs_override.trace_id,
                    )

                # If zipkin_attrs_override was not passed in, we simply generate
                # new zipkin_attrs to start a new trace.
                elif not self.zipkin_attrs_override:
                    return True, create_attrs_for_span(
                        sample_rate=self.sample_rate,
                        use_128bit_trace_id=self.use_128bit_trace_id,
                    )

            if self.firehose_handler and not self.zipkin_attrs_override:
                # If it has gotten here, the only thing that is
                # causing a trace is the firehose. So we force a trace
                # with sample rate of 0
                return True, create_attrs_for_span(
                    sample_rate=0.0,
                    use_128bit_trace_id=self.use_128bit_trace_id,
                )

            # If we arrive here it means the sample_rate was not set while
            # zipkin_attrs_override was, so let's simply return that.
            return False, self.zipkin_attrs_override

        else:
            # Check if there's already a trace context in _context_stack.
            existing_zipkin_attrs = self.get_tracer().get_zipkin_attrs()
            # If there's an existing context, let's create new zipkin_attrs
            # with that context as parent.
            if existing_zipkin_attrs:
                return False, ZipkinAttrs(
                    trace_id=existing_zipkin_attrs.trace_id,
                    span_id=generate_random_64bit_string(),
                    parent_span_id=existing_zipkin_attrs.span_id,
                    flags=existing_zipkin_attrs.flags,
                    is_sampled=existing_zipkin_attrs.is_sampled,
                )

        return False, None
def _get_current_context(self):
        # This check is technically not necessary since only root spans will have
        # sample_rate, zipkin_attrs or a transport set. But it helps making the
        # code clearer by separating the logic for a root span from the one for a
        # child span.
        if self._is_local_root_span:

            # If sample_rate is set, we need to (re)generate a trace context.
            # If zipkin_attrs (trace context) were passed in as argument there are
            # 2 possibilities:
            # is_sampled = False --> we keep the same trace_id but re-roll the dice
            #                        for is_sampled.
            # is_sampled = True  --> we don't want to stop sampling halfway through
            #                        a sampled trace, so we do nothing.
            # If no zipkin_attrs were passed in, we generate new ones and start a
            # new trace.
            if self.sample_rate is not None:

                # If this trace is not sampled, we re-roll the dice.
                if self.zipkin_attrs_override and \
                        not self.zipkin_attrs_override.is_sampled:
                    # This will be the root span of the trace, so we should
                    # set timestamp and duration.
                    return True, create_attrs_for_span(
                        sample_rate=self.sample_rate,
                        trace_id=self.zipkin_attrs_override.trace_id,
                    )

                # If zipkin_attrs_override was not passed in, we simply generate
                # new zipkin_attrs to start a new trace.
                elif not self.zipkin_attrs_override:
                    return True, create_attrs_for_span(
                        sample_rate=self.sample_rate,
                        use_128bit_trace_id=self.use_128bit_trace_id,
                    )

            if self.firehose_handler and not self.zipkin_attrs_override:
                # If it has gotten here, the only thing that is
                # causing a trace is the firehose. So we force a trace
                # with sample rate of 0
                return True, create_attrs_for_span(
                    sample_rate=0.0,
                    use_128bit_trace_id=self.use_128bit_trace_id,
                )

            # If we arrive here it means the sample_rate was not set while
            # zipkin_attrs_override was, so let's simply return that.
            return False, self.zipkin_attrs_override

        else:
            # Check if there's already a trace context in _context_stack.
            existing_zipkin_attrs = self.get_tracer().get_zipkin_attrs()
            # If there's an existing context, let's create new zipkin_attrs
            # with that context as parent.
            if existing_zipkin_attrs:
                return False, ZipkinAttrs(
                    trace_id=existing_zipkin_attrs.trace_id,
                    span_id=generate_random_64bit_string(),
                    parent_span_id=existing_zipkin_attrs.span_id,
                    flags=existing_zipkin_attrs.flags,
                    is_sampled=existing_zipkin_attrs.is_sampled,
                )

        return False, None
def _get_current_context ( self ) : # This check is technically not necessary since only root spans will have # sample_rate, zipkin_attrs or a transport set. But it helps making the # code clearer by separating the logic for a root span from the one for a # child span. if self . _is_local_root_span : # If sample_rate is set, we need to (re)generate a trace context. # If zipkin_attrs (trace context) were passed in as argument there are # 2 possibilities: # is_sampled = False --> we keep the same trace_id but re-roll the dice #                        for is_sampled. # is_sampled = True  --> we don't want to stop sampling halfway through #                        a sampled trace, so we do nothing. # If no zipkin_attrs were passed in, we generate new ones and start a # new trace. if self . sample_rate is not None : # If this trace is not sampled, we re-roll the dice. if self . zipkin_attrs_override and not self . zipkin_attrs_override . is_sampled : # This will be the root span of the trace, so we should # set timestamp and duration. return True , create_attrs_for_span ( sample_rate = self . sample_rate , trace_id = self . zipkin_attrs_override . trace_id , ) # If zipkin_attrs_override was not passed in, we simply generate # new zipkin_attrs to start a new trace. elif not self . zipkin_attrs_override : return True , create_attrs_for_span ( sample_rate = self . sample_rate , use_128bit_trace_id = self . use_128bit_trace_id , ) if self . firehose_handler and not self . zipkin_attrs_override : # If it has gotten here, the only thing that is # causing a trace is the firehose. So we force a trace # with sample rate of 0 return True , create_attrs_for_span ( sample_rate = 0.0 , use_128bit_trace_id = self . use_128bit_trace_id , ) # If we arrive here it means the sample_rate was not set while # zipkin_attrs_override was, so let's simply return that. return False , self . zipkin_attrs_override else : # Check if there's already a trace context in _context_stack. existing_zipkin_attrs = self . get_tracer ( ) . get_zipkin_attrs ( ) # If there's an existing context, let's create new zipkin_attrs # with that context as parent. if existing_zipkin_attrs : return False , ZipkinAttrs ( trace_id = existing_zipkin_attrs . trace_id , span_id = generate_random_64bit_string ( ) , parent_span_id = existing_zipkin_attrs . span_id , flags = existing_zipkin_attrs . flags , is_sampled = existing_zipkin_attrs . is_sampled , ) return False , None
Returns the current ZipkinAttrs and generates new ones if needed.

        :returns: (report_root_timestamp, zipkin_attrs)
        :rtype: (bool, ZipkinAttrs)
Returns the current ZipkinAttrs and generates new ones if needed .