Skip to content

Commit 47036cb

Browse files
committed
* 'master' of https://github.com/getsentry/sentry-docs: (131 commits) refactor: migrate Golang and related guides to inline product options syntax (#13413) refactor: migrate DotNet sdks to inline product options syntax (#13415) add note of the switch sdk (#13431) Update spelling in examples.mdx (#13378) ref(replay): clarify web & mobile distinction in product docs (#13447) fix(java): fix `RestTemplate` auto-instrumentation guide (#13236) refactor: migrate Python and related guides to inline product options syntax (#13412) Unreal: Document and add `SendDefaultPii = true` to onboarding docs (#13435) docs(tracing): Add docs for Previous and Next trace (#13406) docs(js): Create Svelte Quick Start guide (#13387) Update Profiling SDK version number for iOS/macOS (#13429) remove note that workflow notifications alert on new feedback (#13384) fix(dart): 404 link (#13430) feat(Godot): Update options screenshot on the landing page (#13428) add senddefaultpii to powershell (#13426) powershell senddefaultpii landing page (#13427) chore: update powershell min version requirement (#13425) docs(replays): add count_traces to searchable properties (#13422) docs(js): Add `sendDefaultPii: true` to all init calls (#13408) docs(dotnet): Add `SendDefaultPii = true` option (#13423) ...
2 parents 7edf647 + c6a8d8e commit 47036cb

File tree

382 files changed

+4548
-2430
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

382 files changed

+4548
-2430
lines changed

develop-docs/backend/application-domains/database-migrations/index.mdx

+13-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,19 @@ Note that if you have added a new model, you also need to import the model in `_
5454

5555
When merging to master you might notice a conflict with `migrations_lockfile.txt`. This file is in place to help us avoid merging two migrations with the same migration number to master, and if you're conflicting with it then it's likely someone has committed a migration ahead of you.
5656

57-
To resolve this, rebase against latest master, delete your current migration and then regenerate it. If your migration was custom, just save the operations in a text file somewhere so that you can reapply them on the regenerated migration.
57+
### Automatically Resolving Conflicts
58+
59+
There is a [useful script](https://github.com/getsentry/sentry/blob/master/bin/update-migration) for automatically moving your migration to the top of the migration history.
60+
61+
```bash
62+
bin/update-migration <migration_name>
63+
```
64+
65+
It will rename the migration, modify it to depend on the latest migration, and update the lockfile and the name of any tests if they exist.
66+
67+
### Manually Resolving Conflicts
68+
69+
To perform the steps manually, rebase against latest master, delete your current migration and then regenerate it. If your migration was custom, just save the operations in a text file somewhere so that you can reapply them on the regenerated migration.
5870

5971
Always commit the changes to `migrations_lockfile.txt` with your migration.
6072

develop-docs/backend/application-domains/email.mdx

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Defaults to `(empty)`.
7878
<dd><markdown>
7979
Declared in `config.yml`.
8080

81-
Should Sentry use SSL when connecting to the SMTP server?
81+
Should Sentry use SSL when connecting to the SMTP server? Mutually exclusive with `mail.use-tls`.
8282

8383
Defaults to `false`.
8484

@@ -88,7 +88,7 @@ Defaults to `false`.
8888
<dd><markdown>
8989
Declared in `config.yml`.
9090

91-
Should Sentry use TLS when connecting to the SMTP server?
91+
Should Sentry use STARTTLS when connecting to the SMTP server? Mutually exclusive with `mail.use-ssl`.
9292

9393
Defaults to `false`.
9494

develop-docs/backend/application-domains/feature-flags/flagpole.mdx

+16
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ Here are some common properties we surface via our Sentry and GetSentry context
148148

149149
: The project's slug
150150

151+
`project_platform` [str]
152+
153+
: The project's platform
154+
151155
**User Context Properties (If checking a flag with an actor)**
152156

153157
`user_id` [int]
@@ -158,6 +162,18 @@ Here are some common properties we surface via our Sentry and GetSentry context
158162

159163
: The active user's email address. This should only contain Sentry employee email addresses.
160164

165+
`user_domain` [str]
166+
167+
: The domain of the active user's email address.
168+
169+
`user_is-staff` [bool]
170+
171+
: Is set to `true` for users that have `is_staff`.
172+
173+
`user_is-superuser` [bool]
174+
175+
: Is set to `true` for users that have `is_superuser`.
176+
161177

162178
To see the latest context properties available, check out the repo-specific context builders:
163179

develop-docs/backend/issue-platform/index.mdx

+1-4
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,6 @@ The issue platform provides functionality to help release your new issue type in
184184
- Post processing - This controls whether we'll pass the issue along to post processing. If disabled, then issues will be created but no notifications will be sent. This can be helpful for testing out what issues look like before release. _Note:_ Any issues created this way will not send new issue notifications after the flag is enabled, since they already exist. In the future, if there is demand we might provide a way to remove all test versions of a new issue type.
185185
- UI - This controls whether the issue type will appear in the issue list and elsewhere in the ui.
186186

187-
The flags for ingest and post processing are backed by options, and we automatically register these when the issue type is created. These options can be enabled for LA/EA/GA here
188-
https://sentry.io/_admin/options/.
189-
190-
The flag for the UI uses flagr. We're unable to register new flags in flagr automatically, so you'll need to create the flag in flagr yourself. The name will be in the format `organizations:<GroupType.slug.replace("_", "-")>-visible`.
187+
These flags are all controlled via flagpole and set via options automator. To get the base values for all of these for easy pasting into flagpole, run `sentry createissueflag --slug=<your_group_slug> --owner=<your_team_name>`. The results of this can be directly pasted into flagpole.yml.
191188

192189
Once your issue type is fully released, and you want it to go out to self-hosted and single tenant you can set `released = True` on your GroupType. This allows it to be released everywhere, and removes the feature flags and options. Generally we recommend doing this after your issue type has been in GA for long enough to verify that it's working as intended.

develop-docs/sdk/data-model/envelope-items.mdx

+2-60
Original file line numberDiff line numberDiff line change
@@ -181,67 +181,9 @@ details.
181181

182182
### User Feedback
183183

184-
Item type `"feedback"`. This Item contains an [event payload](/sdk/data-model/event-payloads/) encoded in JSON, with an additional `feedback` context object.
184+
Item type `"feedback"` contains an event with a feedback context in the payload encoded in JSON.
185185

186-
Example payload:
187-
```json
188-
{
189-
"event_id": "9ec79c33ec9942ab8353589fcb2e04dc",
190-
"timestamp": "2011-05-02T17:41:36Z",
191-
"platform": "javascript",
192-
"level": "error",
193-
"contexts": {
194-
"feedback": {
195-
"contact_email": "[email protected]",
196-
"name": "John Smith",
197-
"message": "I love session replay!",
198-
"url": "https://sentry.io/replays/",
199-
"associated_event_id": "32fd1995636d446385016e2747623e11",
200-
"replay_id":"82840977e85b4ed3bc27f7b5b25cec15"
201-
}
202-
}
203-
}
204-
```
205-
206-
**Payload Attributes**
207-
208-
We only document attributes for the `contexts.feedback` object, which is **required**
209-
for this item type. For other attributes, see [Event Payloads](/sdk/data-model/event-payloads/).
210-
211-
`message`
212-
213-
: **String, required.** Comments of the user, describing what happened and/or sharing
214-
feedback. The max length is **4096 characters**.
215-
216-
`contact_email`
217-
218-
: *String, optional.* The email of the user who submitted the feedback. If excluded, Sentry attempts to fill this in with user context. Anonymous feedbacks (no name or email) are still accepted.
219-
220-
`name`
221-
222-
: *String, optional.* The name of the user who submitted the feedback. If excluded, Sentry attempts to fill this in with user context. Anonymous feedbacks (no name or email) are still accepted.
223-
224-
`url`
225-
226-
: *String, optional.* The URL of the webpage the user was on when submitting feedback.
227-
This may be used to search for or set alerts on feedback.
228-
229-
`associated_event_id`
230-
231-
: *UUID String, optional.* The identifier of an error event in the same project.
232-
Use this to explicitly link a related error in the feedback UI.
233-
234-
`replay_id`
235-
236-
: *UUID String, optional.* The identifier of a related Session Replay in the same
237-
project. Sentry uses this ID to render a Replay clip in the feedback UI.
238-
239-
**Attaching Screenshots:**
240-
241-
You can associate screenshots with a feedback by sending image data as
242-
[attachment items](/sdk/data-model/envelope-items/#attachment), with `event_id`
243-
corresponding to the feedback item. We recommend sending the items in the same
244-
Envelope.
186+
See the <Link to="/sdk/telemetry/feedbacks/">feedback</Link> documentation for the payload details.
245187

246188
**Constraints:**
247189

develop-docs/sdk/data-model/event-payloads/contexts.mdx

-34
Original file line numberDiff line numberDiff line change
@@ -674,30 +674,6 @@ Additional information that allows Sentry to connect multiple transactions, span
674674
| `data_loss` | Unrecoverable data loss or corruption | 500 |
675675
| `unauthenticated` | The requester doesn't have valid authentication credentials for the operation | 401 |
676676

677-
`exclusive_time`
678-
679-
: _Optional_. The amount of time in milliseconds spent in this transaction span, excluding its immediate child spans.
680-
681-
- Example: `1.035`
682-
683-
`client_sample_rate`
684-
685-
: _Optional_. The client-side sample rate.
686-
687-
- Example: `0.1`
688-
689-
`tags`
690-
691-
: _Optional_. A map or list of tags for this event. Each tag must be less than 200 characters.
692-
693-
- Example: `{ "deviceMemory": "8 GB", "effectiveConnectionType": "4g", "routing.instrumentation": "react-router-v3" }`
694-
695-
`dynamic_sampling_context`
696-
697-
: _Optional_. The [Dynamic Sampling Context](/sdk/performance/dynamic-sampling-context/).
698-
699-
- Example: `{ "trace_id": "12312012123120121231201212312012", "sample_rate": "1.0", "public_key": "93D0D1125146288EAEE2A9B3AF4F96CCBE3CB316" },`
700-
701677
`origin`
702678

703679
: _Optional_. The origin of the trace indicates what created the trace. For more details, see [trace origin](/sdk/performance/trace-origin/).
@@ -731,16 +707,6 @@ If the route is set to a string (e.g. `"route": "foo"`), it will be normalized i
731707
"parent_span_id": null,
732708
"description": "<OrganizationContext>",
733709
"op": "http.server",
734-
"tags": {
735-
"deviceMemory": "8 GB",
736-
"effectiveConnectionType": "4g",
737-
"routing.instrumentation": "react-router-v3"
738-
},
739-
"dynamic_sampling_context": {
740-
"trace_id": "12312012123120121231201212312012",
741-
"sample_rate": "1.0",
742-
"public_key": "93D0D1125146288EAEE2A9B3AF4F96CCBE3CB316"
743-
},
744710
"origin": "auto.http.http_client_5",
745711
"data": {
746712
"route": {

develop-docs/sdk/expected-features/rate-limiting.mdx

+2-1
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,12 @@ While these [data categories](https://github.com/getsentry/relay/blob/master/rel
9292
- `attachment`: Attachment bytes stored (unused for rate limiting)
9393
- `session`: Session update events
9494
- `profile`: Profiling events
95+
- `profile_chunk`: Continuous Profiling chunks
9596
- `replay`: Session Replays
97+
- `feedback`: User Feedbacks
9698
- `metric_bucket`: Sentry Metrics sent via the `statsd` or `metrics` items. The `namespaces` component of the *quota_limit* defines which namespace(s) will be affected.
9799
- `internal`: a sentry/system internal event[^internal]
98100

99-
100101
- **Scope**: The unit / model in Sentry that quotas are enforced for.
101102
- `organization`
102103
- `project`
+129
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
---
2+
title: Feedbacks
3+
sidebar_order: 4
4+
---
5+
6+
This document is meant for Sentry SDK developers and maintainers of the Feedback ingestion pipeline.
7+
8+
## Feedback Protocol
9+
10+
Item type `"feedback"`. This Item contains an [event payload](/sdk/data-model/event-payloads/) encoded in JSON, with an additional `feedback` context object.
11+
12+
## `"feedback"` Item
13+
14+
### Feedback Context Attributes
15+
16+
| Key | Type | Description |
17+
| ---------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
18+
| message | string | Required. Comments of the user, describing what happened and/or sharing feedback. The max length is **4096 characters**. |
19+
| contact_email | string | The email of the user who submitted the feedback. If excluded, Sentry (not the SDK) attempts to fill this in with user context. Anonymous feedbacks (no name or email) are still accepted. |
20+
| name | string | The name of the user who submitted the feedback. If excluded, Sentry (not the SDK) attempts to fill this in with user context. Anonymous feedbacks (no name or email) are still accepted. |
21+
| url | string | The URL of the webpage the user was on when submitting feedback. This may be used to search for or set alerts on feedback. |
22+
| associated_event_id | string | The identifier of an error event in the same project. Use this to explicitly link a related error in the feedback UI. |
23+
| replay_id | string | The identifier of a related Session Replay in the same project. Sentry uses this ID to render a Replay clip in the feedback UI. |
24+
25+
### Event Attributes
26+
27+
Below is a recap of the [required attributes](/sdk/data-model/event-payloads/#required-attributes) for the event payload.
28+
For the full list of attributes, see [Event Payloads](/sdk/data-model/event-payloads/).
29+
30+
| Key | Type | Description |
31+
| -------------------------- | ------ | ----------------------------------------------- |
32+
| timestamp | number | UNIX timestamp of the current time (in seconds) |
33+
| event_id | string | Hexadecimal string representing a uuid4 value |
34+
| platform | string | Platform of the SDK |
35+
36+
### Example
37+
```json
38+
{
39+
"event_id": "9ec79c33ec9942ab8353589fcb2e04dc",
40+
"timestamp": "2011-05-02T17:41:36Z",
41+
"platform": "javascript",
42+
"contexts": {
43+
"feedback": {
44+
"contact_email": "[email protected]",
45+
"name": "John Smith",
46+
"message": "I love session replay!",
47+
"url": "https://sentry.io/replays/",
48+
"associated_event_id": "32fd1995636d446385016e2747623e11",
49+
"replay_id":"82840977e85b4ed3bc27f7b5b25cec15"
50+
}
51+
}
52+
}
53+
```
54+
55+
### Attaching Screenshots
56+
57+
You can associate screenshots with a feedback by sending image data as
58+
[attachment items](/sdk/data-model/envelope-items/#attachment), with `event_id`
59+
corresponding to the feedback item. We recommend sending the items in the same
60+
Envelope.
61+
62+
## Full Envelope Example
63+
64+
```json
65+
{"event_id":"9ec79c33ec9942ab8353589fcb2e04dc","sent_at":"2024-03-19T15:18:27.581Z","sdk":{"name":"sentry.javascript.react","version":"7.105.0"}}
66+
{"type":"feedback"}
67+
{
68+
"event_id": "9ec79c33ec9942ab8353589fcb2e04dc",
69+
"timestamp": "2011-05-02T17:41:36Z",
70+
"platform": "javascript",
71+
"contexts": {
72+
"organization": { "id": "0", "slug": "sentry" },
73+
"feedback": {
74+
"contact_email": "[email protected]",
75+
"name": "John Smith",
76+
"message": "I love session replay!",
77+
"url": "https://sentry.io/replays/",
78+
"associated_event_id": "32fd1995636d446385016e2747623e11",
79+
"replay_id":"82840977e85b4ed3bc27f7b5b25cec15"
80+
}
81+
},
82+
"level": "error",
83+
"environment": "prod",
84+
"release": "frontend@f00",
85+
"sdk": {
86+
"integrations": [
87+
"BrowserTracing",
88+
"BrowserProfiling",
89+
"Replay",
90+
"ReplayCanvas"
91+
],
92+
"name": "sentry.javascript.react",
93+
"version": "7.105.0"
94+
},
95+
"tags": {
96+
"sentry_version": "24.4.0.dev0",
97+
},
98+
"user": {
99+
"ip_address": "127.0.0.1",
100+
"email": "[email protected]",
101+
"id": 1,
102+
"name": "John Smith"
103+
}
104+
}
105+
```
106+
107+
## Feedback SDK Pipeline
108+
109+
A feedback captured by capture_feedback is processed by the SDK. Note: The event can be discarded at any of the stages, at which point no further processing happens.
110+
111+
### BeforeSendFeedback
112+
113+
SDKs should implement a `beforeSendFeedback` callback to allow users to modify the feedback before it is sent. This callback should be similar to the existing [`beforeSend`](/sdk/expected-features/#before-send-hook) callback used for events.
114+
115+
### Scope Data and Event Processors
116+
117+
The scope is applied to the feedbacks, including tags, user, trace and contexts. The scope’s _event processors_ are invoked, too.
118+
119+
### Rate Limiting
120+
121+
[Rate limiting](/sdk/expected-features/rate-limiting/) is applied to feedbacks in the same way as it is applied to events.
122+
123+
### Dropped Feedback Reports
124+
125+
There is no sample rate for feedbacks, as they are always sampled. However, a feedback can be discarded at any of the pipeline stages, for reasons like rate limiting or an invalid message (too large or empty). The SDK should report dropped feedbacks through [client reports](/sdk/telemetry/client-reports/).
126+
127+
### Session Replay Integration
128+
129+
When sending feedback, SDKs are expected to flush the current Session Replay, if running. This ensures a meaningful replay recording exists and can be included in the `replay_id` attribute of the feedback context.

0 commit comments

Comments
 (0)