99from contextlib import contextmanager
1010from dataclasses import dataclass
1111from pathlib import Path
12+ from time import time
1213from types import TracebackType
13- from typing import TYPE_CHECKING , Any , Dict , List , Mapping , Sequence , Tuple , TypedDict , TypeVar , Union
14+ from typing import TYPE_CHECKING , Any , Callable , Dict , List , Mapping , Sequence , Tuple , TypedDict , TypeVar , Union
1415
1516from opentelemetry import context , trace as trace_api
1617from opentelemetry .sdk .resources import Resource
2223from requests import RequestException , Response
2324
2425from logfire ._internal .stack_info import is_user_code
26+ from logfire ._internal .ulid import ulid
2527
2628if TYPE_CHECKING :
2729 from packaging .version import Version
@@ -358,7 +360,11 @@ def is_asgi_send_receive_span_name(name: str) -> bool:
358360 return name .endswith ((' http send' , ' http receive' , ' websocket send' , ' websocket receive' ))
359361
360362
361- @dataclass (repr = True )
363+ def _default_ms_timestamp_generator () -> int :
364+ return int (time () * 1000 )
365+
366+
367+ @dataclass (repr = True , eq = True )
362368class SeededRandomIdGenerator (IdGenerator ):
363369 """Generate random span/trace IDs from a seed for deterministic tests.
364370
@@ -371,6 +377,8 @@ class SeededRandomIdGenerator(IdGenerator):
371377 """
372378
373379 seed : int | None = 0
380+ _ms_timestamp_generator : Callable [[], int ] = _default_ms_timestamp_generator
381+ """Private argument, do not set this directly."""
374382
375383 def __post_init__ (self ) -> None :
376384 self .random = random .Random (self .seed )
@@ -384,7 +392,7 @@ def generate_span_id(self) -> int:
384392 return span_id
385393
386394 def generate_trace_id (self ) -> int :
387- trace_id = self .random . getrandbits ( 128 )
395+ trace_id = ulid ( self .random , self . _ms_timestamp_generator )
388396 while trace_id == trace_api .INVALID_TRACE_ID : # pragma: no cover
389- trace_id = self .random . getrandbits ( 128 )
397+ trace_id = ulid ( self .random , self . _ms_timestamp_generator )
390398 return trace_id
0 commit comments