-
Notifications
You must be signed in to change notification settings - Fork 0
Replays Self-Serve Bulk Delete System #11
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
base: replays-delete-vulnerable
Are you sure you want to change the base?
Replays Self-Serve Bulk Delete System #11
Conversation
This validates both the [Working Draft](https://www.w3.org/TR/reporting-1/#concept-reports) and the [Editor's Draft](https://w3c.github.io/reporting/#concept-reports) formats. Fixes [ID-730 - Accept current and upcoming data model](https://linear.app/getsentry/issue/ID-730/accept-current-and-upcoming-data-model).
…o 'low' (#93927)" This reverts commit 8d04522. Co-authored-by: roaga <47861399+roaga@users.noreply.github.com>
Missed in the initial commit, leading to some relevant logs being unannotated.
We have had a few tasks get killed at 10% rollout.
Also add a test, so that this doesn't happen again
Fixes DE-129 and DE-156 --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
These transitions should be matching
…` (#93946) Use `project_id` on the replay record instead of the URL (where it does not always exist). --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Also fixed `replay.view_html` -> `replay.view-html` --------- Co-authored-by: Michelle Zhang <56095982+michellewzhang@users.noreply.github.com>
…948) gets `npx @typescript/native-preview` passing again
This adds mode for all things tracing. This encompasses transactions/metrics/spans. Taken from https://github.com/getsentry/sentry/blob/feeaf393deeca8b97675bff23039c6320270aab5/src/sentry/runner/commands/devserver.py#L370
The conditions associated with a DCG can change over time, and it's good if we can be completely confident that they're consistent within a given task execution.
This is unused and most regex experiments have required broader changes to ensure that regexes are evaluated in a specific order (ex: traceparent). Removing this for now to simplify the code and very slightly improve runtime performance.
From some testing (on feedback lists of all different lengths), this prompt seems to work better. It doesn't write overly long sentences and also does a better job at "summarizing" versus just mentioning a few specific topics and leaving out others.
Just remove a couple custom Flex* classes in favor of the Flex primitive
This has been killed a few times. Refs SENTRY-42M7
…n table (#93892) <!-- Describe your PR here. --> [ticket](https://linear.app/getsentry/issue/ID-156/grouping-info-remove-type-field-from-ui) The Type field in the Grouping Info section of the issue details page was redundant. This removes the Type row from all variant types while keeping the underlying data structure intact. before  after 
### Changes Related to this PR: getsentry/sentry#93810. This is part 1 of the change, which is pulling out the new component and just adding it to the repo. Also includes some simplification of the logic in the base component. Part 2 will be replacing tables in widgets. ### Before/After There is no UI change as the table is not being used yet. There is a new story page for the component.
…93943) to prevent this issue from becoming too noisy, add a noise config
Unfortunately, 'event_data' went from being the variable for current event context to being the complete parsed data from Redis, and we continued logging it per group. That's more data than we should be logging even arguably once, let alone per group.
Co-authored-by: Abdullah Khan <abdullahkhan@PG9Y57YDXQ.local>
Adds some simple analytics to our endpoint so we can begin building a dashboard in Amplitude.
Previously, explore supported multiple y axis per chart, so each visualize supported multiple y axis. That functionality has since been removed for simplicity so update the types here to match. Keep in mind that saved queries still store them as an array so when serializing/deserializing, we still need to treat it as an array.
We'll need the `useGetTraceItemAttributeKeys` hook in other places so refactoring it so that it can exported.
- getsentry/sentry#93894 removed usage - getsentry/sentry-options-automator#4243 removed the last override
When the max segment ID is null the process fails. We should exit early since if there aren't any segments to delete there's nothing to do.
Greptile OverviewConfidence Score: 2/5
Important Files ChangedFile Analysis
Sequence DiagramsequenceDiagram
participant Browser
participant API as Browser Reporting Collector
participant Validator as BrowserReportSerializer
participant Metrics
Browser->>API: POST /reporting-api (array of reports)
API->>API: Check feature flag enabled
alt Feature flag disabled
API-->>Browser: 404 Not Found
end
API->>API: Validate request data is array
alt Not array
API-->>Browser: 422 Unprocessable Entity
end
loop For each report
API->>Validator: Validate report structure
Validator->>Validator: Check required fields
Validator->>Validator: Validate age/timestamp fields
alt Validation fails
API-->>Browser: 422 with validation errors
end
Validator-->>API: Validated report data
end
loop For each validated report
API->>Metrics: Record browser_reporting.raw_report_received
end
API-->>Browser: 200 OK
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
106 files reviewed, 1 comment
| def validate_timestamp(self, value: int) -> int: | ||
| """Validate that age is absent, but timestamp is present.""" | ||
| if self.initial_data.get("age"): | ||
| raise serializers.ValidationError("If timestamp is present, age must be absent") | ||
| return value | ||
|
|
||
| def validate_age(self, value: int) -> int: | ||
| """Validate that age is present, but not timestamp.""" | ||
| if self.initial_data.get("timestamp"): | ||
| raise serializers.ValidationError("If age is present, timestamp must be absent") | ||
| return value |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: Validation logic prevents valid reports from being accepted. When both age and timestamp are present, both validators reject the report, but according to the test on line 167-175, only one should be present at a time.
However, the validation methods will BOTH be called when both fields are present (because they're not mutually exclusive in the serializer definition), creating a situation where:
- If only
timestampis provided:validate_timestampchecks foragein initial_data (line 52) - passes - If only
ageis provided:validate_agechecks fortimestampin initial_data (line 58) - passes - If BOTH are provided: BOTH validators run and BOTH raise ValidationError
The issue: If timestamp is present but age is absent from initial_data, the check on line 52 if self.initial_data.get("age") evaluates to False/None and doesn't raise an error. This means a report with ONLY timestamp (no age) will pass validation correctly.
But there's a deeper issue: the validators should ensure exactly ONE of the fields is present, not that both are absent. The current logic doesn't enforce that at least one field must be present.
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/sentry/issues/endpoints/browser_reporting_collector.py
Line: 50:60
Comment:
**logic:** Validation logic prevents valid reports from being accepted. When both `age` and `timestamp` are present, both validators reject the report, but according to the test on line 167-175, only one should be present at a time.
However, the validation methods will BOTH be called when both fields are present (because they're not mutually exclusive in the serializer definition), creating a situation where:
1. If only `timestamp` is provided: `validate_timestamp` checks for `age` in initial_data (line 52) - passes
2. If only `age` is provided: `validate_age` checks for `timestamp` in initial_data (line 58) - passes
3. If BOTH are provided: BOTH validators run and BOTH raise ValidationError
The issue: If `timestamp` is present but `age` is absent from `initial_data`, the check on line 52 `if self.initial_data.get("age")` evaluates to False/None and doesn't raise an error. This means a report with ONLY `timestamp` (no `age`) will pass validation correctly.
But there's a deeper issue: the validators should ensure exactly ONE of the fields is present, not that both are absent. The current logic doesn't enforce that at least one field must be present.
How can I resolve this? If you propose a fix, please make it concise.
Test 5
Replicated from ai-code-review-evaluation/sentry-greptile#5