Use device telemetry for nested client spans

Client calls inside device methods used process-level telemetry, which could give spans the wrong service identity and ignore the device's tracing configuration.

Consider this scenario: client -> Leader device -> Follower device. The client send a command to the Leader to turn on a Follower.

  • Yellow: PyTango client
  • Dark green: Leader
  • Light green: Follower

Using 10.3.1, we see the three services, but there are two client calls (yellow) coming from the Leader, when it creates and uses the DeviceProxy (6th and 11th spans):

image

Using the code in the MR, we now see all the Leader's call are dark green:

image

(Note, the differences in duration of the two tests are not significant - repeated tests show similar times for the old and new versions).

Changes:

  • Scope nested client telemetry to the active device's settings
  • Suppress spans and propagation when device telemetry is disabled
  • Preserve device scope across executor threads and greenlets
  • Handle bound device methods called without arguments
  • Remove redundant Python telemetry client identity attributes as cppTango >= 10.3.0 includes client identity in its telemetry spans
  • Update tests

Co-authored-by: Codex codex@openai.com

Merge request reports

Loading
Loading