Skip to content

Type Inconsistency: capture_span() #2283

@Masterdanielsan

Description

@Masterdanielsan

Describe the bug:

capture_span() types start as int instead of float

To Reproduce

  1. apm_client.start_transaction()
  2. t0 = time.time()
  3. do_something()
  4. t1 = time.time()
  5. dur = t1-t0
  6. do_something_else()
  7. span = elasticapm.capture_span(start=int(t0), duration=dur)
  8. with span as s: pass
  9. apm_client.end_transaction()
  10. Note that span will not fall in transaction time frame correctly.

Environment (please complete the following information)

  • OS: mac
  • Python version: 3.12.10
  • Framework and version: FastApi 0.111.1
  • APM Server version: 6.23.0
  • Agent version: N/A

Additional context

elasticapm.capture_span() takes an optional argument start, which is typed to be an int. This works well enough with a time.time() float, but if you are using mypy, you will realize that it needs an int. Only problem is that capture_span() passes start to Span(BaseSpan), which calls super().__init__() which initializes start as a float, passing it through time_to_perf_counter(start). This method fails miserably with an int representation of time.time().

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions