meta(changelog): Update changelog for 7.69.0 - #9009

Merged
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0
Sep 13, 2023
Merged

meta(changelog): Update changelog for 7.69.0#9009
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

@malay44 your changes will be released in 7.69.0!

mydeaand others added 30 commits September 6, 2023 13:53
This is a micro improvement, but maybe worth it as we can have a lot of
breadcrumbs. This ensures we only create a new breadcrumbs array if we
exceed the limit.
In contrast, currently we'll always create two copies of the breadcrumbs
for each added breadcrumb (first for the array spread, then we copy it
through the slice), even if we don't really need to do this.
[Gitflow] Merge master into develop
This PR removes the `EdgeClient` and duplicate `eventbuilder` functions.
So the logs are properly hidden from breadcrumbs etc.
Making it easier to potentially change this e.g. for POTEL.
As per the new changes in RFC 101 in
getsentry/rfcs#113, update the span performance
API names.
- `startActiveSpan` -> `startSpan`
- `startSpan` -> `startInactiveSpan`
https://github.com/getsentry/rfcs/blob/main/text/0101-revamping-the-sdk-performance-api.md
`startActiveSpan` is deprecated, while `startInactiveSpan` is being
introduced. The breaking change is that `startSpan` is being changed,
but considering that basically no-one is using the `startSpan` API, we
should be fine to break here for correctness reasons. Better break now
than to have everyone refactor their code in v8.
Replace ts-ignore with ts-expect-error
This pollutes the console when running the linter, hopefully also speeds
up CI a little bit.
#8988)
There was some confusion about this because the migration doc in this
repo conflicts with the `highly experimental` tag we put on the README.
Also added Node 18+ requirements.
We can change this in migr8 for a future release, but for now let's
merge this in to reduce confusion and unblock our users.
Enforce that `@ts-expect-error` is used instead of `@ts-ignore`. This is
done by updating the `typescript-eslint/ban-ts-comment` rule.
https://typescript-eslint.io/rules/ban-ts-comment/
#8966)
This is a fork of
#8937, with only the
"uncontroversial" stuff, mainly fixing that we only create HTTP
breadcrumbs for _outgoing_ requests.
In addition, this also migrates to using `requestHook` and
`responseHook` instead of `applyCustomAttributesOnSpan`. We may have to
revisit this later, but these hooks seem to have a better context
awareness (=they are called in a more reasonable OTEL context, which
gives the callbacks there better access to scope data etc). However that
means we cannot (easily) pass both request and response as breadcrumb
hints - not sure how important that is to us... For now I'd say that's
OK.
Note that also `requestHook` is only called when the request finishes,
so we already have all the response OTEL span attributes correctly set
there.
This PR changes the behavior when a session is expired to fully stop &
restart the replay.
This means we just re-sample based on sample rates and start a
completely new session in that case.
…ded (#8938)
I noticed that in `handleRecordingEmit`, due to the async nature of
`addEvent` it could happen that an event is actually not added (because
it is discarded due to timestamp etc.). But we are still updating the
initial session timestamp (`[Replay] Updating session start time to
earliest event in buffer to...`), as we don't actually abort there.
This PR changes this to actually abort `handleRecordingEmit` in this
case. I added an `addEventSync` method for this that just returns
true/false instead of a promise, which should not change anything there
as we haven't been waiting for the result of the promise anyhow.
Noticed warnings for this during build.
We do filter these out in the span processor, but we can avoid all this
work by not even generating OTEL spans at all for outgoing Sentry
requests.
…event processors (#8956)
While looking through our existing integrations, I noticed that the
`LinkedErrors` integration in node had some weird/custom code to
manually run the context lines integration after it processed, as we
cannot guarantee any order etc.
I figured it would be much cleaner to solve this with a proper hook (I
went with `preprocessEvent`), as it actually makes sense for this to
generally run before all other event processors run, IMHO, and we can
decouple these integrations from each other.
Co-authored-by: Abhijeet Prasad <devabhiprasad@gmail.com>
Based on #8911 and
convos in slack, it was brought up that we might need to expose a method
that works similar to `startSpan`, but that does not automatically
finish the span at the end of the callback.
This is necessary when you have event emitters (`res.once`) or similar.
```ts
Sentry.startSpanManual(ctx, (span, finish) => {
// do something with span
// when you're done, call finish()
finish();
});
```
We've changed this some time ago so that `hub.getScope()` _always_
returns a scope, so we can actually update our code where we still check
for the existence of scope.
mydeaand others added 4 commits September 12, 2023 16:11
This PR updates the span reference cleanup to take into account if a
span is/may still be referenced somewhere else.
Previously, whenever a span finished we removed the reference from the
map, to clean up and avoid memory leaks.
However, it seems that sometimes spans are ended before a child span is
started (at least the hooks may fire in this order). This leads to the
potential case where a parent that _should_ exist cannot be found, thus
creating a new transaction instead of a span.
With this change, we keep more information in our span map, in order to
clear sub-spans (=not transactions) only when the root span
(=transaction) is finished.
Similar to express, we want to ignore (incoming) OPTIONS & HEAD
requests.
@AbhiPrasad
AbhiPrasad requested review from a team, lforst and mydea and removed request for a teamSeptember 12, 2023 19:25
Prevent stringifying VueViewModel objects which causes a warning when the object is logged to console. Instead, normalize it's string value to `"[VueViewModel]"`
More details in #8980
@Lms24
Lms24force-pushed the prepare-release/7.69.0 branch from 22754ca to 5dfdf5fCompareSeptember 13, 2023 06:53
Comment threadCHANGELOG.md Outdated
@mydea
mydeaforce-pushed the prepare-release/7.69.0 branch from 0c0c53e to 1768ba0CompareSeptember 13, 2023 07:31

@lforstlforst left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nice

@mydea
mydea merged commit 05583e5 into masterSep 13, 2023
@mydea
mydea deleted the prepare-release/7.69.0 branch September 13, 2023 07:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@AbhiPrasad@mydea@lforst@timfish@HazAT@onurtemizkan@malay44@krystofwoldrich@Duncanxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

meta(changelog): Update changelog for 7.69.0 - #9009

Merged
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0
Sep 13, 2023
Merged

meta(changelog): Update changelog for 7.69.0#9009
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

@malay44 your changes will be released in 7.69.0!

mydeaand others added 30 commits September 6, 2023 13:53
This is a micro improvement, but maybe worth it as we can have a lot of
breadcrumbs. This ensures we only create a new breadcrumbs array if we
exceed the limit.
In contrast, currently we'll always create two copies of the breadcrumbs
for each added breadcrumb (first for the array spread, then we copy it
through the slice), even if we don't really need to do this.
[Gitflow] Merge master into develop
This PR removes the `EdgeClient` and duplicate `eventbuilder` functions.
So the logs are properly hidden from breadcrumbs etc.
Making it easier to potentially change this e.g. for POTEL.
As per the new changes in RFC 101 in
getsentry/rfcs#113, update the span performance
API names.
- `startActiveSpan` -> `startSpan`
- `startSpan` -> `startInactiveSpan`
https://github.com/getsentry/rfcs/blob/main/text/0101-revamping-the-sdk-performance-api.md
`startActiveSpan` is deprecated, while `startInactiveSpan` is being
introduced. The breaking change is that `startSpan` is being changed,
but considering that basically no-one is using the `startSpan` API, we
should be fine to break here for correctness reasons. Better break now
than to have everyone refactor their code in v8.
Replace ts-ignore with ts-expect-error
This pollutes the console when running the linter, hopefully also speeds
up CI a little bit.
#8988)
There was some confusion about this because the migration doc in this
repo conflicts with the `highly experimental` tag we put on the README.
Also added Node 18+ requirements.
We can change this in migr8 for a future release, but for now let's
merge this in to reduce confusion and unblock our users.
Enforce that `@ts-expect-error` is used instead of `@ts-ignore`. This is
done by updating the `typescript-eslint/ban-ts-comment` rule.
https://typescript-eslint.io/rules/ban-ts-comment/
#8966)
This is a fork of
#8937, with only the
"uncontroversial" stuff, mainly fixing that we only create HTTP
breadcrumbs for _outgoing_ requests.
In addition, this also migrates to using `requestHook` and
`responseHook` instead of `applyCustomAttributesOnSpan`. We may have to
revisit this later, but these hooks seem to have a better context
awareness (=they are called in a more reasonable OTEL context, which
gives the callbacks there better access to scope data etc). However that
means we cannot (easily) pass both request and response as breadcrumb
hints - not sure how important that is to us... For now I'd say that's
OK.
Note that also `requestHook` is only called when the request finishes,
so we already have all the response OTEL span attributes correctly set
there.
This PR changes the behavior when a session is expired to fully stop &
restart the replay.
This means we just re-sample based on sample rates and start a
completely new session in that case.
…ded (#8938)
I noticed that in `handleRecordingEmit`, due to the async nature of
`addEvent` it could happen that an event is actually not added (because
it is discarded due to timestamp etc.). But we are still updating the
initial session timestamp (`[Replay] Updating session start time to
earliest event in buffer to...`), as we don't actually abort there.
This PR changes this to actually abort `handleRecordingEmit` in this
case. I added an `addEventSync` method for this that just returns
true/false instead of a promise, which should not change anything there
as we haven't been waiting for the result of the promise anyhow.
Noticed warnings for this during build.
We do filter these out in the span processor, but we can avoid all this
work by not even generating OTEL spans at all for outgoing Sentry
requests.
…event processors (#8956)
While looking through our existing integrations, I noticed that the
`LinkedErrors` integration in node had some weird/custom code to
manually run the context lines integration after it processed, as we
cannot guarantee any order etc.
I figured it would be much cleaner to solve this with a proper hook (I
went with `preprocessEvent`), as it actually makes sense for this to
generally run before all other event processors run, IMHO, and we can
decouple these integrations from each other.
Co-authored-by: Abhijeet Prasad <devabhiprasad@gmail.com>
Based on #8911 and
convos in slack, it was brought up that we might need to expose a method
that works similar to `startSpan`, but that does not automatically
finish the span at the end of the callback.
This is necessary when you have event emitters (`res.once`) or similar.
```ts
Sentry.startSpanManual(ctx, (span, finish) => {
// do something with span
// when you're done, call finish()
finish();
});
```
We've changed this some time ago so that `hub.getScope()` _always_
returns a scope, so we can actually update our code where we still check
for the existence of scope.
mydeaand others added 4 commits September 12, 2023 16:11
This PR updates the span reference cleanup to take into account if a
span is/may still be referenced somewhere else.
Previously, whenever a span finished we removed the reference from the
map, to clean up and avoid memory leaks.
However, it seems that sometimes spans are ended before a child span is
started (at least the hooks may fire in this order). This leads to the
potential case where a parent that _should_ exist cannot be found, thus
creating a new transaction instead of a span.
With this change, we keep more information in our span map, in order to
clear sub-spans (=not transactions) only when the root span
(=transaction) is finished.
Similar to express, we want to ignore (incoming) OPTIONS & HEAD
requests.
@AbhiPrasad
AbhiPrasad requested review from a team, lforst and mydea and removed request for a teamSeptember 12, 2023 19:25
Prevent stringifying VueViewModel objects which causes a warning when the object is logged to console. Instead, normalize it's string value to `"[VueViewModel]"`
More details in #8980
@Lms24
Lms24force-pushed the prepare-release/7.69.0 branch from 22754ca to 5dfdf5fCompareSeptember 13, 2023 06:53
Comment threadCHANGELOG.md Outdated
@mydea
mydeaforce-pushed the prepare-release/7.69.0 branch from 0c0c53e to 1768ba0CompareSeptember 13, 2023 07:31

@lforstlforst left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nice

@mydea
mydea merged commit 05583e5 into masterSep 13, 2023
@mydea
mydea deleted the prepare-release/7.69.0 branch September 13, 2023 07:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@AbhiPrasad@mydea@lforst@timfish@HazAT@onurtemizkan@malay44@krystofwoldrich@Duncanxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

meta(changelog): Update changelog for 7.69.0 - #9009

Merged
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0
Sep 13, 2023
Merged

meta(changelog): Update changelog for 7.69.0#9009
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

@malay44 your changes will be released in 7.69.0!

mydeaand others added 30 commits September 6, 2023 13:53
This is a micro improvement, but maybe worth it as we can have a lot of
breadcrumbs. This ensures we only create a new breadcrumbs array if we
exceed the limit.
In contrast, currently we'll always create two copies of the breadcrumbs
for each added breadcrumb (first for the array spread, then we copy it
through the slice), even if we don't really need to do this.
[Gitflow] Merge master into develop
This PR removes the `EdgeClient` and duplicate `eventbuilder` functions.
So the logs are properly hidden from breadcrumbs etc.
Making it easier to potentially change this e.g. for POTEL.
As per the new changes in RFC 101 in
getsentry/rfcs#113, update the span performance
API names.
- `startActiveSpan` -> `startSpan`
- `startSpan` -> `startInactiveSpan`
https://github.com/getsentry/rfcs/blob/main/text/0101-revamping-the-sdk-performance-api.md
`startActiveSpan` is deprecated, while `startInactiveSpan` is being
introduced. The breaking change is that `startSpan` is being changed,
but considering that basically no-one is using the `startSpan` API, we
should be fine to break here for correctness reasons. Better break now
than to have everyone refactor their code in v8.
Replace ts-ignore with ts-expect-error
This pollutes the console when running the linter, hopefully also speeds
up CI a little bit.
#8988)
There was some confusion about this because the migration doc in this
repo conflicts with the `highly experimental` tag we put on the README.
Also added Node 18+ requirements.
We can change this in migr8 for a future release, but for now let's
merge this in to reduce confusion and unblock our users.
Enforce that `@ts-expect-error` is used instead of `@ts-ignore`. This is
done by updating the `typescript-eslint/ban-ts-comment` rule.
https://typescript-eslint.io/rules/ban-ts-comment/
#8966)
This is a fork of
#8937, with only the
"uncontroversial" stuff, mainly fixing that we only create HTTP
breadcrumbs for _outgoing_ requests.
In addition, this also migrates to using `requestHook` and
`responseHook` instead of `applyCustomAttributesOnSpan`. We may have to
revisit this later, but these hooks seem to have a better context
awareness (=they are called in a more reasonable OTEL context, which
gives the callbacks there better access to scope data etc). However that
means we cannot (easily) pass both request and response as breadcrumb
hints - not sure how important that is to us... For now I'd say that's
OK.
Note that also `requestHook` is only called when the request finishes,
so we already have all the response OTEL span attributes correctly set
there.
This PR changes the behavior when a session is expired to fully stop &
restart the replay.
This means we just re-sample based on sample rates and start a
completely new session in that case.
…ded (#8938)
I noticed that in `handleRecordingEmit`, due to the async nature of
`addEvent` it could happen that an event is actually not added (because
it is discarded due to timestamp etc.). But we are still updating the
initial session timestamp (`[Replay] Updating session start time to
earliest event in buffer to...`), as we don't actually abort there.
This PR changes this to actually abort `handleRecordingEmit` in this
case. I added an `addEventSync` method for this that just returns
true/false instead of a promise, which should not change anything there
as we haven't been waiting for the result of the promise anyhow.
Noticed warnings for this during build.
We do filter these out in the span processor, but we can avoid all this
work by not even generating OTEL spans at all for outgoing Sentry
requests.
…event processors (#8956)
While looking through our existing integrations, I noticed that the
`LinkedErrors` integration in node had some weird/custom code to
manually run the context lines integration after it processed, as we
cannot guarantee any order etc.
I figured it would be much cleaner to solve this with a proper hook (I
went with `preprocessEvent`), as it actually makes sense for this to
generally run before all other event processors run, IMHO, and we can
decouple these integrations from each other.
Co-authored-by: Abhijeet Prasad <devabhiprasad@gmail.com>
Based on #8911 and
convos in slack, it was brought up that we might need to expose a method
that works similar to `startSpan`, but that does not automatically
finish the span at the end of the callback.
This is necessary when you have event emitters (`res.once`) or similar.
```ts
Sentry.startSpanManual(ctx, (span, finish) => {
// do something with span
// when you're done, call finish()
finish();
});
```
We've changed this some time ago so that `hub.getScope()` _always_
returns a scope, so we can actually update our code where we still check
for the existence of scope.
mydeaand others added 4 commits September 12, 2023 16:11
This PR updates the span reference cleanup to take into account if a
span is/may still be referenced somewhere else.
Previously, whenever a span finished we removed the reference from the
map, to clean up and avoid memory leaks.
However, it seems that sometimes spans are ended before a child span is
started (at least the hooks may fire in this order). This leads to the
potential case where a parent that _should_ exist cannot be found, thus
creating a new transaction instead of a span.
With this change, we keep more information in our span map, in order to
clear sub-spans (=not transactions) only when the root span
(=transaction) is finished.
Similar to express, we want to ignore (incoming) OPTIONS & HEAD
requests.
@AbhiPrasad
AbhiPrasad requested review from a team, lforst and mydea and removed request for a teamSeptember 12, 2023 19:25
Prevent stringifying VueViewModel objects which causes a warning when the object is logged to console. Instead, normalize it's string value to `"[VueViewModel]"`
More details in #8980
@Lms24
Lms24force-pushed the prepare-release/7.69.0 branch from 22754ca to 5dfdf5fCompareSeptember 13, 2023 06:53
Comment threadCHANGELOG.md Outdated
@mydea
mydeaforce-pushed the prepare-release/7.69.0 branch from 0c0c53e to 1768ba0CompareSeptember 13, 2023 07:31

@lforstlforst left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nice

@mydea
mydea merged commit 05583e5 into masterSep 13, 2023
@mydea
mydea deleted the prepare-release/7.69.0 branch September 13, 2023 07:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@AbhiPrasad@mydea@lforst@timfish@HazAT@onurtemizkan@malay44@krystofwoldrich@Duncanxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

meta(changelog): Update changelog for 7.69.0 - #9009

Merged
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0
Sep 13, 2023
Merged

meta(changelog): Update changelog for 7.69.0#9009
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

@malay44 your changes will be released in 7.69.0!

mydeaand others added 30 commits September 6, 2023 13:53
This is a micro improvement, but maybe worth it as we can have a lot of
breadcrumbs. This ensures we only create a new breadcrumbs array if we
exceed the limit.
In contrast, currently we'll always create two copies of the breadcrumbs
for each added breadcrumb (first for the array spread, then we copy it
through the slice), even if we don't really need to do this.
[Gitflow] Merge master into develop
This PR removes the `EdgeClient` and duplicate `eventbuilder` functions.
So the logs are properly hidden from breadcrumbs etc.
Making it easier to potentially change this e.g. for POTEL.
As per the new changes in RFC 101 in
getsentry/rfcs#113, update the span performance
API names.
- `startActiveSpan` -> `startSpan`
- `startSpan` -> `startInactiveSpan`
https://github.com/getsentry/rfcs/blob/main/text/0101-revamping-the-sdk-performance-api.md
`startActiveSpan` is deprecated, while `startInactiveSpan` is being
introduced. The breaking change is that `startSpan` is being changed,
but considering that basically no-one is using the `startSpan` API, we
should be fine to break here for correctness reasons. Better break now
than to have everyone refactor their code in v8.
Replace ts-ignore with ts-expect-error
This pollutes the console when running the linter, hopefully also speeds
up CI a little bit.
#8988)
There was some confusion about this because the migration doc in this
repo conflicts with the `highly experimental` tag we put on the README.
Also added Node 18+ requirements.
We can change this in migr8 for a future release, but for now let's
merge this in to reduce confusion and unblock our users.
Enforce that `@ts-expect-error` is used instead of `@ts-ignore`. This is
done by updating the `typescript-eslint/ban-ts-comment` rule.
https://typescript-eslint.io/rules/ban-ts-comment/
#8966)
This is a fork of
#8937, with only the
"uncontroversial" stuff, mainly fixing that we only create HTTP
breadcrumbs for _outgoing_ requests.
In addition, this also migrates to using `requestHook` and
`responseHook` instead of `applyCustomAttributesOnSpan`. We may have to
revisit this later, but these hooks seem to have a better context
awareness (=they are called in a more reasonable OTEL context, which
gives the callbacks there better access to scope data etc). However that
means we cannot (easily) pass both request and response as breadcrumb
hints - not sure how important that is to us... For now I'd say that's
OK.
Note that also `requestHook` is only called when the request finishes,
so we already have all the response OTEL span attributes correctly set
there.
This PR changes the behavior when a session is expired to fully stop &
restart the replay.
This means we just re-sample based on sample rates and start a
completely new session in that case.
…ded (#8938)
I noticed that in `handleRecordingEmit`, due to the async nature of
`addEvent` it could happen that an event is actually not added (because
it is discarded due to timestamp etc.). But we are still updating the
initial session timestamp (`[Replay] Updating session start time to
earliest event in buffer to...`), as we don't actually abort there.
This PR changes this to actually abort `handleRecordingEmit` in this
case. I added an `addEventSync` method for this that just returns
true/false instead of a promise, which should not change anything there
as we haven't been waiting for the result of the promise anyhow.
Noticed warnings for this during build.
We do filter these out in the span processor, but we can avoid all this
work by not even generating OTEL spans at all for outgoing Sentry
requests.
…event processors (#8956)
While looking through our existing integrations, I noticed that the
`LinkedErrors` integration in node had some weird/custom code to
manually run the context lines integration after it processed, as we
cannot guarantee any order etc.
I figured it would be much cleaner to solve this with a proper hook (I
went with `preprocessEvent`), as it actually makes sense for this to
generally run before all other event processors run, IMHO, and we can
decouple these integrations from each other.
Co-authored-by: Abhijeet Prasad <devabhiprasad@gmail.com>
Based on #8911 and
convos in slack, it was brought up that we might need to expose a method
that works similar to `startSpan`, but that does not automatically
finish the span at the end of the callback.
This is necessary when you have event emitters (`res.once`) or similar.
```ts
Sentry.startSpanManual(ctx, (span, finish) => {
// do something with span
// when you're done, call finish()
finish();
});
```
We've changed this some time ago so that `hub.getScope()` _always_
returns a scope, so we can actually update our code where we still check
for the existence of scope.
mydeaand others added 4 commits September 12, 2023 16:11
This PR updates the span reference cleanup to take into account if a
span is/may still be referenced somewhere else.
Previously, whenever a span finished we removed the reference from the
map, to clean up and avoid memory leaks.
However, it seems that sometimes spans are ended before a child span is
started (at least the hooks may fire in this order). This leads to the
potential case where a parent that _should_ exist cannot be found, thus
creating a new transaction instead of a span.
With this change, we keep more information in our span map, in order to
clear sub-spans (=not transactions) only when the root span
(=transaction) is finished.
Similar to express, we want to ignore (incoming) OPTIONS & HEAD
requests.
@AbhiPrasad
AbhiPrasad requested review from a team, lforst and mydea and removed request for a teamSeptember 12, 2023 19:25
Prevent stringifying VueViewModel objects which causes a warning when the object is logged to console. Instead, normalize it's string value to `"[VueViewModel]"`
More details in #8980
@Lms24
Lms24force-pushed the prepare-release/7.69.0 branch from 22754ca to 5dfdf5fCompareSeptember 13, 2023 06:53
Comment threadCHANGELOG.md Outdated
@mydea
mydeaforce-pushed the prepare-release/7.69.0 branch from 0c0c53e to 1768ba0CompareSeptember 13, 2023 07:31

@lforstlforst left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nice

@mydea
mydea merged commit 05583e5 into masterSep 13, 2023
@mydea
mydea deleted the prepare-release/7.69.0 branch September 13, 2023 07:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@AbhiPrasad@mydea@lforst@timfish@HazAT@onurtemizkan@malay44@krystofwoldrich@Duncanxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

meta(changelog): Update changelog for 7.69.0 - #9009

Merged
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0
Sep 13, 2023
Merged

meta(changelog): Update changelog for 7.69.0#9009
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

@malay44 your changes will be released in 7.69.0!

mydeaand others added 30 commits September 6, 2023 13:53
This is a micro improvement, but maybe worth it as we can have a lot of
breadcrumbs. This ensures we only create a new breadcrumbs array if we
exceed the limit.
In contrast, currently we'll always create two copies of the breadcrumbs
for each added breadcrumb (first for the array spread, then we copy it
through the slice), even if we don't really need to do this.
[Gitflow] Merge master into develop
This PR removes the `EdgeClient` and duplicate `eventbuilder` functions.
So the logs are properly hidden from breadcrumbs etc.
Making it easier to potentially change this e.g. for POTEL.
As per the new changes in RFC 101 in
getsentry/rfcs#113, update the span performance
API names.
- `startActiveSpan` -> `startSpan`
- `startSpan` -> `startInactiveSpan`
https://github.com/getsentry/rfcs/blob/main/text/0101-revamping-the-sdk-performance-api.md
`startActiveSpan` is deprecated, while `startInactiveSpan` is being
introduced. The breaking change is that `startSpan` is being changed,
but considering that basically no-one is using the `startSpan` API, we
should be fine to break here for correctness reasons. Better break now
than to have everyone refactor their code in v8.
Replace ts-ignore with ts-expect-error
This pollutes the console when running the linter, hopefully also speeds
up CI a little bit.
#8988)
There was some confusion about this because the migration doc in this
repo conflicts with the `highly experimental` tag we put on the README.
Also added Node 18+ requirements.
We can change this in migr8 for a future release, but for now let's
merge this in to reduce confusion and unblock our users.
Enforce that `@ts-expect-error` is used instead of `@ts-ignore`. This is
done by updating the `typescript-eslint/ban-ts-comment` rule.
https://typescript-eslint.io/rules/ban-ts-comment/
#8966)
This is a fork of
#8937, with only the
"uncontroversial" stuff, mainly fixing that we only create HTTP
breadcrumbs for _outgoing_ requests.
In addition, this also migrates to using `requestHook` and
`responseHook` instead of `applyCustomAttributesOnSpan`. We may have to
revisit this later, but these hooks seem to have a better context
awareness (=they are called in a more reasonable OTEL context, which
gives the callbacks there better access to scope data etc). However that
means we cannot (easily) pass both request and response as breadcrumb
hints - not sure how important that is to us... For now I'd say that's
OK.
Note that also `requestHook` is only called when the request finishes,
so we already have all the response OTEL span attributes correctly set
there.
This PR changes the behavior when a session is expired to fully stop &
restart the replay.
This means we just re-sample based on sample rates and start a
completely new session in that case.
…ded (#8938)
I noticed that in `handleRecordingEmit`, due to the async nature of
`addEvent` it could happen that an event is actually not added (because
it is discarded due to timestamp etc.). But we are still updating the
initial session timestamp (`[Replay] Updating session start time to
earliest event in buffer to...`), as we don't actually abort there.
This PR changes this to actually abort `handleRecordingEmit` in this
case. I added an `addEventSync` method for this that just returns
true/false instead of a promise, which should not change anything there
as we haven't been waiting for the result of the promise anyhow.
Noticed warnings for this during build.
We do filter these out in the span processor, but we can avoid all this
work by not even generating OTEL spans at all for outgoing Sentry
requests.
…event processors (#8956)
While looking through our existing integrations, I noticed that the
`LinkedErrors` integration in node had some weird/custom code to
manually run the context lines integration after it processed, as we
cannot guarantee any order etc.
I figured it would be much cleaner to solve this with a proper hook (I
went with `preprocessEvent`), as it actually makes sense for this to
generally run before all other event processors run, IMHO, and we can
decouple these integrations from each other.
Co-authored-by: Abhijeet Prasad <devabhiprasad@gmail.com>
Based on #8911 and
convos in slack, it was brought up that we might need to expose a method
that works similar to `startSpan`, but that does not automatically
finish the span at the end of the callback.
This is necessary when you have event emitters (`res.once`) or similar.
```ts
Sentry.startSpanManual(ctx, (span, finish) => {
// do something with span
// when you're done, call finish()
finish();
});
```
We've changed this some time ago so that `hub.getScope()` _always_
returns a scope, so we can actually update our code where we still check
for the existence of scope.
mydeaand others added 4 commits September 12, 2023 16:11
This PR updates the span reference cleanup to take into account if a
span is/may still be referenced somewhere else.
Previously, whenever a span finished we removed the reference from the
map, to clean up and avoid memory leaks.
However, it seems that sometimes spans are ended before a child span is
started (at least the hooks may fire in this order). This leads to the
potential case where a parent that _should_ exist cannot be found, thus
creating a new transaction instead of a span.
With this change, we keep more information in our span map, in order to
clear sub-spans (=not transactions) only when the root span
(=transaction) is finished.
Similar to express, we want to ignore (incoming) OPTIONS & HEAD
requests.
@AbhiPrasad
AbhiPrasad requested review from a team, lforst and mydea and removed request for a teamSeptember 12, 2023 19:25
Prevent stringifying VueViewModel objects which causes a warning when the object is logged to console. Instead, normalize it's string value to `"[VueViewModel]"`
More details in #8980
@Lms24
Lms24force-pushed the prepare-release/7.69.0 branch from 22754ca to 5dfdf5fCompareSeptember 13, 2023 06:53
Comment threadCHANGELOG.md Outdated
@mydea
mydeaforce-pushed the prepare-release/7.69.0 branch from 0c0c53e to 1768ba0CompareSeptember 13, 2023 07:31

@lforstlforst left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nice

@mydea
mydea merged commit 05583e5 into masterSep 13, 2023
@mydea
mydea deleted the prepare-release/7.69.0 branch September 13, 2023 07:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@AbhiPrasad@mydea@lforst@timfish@HazAT@onurtemizkan@malay44@krystofwoldrich@Duncanxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

meta(changelog): Update changelog for 7.69.0 - #9009

Merged
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0
Sep 13, 2023
Merged

meta(changelog): Update changelog for 7.69.0#9009
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

@malay44 your changes will be released in 7.69.0!

mydeaand others added 30 commits September 6, 2023 13:53
This is a micro improvement, but maybe worth it as we can have a lot of
breadcrumbs. This ensures we only create a new breadcrumbs array if we
exceed the limit.
In contrast, currently we'll always create two copies of the breadcrumbs
for each added breadcrumb (first for the array spread, then we copy it
through the slice), even if we don't really need to do this.
[Gitflow] Merge master into develop
This PR removes the `EdgeClient` and duplicate `eventbuilder` functions.
So the logs are properly hidden from breadcrumbs etc.
Making it easier to potentially change this e.g. for POTEL.
As per the new changes in RFC 101 in
getsentry/rfcs#113, update the span performance
API names.
- `startActiveSpan` -> `startSpan`
- `startSpan` -> `startInactiveSpan`
https://github.com/getsentry/rfcs/blob/main/text/0101-revamping-the-sdk-performance-api.md
`startActiveSpan` is deprecated, while `startInactiveSpan` is being
introduced. The breaking change is that `startSpan` is being changed,
but considering that basically no-one is using the `startSpan` API, we
should be fine to break here for correctness reasons. Better break now
than to have everyone refactor their code in v8.
Replace ts-ignore with ts-expect-error
This pollutes the console when running the linter, hopefully also speeds
up CI a little bit.
#8988)
There was some confusion about this because the migration doc in this
repo conflicts with the `highly experimental` tag we put on the README.
Also added Node 18+ requirements.
We can change this in migr8 for a future release, but for now let's
merge this in to reduce confusion and unblock our users.
Enforce that `@ts-expect-error` is used instead of `@ts-ignore`. This is
done by updating the `typescript-eslint/ban-ts-comment` rule.
https://typescript-eslint.io/rules/ban-ts-comment/
#8966)
This is a fork of
#8937, with only the
"uncontroversial" stuff, mainly fixing that we only create HTTP
breadcrumbs for _outgoing_ requests.
In addition, this also migrates to using `requestHook` and
`responseHook` instead of `applyCustomAttributesOnSpan`. We may have to
revisit this later, but these hooks seem to have a better context
awareness (=they are called in a more reasonable OTEL context, which
gives the callbacks there better access to scope data etc). However that
means we cannot (easily) pass both request and response as breadcrumb
hints - not sure how important that is to us... For now I'd say that's
OK.
Note that also `requestHook` is only called when the request finishes,
so we already have all the response OTEL span attributes correctly set
there.
This PR changes the behavior when a session is expired to fully stop &
restart the replay.
This means we just re-sample based on sample rates and start a
completely new session in that case.
…ded (#8938)
I noticed that in `handleRecordingEmit`, due to the async nature of
`addEvent` it could happen that an event is actually not added (because
it is discarded due to timestamp etc.). But we are still updating the
initial session timestamp (`[Replay] Updating session start time to
earliest event in buffer to...`), as we don't actually abort there.
This PR changes this to actually abort `handleRecordingEmit` in this
case. I added an `addEventSync` method for this that just returns
true/false instead of a promise, which should not change anything there
as we haven't been waiting for the result of the promise anyhow.
Noticed warnings for this during build.
We do filter these out in the span processor, but we can avoid all this
work by not even generating OTEL spans at all for outgoing Sentry
requests.
…event processors (#8956)
While looking through our existing integrations, I noticed that the
`LinkedErrors` integration in node had some weird/custom code to
manually run the context lines integration after it processed, as we
cannot guarantee any order etc.
I figured it would be much cleaner to solve this with a proper hook (I
went with `preprocessEvent`), as it actually makes sense for this to
generally run before all other event processors run, IMHO, and we can
decouple these integrations from each other.
Co-authored-by: Abhijeet Prasad <devabhiprasad@gmail.com>
Based on #8911 and
convos in slack, it was brought up that we might need to expose a method
that works similar to `startSpan`, but that does not automatically
finish the span at the end of the callback.
This is necessary when you have event emitters (`res.once`) or similar.
```ts
Sentry.startSpanManual(ctx, (span, finish) => {
// do something with span
// when you're done, call finish()
finish();
});
```
We've changed this some time ago so that `hub.getScope()` _always_
returns a scope, so we can actually update our code where we still check
for the existence of scope.
mydeaand others added 4 commits September 12, 2023 16:11
This PR updates the span reference cleanup to take into account if a
span is/may still be referenced somewhere else.
Previously, whenever a span finished we removed the reference from the
map, to clean up and avoid memory leaks.
However, it seems that sometimes spans are ended before a child span is
started (at least the hooks may fire in this order). This leads to the
potential case where a parent that _should_ exist cannot be found, thus
creating a new transaction instead of a span.
With this change, we keep more information in our span map, in order to
clear sub-spans (=not transactions) only when the root span
(=transaction) is finished.
Similar to express, we want to ignore (incoming) OPTIONS & HEAD
requests.
@AbhiPrasad
AbhiPrasad requested review from a team, lforst and mydea and removed request for a teamSeptember 12, 2023 19:25
Prevent stringifying VueViewModel objects which causes a warning when the object is logged to console. Instead, normalize it's string value to `"[VueViewModel]"`
More details in #8980
@Lms24
Lms24force-pushed the prepare-release/7.69.0 branch from 22754ca to 5dfdf5fCompareSeptember 13, 2023 06:53
Comment threadCHANGELOG.md Outdated
@mydea
mydeaforce-pushed the prepare-release/7.69.0 branch from 0c0c53e to 1768ba0CompareSeptember 13, 2023 07:31

@lforstlforst left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nice

@mydea
mydea merged commit 05583e5 into masterSep 13, 2023
@mydea
mydea deleted the prepare-release/7.69.0 branch September 13, 2023 07:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@AbhiPrasad@mydea@lforst@timfish@HazAT@onurtemizkan@malay44@krystofwoldrich@Duncanxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

meta(changelog): Update changelog for 7.69.0 - #9009

Merged
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0
Sep 13, 2023
Merged

meta(changelog): Update changelog for 7.69.0#9009
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

@malay44 your changes will be released in 7.69.0!

mydeaand others added 30 commits September 6, 2023 13:53
This is a micro improvement, but maybe worth it as we can have a lot of
breadcrumbs. This ensures we only create a new breadcrumbs array if we
exceed the limit.
In contrast, currently we'll always create two copies of the breadcrumbs
for each added breadcrumb (first for the array spread, then we copy it
through the slice), even if we don't really need to do this.
[Gitflow] Merge master into develop
This PR removes the `EdgeClient` and duplicate `eventbuilder` functions.
So the logs are properly hidden from breadcrumbs etc.
Making it easier to potentially change this e.g. for POTEL.
As per the new changes in RFC 101 in
getsentry/rfcs#113, update the span performance
API names.
- `startActiveSpan` -> `startSpan`
- `startSpan` -> `startInactiveSpan`
https://github.com/getsentry/rfcs/blob/main/text/0101-revamping-the-sdk-performance-api.md
`startActiveSpan` is deprecated, while `startInactiveSpan` is being
introduced. The breaking change is that `startSpan` is being changed,
but considering that basically no-one is using the `startSpan` API, we
should be fine to break here for correctness reasons. Better break now
than to have everyone refactor their code in v8.
Replace ts-ignore with ts-expect-error
This pollutes the console when running the linter, hopefully also speeds
up CI a little bit.
#8988)
There was some confusion about this because the migration doc in this
repo conflicts with the `highly experimental` tag we put on the README.
Also added Node 18+ requirements.
We can change this in migr8 for a future release, but for now let's
merge this in to reduce confusion and unblock our users.
Enforce that `@ts-expect-error` is used instead of `@ts-ignore`. This is
done by updating the `typescript-eslint/ban-ts-comment` rule.
https://typescript-eslint.io/rules/ban-ts-comment/
#8966)
This is a fork of
#8937, with only the
"uncontroversial" stuff, mainly fixing that we only create HTTP
breadcrumbs for _outgoing_ requests.
In addition, this also migrates to using `requestHook` and
`responseHook` instead of `applyCustomAttributesOnSpan`. We may have to
revisit this later, but these hooks seem to have a better context
awareness (=they are called in a more reasonable OTEL context, which
gives the callbacks there better access to scope data etc). However that
means we cannot (easily) pass both request and response as breadcrumb
hints - not sure how important that is to us... For now I'd say that's
OK.
Note that also `requestHook` is only called when the request finishes,
so we already have all the response OTEL span attributes correctly set
there.
This PR changes the behavior when a session is expired to fully stop &
restart the replay.
This means we just re-sample based on sample rates and start a
completely new session in that case.
…ded (#8938)
I noticed that in `handleRecordingEmit`, due to the async nature of
`addEvent` it could happen that an event is actually not added (because
it is discarded due to timestamp etc.). But we are still updating the
initial session timestamp (`[Replay] Updating session start time to
earliest event in buffer to...`), as we don't actually abort there.
This PR changes this to actually abort `handleRecordingEmit` in this
case. I added an `addEventSync` method for this that just returns
true/false instead of a promise, which should not change anything there
as we haven't been waiting for the result of the promise anyhow.
Noticed warnings for this during build.
We do filter these out in the span processor, but we can avoid all this
work by not even generating OTEL spans at all for outgoing Sentry
requests.
…event processors (#8956)
While looking through our existing integrations, I noticed that the
`LinkedErrors` integration in node had some weird/custom code to
manually run the context lines integration after it processed, as we
cannot guarantee any order etc.
I figured it would be much cleaner to solve this with a proper hook (I
went with `preprocessEvent`), as it actually makes sense for this to
generally run before all other event processors run, IMHO, and we can
decouple these integrations from each other.
Co-authored-by: Abhijeet Prasad <devabhiprasad@gmail.com>
Based on #8911 and
convos in slack, it was brought up that we might need to expose a method
that works similar to `startSpan`, but that does not automatically
finish the span at the end of the callback.
This is necessary when you have event emitters (`res.once`) or similar.
```ts
Sentry.startSpanManual(ctx, (span, finish) => {
// do something with span
// when you're done, call finish()
finish();
});
```
We've changed this some time ago so that `hub.getScope()` _always_
returns a scope, so we can actually update our code where we still check
for the existence of scope.
mydeaand others added 4 commits September 12, 2023 16:11
This PR updates the span reference cleanup to take into account if a
span is/may still be referenced somewhere else.
Previously, whenever a span finished we removed the reference from the
map, to clean up and avoid memory leaks.
However, it seems that sometimes spans are ended before a child span is
started (at least the hooks may fire in this order). This leads to the
potential case where a parent that _should_ exist cannot be found, thus
creating a new transaction instead of a span.
With this change, we keep more information in our span map, in order to
clear sub-spans (=not transactions) only when the root span
(=transaction) is finished.
Similar to express, we want to ignore (incoming) OPTIONS & HEAD
requests.
@AbhiPrasad
AbhiPrasad requested review from a team, lforst and mydea and removed request for a teamSeptember 12, 2023 19:25
Prevent stringifying VueViewModel objects which causes a warning when the object is logged to console. Instead, normalize it's string value to `"[VueViewModel]"`
More details in #8980
@Lms24
Lms24force-pushed the prepare-release/7.69.0 branch from 22754ca to 5dfdf5fCompareSeptember 13, 2023 06:53
Comment threadCHANGELOG.md Outdated
@mydea
mydeaforce-pushed the prepare-release/7.69.0 branch from 0c0c53e to 1768ba0CompareSeptember 13, 2023 07:31

@lforstlforst left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nice

@mydea
mydea merged commit 05583e5 into masterSep 13, 2023
@mydea
mydea deleted the prepare-release/7.69.0 branch September 13, 2023 07:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@AbhiPrasad@mydea@lforst@timfish@HazAT@onurtemizkan@malay44@krystofwoldrich@Duncanxyz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

meta(changelog): Update changelog for 7.69.0 - #9009

Merged
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0
Sep 13, 2023
Merged

meta(changelog): Update changelog for 7.69.0#9009
mydea merged 36 commits into
masterfrom
prepare-release/7.69.0

Conversation

@AbhiPrasad

Copy link
Copy Markdown
Contributor

@malay44 your changes will be released in 7.69.0!

mydeaand others added 30 commits September 6, 2023 13:53
This is a micro improvement, but maybe worth it as we can have a lot of
breadcrumbs. This ensures we only create a new breadcrumbs array if we
exceed the limit.
In contrast, currently we'll always create two copies of the breadcrumbs
for each added breadcrumb (first for the array spread, then we copy it
through the slice), even if we don't really need to do this.
[Gitflow] Merge master into develop
This PR removes the `EdgeClient` and duplicate `eventbuilder` functions.
So the logs are properly hidden from breadcrumbs etc.
Making it easier to potentially change this e.g. for POTEL.
As per the new changes in RFC 101 in
getsentry/rfcs#113, update the span performance
API names.
- `startActiveSpan` -> `startSpan`
- `startSpan` -> `startInactiveSpan`
https://github.com/getsentry/rfcs/blob/main/text/0101-revamping-the-sdk-performance-api.md
`startActiveSpan` is deprecated, while `startInactiveSpan` is being
introduced. The breaking change is that `startSpan` is being changed,
but considering that basically no-one is using the `startSpan` API, we
should be fine to break here for correctness reasons. Better break now
than to have everyone refactor their code in v8.
Replace ts-ignore with ts-expect-error
This pollutes the console when running the linter, hopefully also speeds
up CI a little bit.
#8988)
There was some confusion about this because the migration doc in this
repo conflicts with the `highly experimental` tag we put on the README.
Also added Node 18+ requirements.
We can change this in migr8 for a future release, but for now let's
merge this in to reduce confusion and unblock our users.
Enforce that `@ts-expect-error` is used instead of `@ts-ignore`. This is
done by updating the `typescript-eslint/ban-ts-comment` rule.
https://typescript-eslint.io/rules/ban-ts-comment/
#8966)
This is a fork of
#8937, with only the
"uncontroversial" stuff, mainly fixing that we only create HTTP
breadcrumbs for _outgoing_ requests.
In addition, this also migrates to using `requestHook` and
`responseHook` instead of `applyCustomAttributesOnSpan`. We may have to
revisit this later, but these hooks seem to have a better context
awareness (=they are called in a more reasonable OTEL context, which
gives the callbacks there better access to scope data etc). However that
means we cannot (easily) pass both request and response as breadcrumb
hints - not sure how important that is to us... For now I'd say that's
OK.
Note that also `requestHook` is only called when the request finishes,
so we already have all the response OTEL span attributes correctly set
there.
This PR changes the behavior when a session is expired to fully stop &
restart the replay.
This means we just re-sample based on sample rates and start a
completely new session in that case.
…ded (#8938)
I noticed that in `handleRecordingEmit`, due to the async nature of
`addEvent` it could happen that an event is actually not added (because
it is discarded due to timestamp etc.). But we are still updating the
initial session timestamp (`[Replay] Updating session start time to
earliest event in buffer to...`), as we don't actually abort there.
This PR changes this to actually abort `handleRecordingEmit` in this
case. I added an `addEventSync` method for this that just returns
true/false instead of a promise, which should not change anything there
as we haven't been waiting for the result of the promise anyhow.
Noticed warnings for this during build.
We do filter these out in the span processor, but we can avoid all this
work by not even generating OTEL spans at all for outgoing Sentry
requests.
…event processors (#8956)
While looking through our existing integrations, I noticed that the
`LinkedErrors` integration in node had some weird/custom code to
manually run the context lines integration after it processed, as we
cannot guarantee any order etc.
I figured it would be much cleaner to solve this with a proper hook (I
went with `preprocessEvent`), as it actually makes sense for this to
generally run before all other event processors run, IMHO, and we can
decouple these integrations from each other.
Co-authored-by: Abhijeet Prasad <devabhiprasad@gmail.com>
Based on #8911 and
convos in slack, it was brought up that we might need to expose a method
that works similar to `startSpan`, but that does not automatically
finish the span at the end of the callback.
This is necessary when you have event emitters (`res.once`) or similar.
```ts
Sentry.startSpanManual(ctx, (span, finish) => {
// do something with span
// when you're done, call finish()
finish();
});
```
We've changed this some time ago so that `hub.getScope()` _always_
returns a scope, so we can actually update our code where we still check
for the existence of scope.
mydeaand others added 4 commits September 12, 2023 16:11
This PR updates the span reference cleanup to take into account if a
span is/may still be referenced somewhere else.
Previously, whenever a span finished we removed the reference from the
map, to clean up and avoid memory leaks.
However, it seems that sometimes spans are ended before a child span is
started (at least the hooks may fire in this order). This leads to the
potential case where a parent that _should_ exist cannot be found, thus
creating a new transaction instead of a span.
With this change, we keep more information in our span map, in order to
clear sub-spans (=not transactions) only when the root span
(=transaction) is finished.
Similar to express, we want to ignore (incoming) OPTIONS & HEAD
requests.
@AbhiPrasad
AbhiPrasad requested review from a team, lforst and mydea and removed request for a teamSeptember 12, 2023 19:25
Prevent stringifying VueViewModel objects which causes a warning when the object is logged to console. Instead, normalize it's string value to `"[VueViewModel]"`
More details in #8980
@Lms24
Lms24force-pushed the prepare-release/7.69.0 branch from 22754ca to 5dfdf5fCompareSeptember 13, 2023 06:53
Comment threadCHANGELOG.md Outdated
@mydea
mydeaforce-pushed the prepare-release/7.69.0 branch from 0c0c53e to 1768ba0CompareSeptember 13, 2023 07:31

@lforstlforst left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nice

@mydea
mydea merged commit 05583e5 into masterSep 13, 2023
@mydea
mydea deleted the prepare-release/7.69.0 branch September 13, 2023 07:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@AbhiPrasad@mydea@lforst@timfish@HazAT@onurtemizkan@malay44@krystofwoldrich@Duncanxyz