feat: setup code attributes in Elixir macros#808
Conversation
| @doc false | ||
| @spec merge_start_opts(OpenTelemetry.Span.start_opts(), OpenTelemetry.attributes_map()) :: | ||
| OpenTelemetry.Span.start_opts() | ||
| def merge_start_opts(start_opts, builtin_attributes) do |
There was a problem hiding this comment.
I left this public but undocumented. Not sure if we want to document and make it part of the public API
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #808 +/- ##
==========================================
+ Coverage 17.32% 18.45% +1.13%
==========================================
Files 24 25 +1
Lines 710 726 +16
==========================================
+ Hits 123 134 +11
- Misses 587 592 +5
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
Sorry, I missed that there was a new PR. I'll get this reviewed soon. |
| @@ -0,0 +1,74 @@ | |||
| defmodule OpenTelemetry.Attributes do | |||
There was a problem hiding this comment.
There is an otel_attributes module that something named OpenTelemetry.Attributes should be the Elixir equivalent of. While that isn't needed I think this should be named different anyway. Maybe CodeAttributes?
There was a problem hiding this comment.
Good point. I can update that.
|
I'm still torn on if this needs a configuration option. @bryannaegele thoughts? I don't like the idea of having to check an option everytime a span is made, but not sure people wouldn't prefer to be able to turn this off for some reason. Nothing else adds attributes to your spans automatically right now, right? I suppose we could make it optional later if anyone actually cares. |
|
Let me see if I can pull some examples from other ecosystems and see what they do 👀 |
|
@btkostner thanks! |
|
Oh and last I checked, I think months ago, no one else implemented these attributes at all :) |
This replaces #550. It adds code attributes to all Elixir macro calls. This information is gathered at compile time, and then merged with the start opt attributes at runtime. I created a new public function to format these attributes in case down the line we want to format them differently (like removing the "Elixir" prefix from namespace) and in case other libraries need them while not using the macros.
The end result is you get these attributes for the Elixir
Tracermacros:code.filepath,code.function,code.lineno,code.namespace.