def test_no_propagators(self):
        propagator = CompositePropagator([])
        new_carrier = {}
        propagator.inject(new_carrier)
        self.assertEqual(new_carrier, {})

        context = propagator.extract(carrier=new_carrier,
                                     context={},
                                     getter=get_as_list)
        self.assertEqual(context, {})
    def test_single_propagator(self):
        propagator = CompositePropagator([self.mock_propagator_0])

        new_carrier = {}
        propagator.inject(new_carrier)
        self.assertEqual(new_carrier, {"mock-0": "data"})

        context = propagator.extract(carrier=new_carrier,
                                     context={},
                                     getter=get_as_list)
        self.assertEqual(context, {"mock-0": "context"})
    def test_multiple_propagators_same_key(self):
        # test that when multiple propagators extract/inject the same
        # key, the later propagator values are extracted/injected
        propagator = CompositePropagator(
            [self.mock_propagator_0, self.mock_propagator_2])

        new_carrier = {}
        propagator.inject(new_carrier)
        self.assertEqual(new_carrier, {"mock-0": "data2"})

        context = propagator.extract(carrier=new_carrier,
                                     context={},
                                     getter=get_as_list)
        self.assertEqual(context, {"mock-0": "context2"})
    def test_fields(self):
        propagator = CompositePropagator([
            self.mock_propagator_0,
            self.mock_propagator_1,
            self.mock_propagator_2,
        ])

        mock_setter = Mock()

        propagator.inject({}, setter=mock_setter)

        inject_fields = set()

        for mock_call in mock_setter.mock_calls:
            inject_fields.add(mock_call[1][1])

        self.assertEqual(inject_fields, propagator.fields)
Example #5
0
    def init_propagation(self) -> None:
        '''Initialize requested context propagation protocols.'''
        propagator_list = []
        for prop_format in self._config.agent_config.propagation_formats:
            if prop_format == config_pb2.PropagationFormat.TRACECONTEXT:
                from opentelemetry.trace.propagation.tracecontext \
                  import TraceContextTextMapPropagator # pylint: disable=C0415
                propagator_list += [TraceContextTextMapPropagator()]
                logger.debug('Adding TRACECONTEXT trace propagator to list.')
            if prop_format == config_pb2.PropagationFormat.B3:
                from opentelemetry.propagators.b3 import B3MultiFormat  # pylint: disable=C0415
                propagator_list += [B3MultiFormat()]
                logger.debug('Adding B3 trace propagator to list.')

        if len(propagator_list) == 0:
            logger.debug('No propagators have been initialized.')

        logger.debug('propagator_list: %s', str(propagator_list))
        from opentelemetry.propagate import set_global_textmap  # pylint: disable=C0415
        from opentelemetry.propagators.composite import CompositePropagator  # pylint: disable=C0415
        composite_propagators = CompositePropagator(propagator_list)
        set_global_textmap(composite_propagators)
Example #6
0
trace.get_tracer_provider().add_span_processor(
    DatadogExportSpanProcessor(
        DatadogSpanExporter(
            agent_url="http://*****:*****@app.route("/server_request")
def server_request():
    param = request.args.get("param")
    with tracer.start_as_current_span("server-inner"):
        if param == "error":
            raise ValueError("forced server error")
        return "served: {}".format(param)