Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Khanayan123/implement span events #4386

Merged
merged 19 commits into from
Jun 10, 2024
Merged

Conversation

khanayan123
Copy link
Collaborator

@khanayan123 khanayan123 commented Jun 6, 2024

What does this PR do?

implements otel span events & recordException api as according to the RFC

Motivation

adding support for otel addEvent and recordException api

Notes

Tested against span events and recordException system tests on this branch
DataDog/system-tests#2539

There is a hack implemented in the tagger and formatter to ensure that the setting of error tags from the recordException api does not influence the setting of the trace.error bit

@khanayan123 khanayan123 force-pushed the khanayan123/implement-span-events branch from eb763c5 to 14b83e0 Compare June 6, 2024 16:37
Copy link

github-actions bot commented Jun 6, 2024

Overall package size

Self size: 6.65 MB
Deduped: 61.91 MB
No deduping: 62.19 MB

Dependency sizes

name version self size total size
@datadog/native-appsec 8.0.1 15.59 MB 15.6 MB
@datadog/native-iast-taint-tracking 2.1.0 14.91 MB 14.92 MB
@datadog/pprof 5.3.0 9.85 MB 10.22 MB
protobufjs 7.2.5 2.77 MB 6.56 MB
@datadog/native-iast-rewriter 2.3.1 2.15 MB 2.24 MB
@opentelemetry/core 1.14.0 872.87 kB 1.47 MB
@datadog/native-metrics 2.0.0 898.77 kB 1.3 MB
@opentelemetry/api 1.8.0 1.21 MB 1.21 MB
import-in-the-middle 1.7.4 70.19 kB 739.86 kB
msgpack-lite 0.1.26 201.16 kB 281.59 kB
opentracing 0.14.7 194.81 kB 194.81 kB
semver 7.5.4 93.4 kB 123.8 kB
pprof-format 2.1.0 111.69 kB 111.69 kB
@datadog/sketches-js 2.1.0 109.9 kB 109.9 kB
lodash.sortby 4.7.0 75.76 kB 75.76 kB
lru-cache 7.14.0 74.95 kB 74.95 kB
ignore 5.2.4 51.22 kB 51.22 kB
int64-buffer 0.1.10 49.18 kB 49.18 kB
shell-quote 1.8.1 44.96 kB 44.96 kB
istanbul-lib-coverage 3.2.0 29.34 kB 29.34 kB
tlhunter-sorted-set 0.1.0 24.94 kB 24.94 kB
limiter 1.1.5 23.17 kB 23.17 kB
dc-polyfill 0.1.4 23.1 kB 23.1 kB
retry 0.13.1 18.85 kB 18.85 kB
jest-docblock 29.7.0 8.99 kB 12.76 kB
crypto-randomuuid 1.0.0 11.18 kB 11.18 kB
path-to-regexp 0.1.7 6.78 kB 6.78 kB
koalas 1.0.2 6.47 kB 6.47 kB
module-details-from-path 1.0.3 4.47 kB 4.47 kB

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@pr-commenter
Copy link

pr-commenter bot commented Jun 6, 2024

Benchmarks

Benchmark execution time: 2024-06-10 19:27:15

Comparing candidate commit dffe200 in PR branch khanayan123/implement-span-events with baseline commit a7413ed in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 261 metrics, 5 unstable metrics.

@khanayan123 khanayan123 force-pushed the khanayan123/implement-span-events branch from 0e41fac to a947a09 Compare June 7, 2024 22:19
@khanayan123 khanayan123 marked this pull request as ready for review June 7, 2024 22:26
@khanayan123 khanayan123 requested a review from a team as a code owner June 7, 2024 22:26
@khanayan123 khanayan123 marked this pull request as draft June 10, 2024 13:42

const { _tags } = span._ddSpan.context()
expect(_tags).to.have.property(ERROR_TYPE, error.name)
expect(_tags).to.have.property(ERROR_TYPE, 'otel.recordException:' + error.name)
Copy link

@zacharycmontoya zacharycmontoya Jun 10, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This workaround is kinda funky. If the temporary workarounds aren't great, I think it would be OK for now if the recordException API only creates the span event and doesn't update the error tracking tags

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah it is a little funky, i updated the code to instead hack the tagger and the formatter rather then adding an identifier to the error_type property

Copy link

@zacharycmontoya zacharycmontoya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From the API side, I think this looks good. I made a note about the error tracking tags in case it's too cumbersome to implement immediately

@khanayan123 khanayan123 force-pushed the khanayan123/implement-span-events branch from dd02feb to 81c43a3 Compare June 10, 2024 17:21
@khanayan123 khanayan123 marked this pull request as ready for review June 10, 2024 17:21
Copy link

codecov bot commented Jun 10, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 93.18%. Comparing base (02dc5ce) to head (dffe200).
Report is 7 commits behind head on master.

Additional details and impacted files
@@             Coverage Diff             @@
##           master    #4386       +/-   ##
===========================================
+ Coverage   69.19%   93.18%   +23.99%     
===========================================
  Files           1       98       +97     
  Lines         198     3067     +2869     
  Branches       33       33               
===========================================
+ Hits          137     2858     +2721     
- Misses         61      209      +148     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@@ -348,12 +348,24 @@ describe('OTel Span', () => {
}

const error = new TestError()
span.recordException(error)
const datenow = Date.now()
span.recordException(error, datenow)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be tested to also work without the second parameter.

Qard
Qard previously approved these changes Jun 10, 2024
Copy link
Contributor

@Qard Qard left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor nit, but otherwise LGTM. 👍🏻

const events = []
if (span._events) {
for (const event of span._events) {
const formattedEvent = {}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Creating an object with no keys and then immediately mutating it like this is not recommended. Each modification creates a new hidden class with a new object shape whereas if you include all the keys, even if they are undefined initially, will produce a single shape and so will be faster. I would build the object in a single statement instead.

@khanayan123 khanayan123 merged commit 2db2ea5 into master Jun 10, 2024
133 checks passed
@khanayan123 khanayan123 deleted the khanayan123/implement-span-events branch June 10, 2024 19:53
khanayan123 added a commit that referenced this pull request Jun 10, 2024
* implement span events and record exception api
khanayan123 added a commit that referenced this pull request Jun 10, 2024
* implement span events and record exception api
This was referenced Jun 10, 2024
khanayan123 added a commit that referenced this pull request Jun 10, 2024
* implement span events and record exception api
khanayan123 added a commit that referenced this pull request Jun 10, 2024
* implement span events and record exception api
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants