def __init__(self, tracer=None, host_port=None):
        if tracer is None:
            tracer = execution_context.get_opencensus_tracer()

        self._tracer = tracer
        self.host_port = host_port
        self._propagator = binary_format.BinaryFormatPropagator()
    def _start_server_span(self, servicer_context):
        metadata = servicer_context.invocation_metadata()
        span_context = None

        if metadata is not None:
            propagator = binary_format.BinaryFormatPropagator()
            metadata_dict = dict(metadata)
            trace_header = metadata_dict.get(oc_grpc.GRPC_TRACE_KEY)

            span_context = propagator.from_header(trace_header)

        tracer = tracer_module.Tracer(span_context=span_context,
                                      sampler=self.sampler,
                                      exporter=self.exporter)

        span = tracer.start_span(name=_get_span_name(servicer_context))

        span.span_kind = span_module.SpanKind.SERVER
        tracer.add_attribute_to_current_span(
            attribute_key=attributes_helper.COMMON_ATTRIBUTES.get(
                ATTRIBUTE_COMPONENT),
            attribute_value='grpc')

        execution_context.set_opencensus_tracer(tracer)
        execution_context.set_current_span(span)
        return span
    def test_from_header_none(self):
        binary_header = None

        propagator = binary_format.BinaryFormatPropagator()
        span_context = propagator.from_header(binary_header)

        self.assertFalse(span_context.from_header)
    def intercept_handler(self, continuation, handler_call_details):
        metadata = handler_call_details.invocation_metadata
        span_context = None

        if metadata is not None:
            propagator = binary_format.BinaryFormatPropagator()
            metadata_dict = dict(metadata)
            trace_header = metadata_dict.get(oc_grpc.GRPC_TRACE_KEY)

            span_context = propagator.from_header(trace_header)

        tracer = tracer_module.Tracer(span_context=span_context,
                                      sampler=self.sampler,
                                      exporter=self.exporter)

        with self._start_server_span(tracer):
            response = None

            try:
                response = continuation(handler_call_details)
            except Exception as e:  # pragma: NO COVER
                logging.error(e)
                tracer.add_attribute_to_current_span(
                    attributes_helper.COMMON_ATTRIBUTES.get(
                        ATTRIBUTE_ERROR_MESSAGE), str(e))
                tracer.end_span()
                raise

        return response
    def test_from_header_wrong_format(self):
        binary_header = b'\x00\x00\xa0\xb7,\xa1\\\x1aK\xd1\x89b\xd0' \
                        b'\xacY\xdc\x90\xb9\x01g)U\xf6\xf5\x01\x12'

        propagator = binary_format.BinaryFormatPropagator()
        span_context = propagator.from_header(binary_header)

        self.assertFalse(span_context.from_header)
示例#6
0
    def __call__(self, *args, **kwargs):
        kwds = kwargs.pop("kwds")

        span_context_binary = kwargs.pop("span_context_binary")
        propagator = binary_format.BinaryFormatPropagator()
        kwargs["span_context"] = propagator.from_header(span_context_binary)

        _tracer = NoopTracer() if kwargs.get("noop", False) else tracer.Tracer(**kwargs)
        execution_context.set_opencensus_tracer(_tracer)
        result = self.func(*args, **kwds)
        return result
示例#7
0
    def __call__(self, *args, **kwargs):
        kwds = kwargs.pop("kwds")

        span_context_binary = kwargs.pop("span_context_binary")
        propagator = binary_format.BinaryFormatPropagator()
        kwargs["span_context"] = propagator.from_header(span_context_binary)

        _tracer = tracer.Tracer(**kwargs)
        execution_context.set_opencensus_tracer(_tracer)
        with _tracer.span(name=threading.current_thread().name):
            result = self.func(*args, **kwds)
        execution_context.clean()
        return result
示例#8
0
    def call(self, func, *args, **kwargs):
        wrapped_func = wrap_task_func(func)
        _tracer = execution_context.get_opencensus_tracer()
        propagator = binary_format.BinaryFormatPropagator()

        wrapped_kwargs = {}
        wrapped_kwargs["span_context_binary"] = propagator.to_header(
            _tracer.span_context)
        wrapped_kwargs["kwds"] = kwargs
        wrapped_kwargs["sampler"] = _tracer.sampler
        wrapped_kwargs["exporter"] = _tracer.exporter
        wrapped_kwargs["propagator"] = _tracer.propagator

        return submit_func(self, wrapped_func, *args, **wrapped_kwargs)
示例#9
0
    def test_from_header(self):
        binary_header = b'\x00\x00\xa0\xb7,\xa1\\\x1aK\xd1\x89b\xd0\xacY\xdc' \
                        b'\x90\xb9\x01\xa0\xb7,\xa1\\\x1aK\xd1\x02\x01'

        expected_trace_id = 'a0b72ca15c1a4bd18962d0ac59dc90b9'
        expected_span_id = 'a0b72ca15c1a4bd1'
        expected_trace_option = True

        propagator = binary_format.BinaryFormatPropagator()

        span_context = propagator.from_header(binary_header)

        self.assertEqual(span_context.trace_id, expected_trace_id)
        self.assertEqual(span_context.span_id, expected_span_id)
        self.assertEqual(span_context.trace_options.enabled,
                         expected_trace_option)
示例#10
0
    def call(self, func, args=(), kwds={}, **kwargs):
        wrapped_func = wrap_task_func(func)
        _tracer = execution_context.get_opencensus_tracer()
        propagator = binary_format.BinaryFormatPropagator()

        wrapped_kwargs = {}
        wrapped_kwargs["span_context_binary"] = propagator.to_header(
            _tracer.span_context)
        wrapped_kwargs["kwds"] = kwds
        if not isinstance(_tracer, NoopTracer):
            wrapped_kwargs["sampler"] = _tracer.sampler
            wrapped_kwargs["exporter"] = _tracer.exporter
            wrapped_kwargs["propagator"] = _tracer.propagator

        return apply_async_func(self,
                                wrapped_func,
                                args=args,
                                kwds=wrapped_kwargs,
                                **kwargs)
    def test_to_header(self):
        from opencensus.trace.span_context import SpanContext

        span_context = mock.Mock(spec=SpanContext)
        trace_id = 'a0b72ca15c1a4bd18962d0ac59dc90b9'
        span_id = 7433567179112518326
        enabled = True
        span_context.trace_id = trace_id
        span_context.span_id = span_id
        span_context.enabled = enabled

        propagator = binary_format.BinaryFormatPropagator()

        binary_header = propagator.to_header(span_context)

        expected_binary_header = b'\x00\x00\xa0\xb7,\xa1\\\x1aK\xd1\x89b\xd0' \
                                 b'\xacY\xdc\x90\xb9\x01g)U\xf6\xf5\x01\x12' \
                                 b'\xb6\x02\x01'

        self.assertEqual(expected_binary_header, binary_header)
    def test_to_header_span_id_zero(self):
        from opencensus.trace.span_context import SpanContext
        from opencensus.trace.trace_options import TraceOptions

        span_context = mock.Mock(spec=SpanContext)
        trace_id = 'a0b72ca15c1a4bd18962d0ac59dc90b9'
        span_id = None
        trace_options = '1'
        span_context.trace_id = trace_id
        span_context.span_id = span_id
        span_context.trace_options = TraceOptions(trace_options)

        propagator = binary_format.BinaryFormatPropagator()

        binary_header = propagator.to_header(span_context)

        expected_binary_header = b'\x00\x00\xa0\xb7,\xa1\\\x1aK\xd1\x89b\xd0' \
                                 b'\xacY\xdc\x90\xb9\x01\x00\x00\x00\x00\x00' \
                                 b'\x00\x00\x00\x02\x01'

        self.assertEqual(expected_binary_header, binary_header)
示例#13
0
 def __init__(self, tracer=None, host_port=None):
     self._tracer = tracer
     self.host_port = host_port
     self._propagator = binary_format.BinaryFormatPropagator()