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)
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
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
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)
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)
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)
def __init__(self, tracer=None, host_port=None): self._tracer = tracer self.host_port = host_port self._propagator = binary_format.BinaryFormatPropagator()