[pull] master from getsentry:master#1811
Merged
pull[bot] merged 19 commits intoKingDEV95:masterfrom Mar 20, 2026
Merged
Conversation
This needs to happen anyways during start up time when each of these modules gets loaded into the memory, so it's better to push this to build time, and save some CPU when the containers are started Signed-off-by: Vjeran Grozdanic <vjeran.grozdanic@sentry.io>
Remove `flex: 1` from `TableWrapper` so table rows keep their natural height when there are few items, instead of stretching to fill the entire widget card. The `flex: 1` was added so the empty state would be vertically centered, but it caused the wrapper to grow to fill its parent, which combined with `height: 100%` and `grid-template-rows: auto 1fr` in the underlying `GridEditable`, made data rows inflate to distribute the extra vertical space. Removing it fixes the row inflation at the cost of the empty state no longer being vertically centered — a follow-up can address that separately. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…n sandbox (#110971) - Don't show the message that the user is not an org on sandbox / demo users. This can happen as a kind of race condition which we should fix separately, but this fixes that sometimes users will see this when visiting sandbox after visiting their org.
|
🚨 Warning: This pull request contains Frontend and Backend changes! It's discouraged to make changes to Sentry's Frontend and Backend in a single pull request. The Frontend and Backend are not atomically deployed. If the changes are interdependent of each other, they must be separated into two pull requests and be made forward or backwards compatible, such that the Backend or Frontend can be safely deployed independently. Have questions? Please ask in the |
Replace `useTheme()` called during `Storybook.story()` setup — which runs at module initialization, outside any React component — with the built-in `gap` prop that `ScrollCarousel` already supports. The invalid hook call caused a TDZ error (`Cannot access 'c' before initialization`) in production builds due to module evaluation order differences.
Fix mobile layout issues in the trace details view. **AI Spans tab**: Add `overflow-x: auto` to the wrapper so the table scrolls horizontally on narrow screens instead of overflowing. **Trace header highlights**: On mobile, `HeaderRow` switches to column layout but children were centered (shrink-wrapped), so the `ScrollCarousel` had no width constraint and couldn't scroll. Fix by stretching children to full width. Also prevent highlight items from shrinking (`flex: 0 0 auto`) so the gap between them is preserved — the carousel handles overflow by scrolling instead. **Header layout**: Add `flex-shrink: 0` to prevent the header from collapsing when the trace content below is tall. **Before** https://github.com/user-attachments/assets/7f8c559d-9a59-491e-ac1d-c4a6fd19c953 **After** https://github.com/user-attachments/assets/5716219f-a733-4370-9683-40864f863130
Prioritize fields with a known definition (via `getFieldDefinition`) to the top of the group by dropdown in the Explore page. Previously all fields were sorted purely alphabetically, making it hard to find common fields like `span.op` or `span.description` among potentially hundreds of custom tags. Now known fields sort first (alphabetically within tier), followed by unknown/custom fields. Also adds a custom search filter so that during search, known fields are boosted above custom tags, and exact matches are boosted above partial matches. Scoring: exact+known > exact+unknown > partial+known > partial+unknown. The `fieldDefinitionType` prop is threaded through `ToolbarGroupByDropdown` so this works correctly for both spans (`'span'`) and logs (`'log'`). Refactors the logs toolbar to use the shared `useGroupByFields` hook instead of duplicating inline option-building logic. This consolidates known-fields-first sorting, `DISALLOWED_GROUP_BY_FIELDS` filtering (`id`, `timestamp`), and groupBy injection (ensuring selected values remain visible even when not in the tag collections) — all of which the logs toolbar was previously missing. Refs BROWSE-409 Made with [Cursor](https://cursor.com) --------- Co-authored-by: Claude <noreply@anthropic.com>
…SnakeSerializer (#111120) Add temporary metrics to understand whether API callers send camelCase or snake_case parameter keys. This emits an `api.serializer.parameter_key_case` metric with key_case and serializer tags from both CamelSnakeSerializer and CamelSnakeModelSerializer __init__ methods. The point of this is to investigate how customers actually use our APIs. We want to see whether it is feasible to choose _one and only one_ way of accepting API inputs. The cardinality for this metric should be bounded because we have only finite number of serializers. Co-authored-by: Claude <noreply@anthropic.com>
…opdown (#110879) Adds additional metadata to the metric selector side panel to give users more context about a metric at a glance. **Last seen** (`max(timestamp_precise)`) and **times seen** (`count(metric.name)`) are now requested alongside the existing metric options query and displayed in the detail panel. The `timestamp_precise` value is stored in nanoseconds and is converted to milliseconds for display. **Attributes** are loaded lazily by fetching string, number, and boolean attributes filtered to the selected metric. This is gated behind the `tracemetrics-attributes-dropdown-side-panel` feature flag. Hidden/internal fields are filtered out before display. Also fixes long metric names overflowing the panel by adding `wordBreak="break-all"`. Closes LOGS-597, LOGS-598, and LOGS-596 Example side panel: <img width="274" height="299" alt="Screenshot 2026-03-17 at 14 26 02" src="https://github.com/user-attachments/assets/15acca7b-5473-42aa-9ae5-bddc32bb94b1" /> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Empty `field=` parameters in the Explore page URL (e.g. `&field=timestamp&field=&field=parent_span`) cause validation errors when saving a query, because the empty string is treated as a required-but-blank field name. This adds defense-in-depth filtering at both the read and write boundaries: - **Read**: `getFieldsFromLocation` now filters out empty strings after `decodeList()`, so any stale `field=` in the URL is stripped before the app sees it. - **Write**: Both spans and logs `getTargetWithReadableQueryParams` filter empty strings before writing fields back to the URL. Fixes EXP-838
Removing the mutli-agg feature flag from registration. Ticket: LOGS-610
…empty (#110634) Both the `trace` and `trace-meta` endpoints default to a 14-day `statsPeriod` when no timestamp is provided. When a user navigates to a trace older than 14 days, both endpoints return empty data (zero counts / empty arrays) rather than an error, leaving the waterfall blank with no indication of why. This adds an automatic retry with a wider time window when a `statsPeriod`-based request succeeds but returns empty data: - `useTraceMeta`: retries the batch fetch with the wider period if all requests succeeded but the aggregated meta has zero spans, errors, and performance issues, and at least one trace has no timestamp anchor. - `useTrace`: adds a conditional fallback query (for both EAP and non-EAP paths) that fires only when the initial query resolves empty. The retry period is driven by `useDefaultMaxPickableDays()`, or falls back to 90 days. The retry is skipped entirely when the org's plan retention is already at or below the default 14-day window. Refs EXP-839 --------- Co-authored-by: Claude Sonnet 4 <noreply@example.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Update imports to reference taskbroker_client directly and remove the re-export shims. Requires getsentry/getsentry#19621
…110844) Replaces the hand-rolled keyboard navigation and selection logic in the trace metrics `MetricSelector` with React Aria's `useListBox`/`useOption` primitives and `@react-stately/list` for state management. The previous implementation manually tracked a `focusedIndex`, handled arrow key navigation, and clamped the index when the filtered list shrank. This was fragile and didn't provide proper ARIA attributes on options. React Aria gives us correct `role`, `aria-selected`, focus management, and keyboard interaction out of the box. Key changes: - `useListBox` + `useOption` manage the listbox role and option focus - `useListState` handles selection state, replacing manual index tracking - `useKeyboard` on the trigger opens the dropdown on ArrowDown/ArrowUp - `useKeyboard` on the search input moves focus into the list on arrow keys - Extracted `MetricListBoxOption` component for each virtualized option - Focus management on open/close is handled explicitly via `onOpenChange` - Removed the manual `focusedIndex` clamping effect --------- Co-authored-by: Claude Sonnet 4 <noreply@example.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Nick <nsdeschenes@users.noreply.github.com>
- Move more of the code over - Fix a bug where get_dataset isn't actually called with the same dataset strings as the API, rather its a set list from ExploreSavedQueryDataset, so define a new get_dataset function instead
Implements SizeContext scraps helper that facilitates setting default sizing values in certain elements --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Claude Sonnet 4 <noreply@example.com>
- We want to enable the new trace views for am1 customers so we shouldn't restrict our endpoints behind a separate flag anymore
… in all dataset configs (#111194) Ensure `getCustomFieldRenderer` passes `widget` and `dashboardFilters` through to `getFieldRenderer` across all dataset configs that support global filters. Previously only `errors` and `spans` forwarded these parameters, causing linked dashboards to not work correctly for the other datasets. **Updated datasets:** - `releases` — was ignoring both params - `errorsAndTransactions` — was ignoring both params - `logs` — was ignoring both params - `traceMetrics` — was ignoring both params No behavior change for `errors` and `spans` which already passed them correctly. Fixes BROWSE-458 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…11176) `sentry.exclusive_time_ms` is used as a key for a few formula definitions in the EAP spans dataset. It was intended to be used as a placeholder for an attribute on every span for the purpose of counting all spans. However, now that we rely on the span buffer and segment enrichment to set this attribute, that isn't always true - the buffer can be skipped or overrun, leading to unenriched spans. Replace these uses with `sentry.duration_ms` (the span duration), which actually is set on every span by definition. Fixes BROWSE-455.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )