Ejemplo n.º 1
0
    def create_trace_id(logger: Optional['ipapp.app.Logger']) -> str:
        if not logger:
            return azu.generate_random_128bit_string()
        zipkin_adapter = logger.adapters.get(logger.ADAPTER_ZIPKIN)
        if not zipkin_adapter:
            return azu.generate_random_128bit_string()

        adapter_config = zipkin_adapter.cfg
        if adapter_config.use_64bit_trace_id:  # type: ignore
            trace_id = azu.generate_random_64bit_string()
        else:
            trace_id = azu.generate_random_128bit_string()
        return trace_id
Ejemplo n.º 2
0
def test_generate_random_128bit_string(rand):
    rand.return_value = b'17133d482ba4f60517133d482ba4f605'
    random_string = utils.generate_random_128bit_string()
    assert random_string == '17133d482ba4f60517133d482ba4f605'
    # This acts as a contract test of sorts. This should return a str
    # in both py2 and py3. IOW, no unicode objects.
    assert isinstance(random_string, str)
Ejemplo n.º 3
0
    def from_headers(
        cls,
        headers: Optional[Mapping],
        app: Optional['ipapp.app.BaseApplication'] = None,
    ) -> 'Span':
        if headers is not None:
            headers = {k.lower(): v for k, v in headers.items()}
        else:
            headers = {}

        sampled = azh.parse_sampled_header(headers)

        if azh.TRACE_ID_HEADER.lower() not in headers:
            span = cls.new()
        else:
            trace_id = headers.get(azh.TRACE_ID_HEADER.lower())
            if not trace_id:
                trace_id = azu.generate_random_128bit_string()
            if app is None:
                app = misc.ctx_app_get()
                if app is None:  # pragma: no cover
                    raise UserWarning
            span = cls(
                logger=app.logger,
                trace_id=trace_id,
                id=azu.generate_random_64bit_string(),
                parent_id=headers.get(azh.SPAN_ID_HEADER.lower()),
            )

        if sampled is not None and not sampled:
            span.skip()

        return span
Ejemplo n.º 4
0
def test_generate_random_128bit_string(rand: mock.Mock, mock_time: mock.Mock) -> None:
    rand.return_value = 0x2BA4F60517133D482BA4F605
    mock_time.return_value = float(0x17133D48)
    random_string = utils.generate_random_128bit_string()
    assert random_string == "17133d482ba4f60517133d482ba4f605"
    rand.assert_called_once_with(96)  # 96 bits
    # This acts as a contract test of sorts. This should return a str
    # in both py2 and py3. IOW, no unicode objects.
    assert isinstance(random_string, str)
Ejemplo n.º 5
0
 def new(
     cls,
     name: Optional[str] = None,
     kind: Optional[str] = None,
     app: Optional['ipapp.app.BaseApplication'] = None,
 ) -> 'Span':
     if app is None:
         app = misc.ctx_app_get()
         if app is None:  # pragma: no cover
             raise UserWarning
     span = cls(
         logger=app.logger,
         trace_id=azu.generate_random_128bit_string(),
         id=azu.generate_random_64bit_string(),
     )
     if name is not None:
         span.name = name
     if kind:
         span.kind = kind
     return span