[pull] master from getsentry:master#1606
Merged
pull[bot] merged 72 commits intoKingDEV95:masterfrom Jan 7, 2026
Merged
Conversation
Adds a getter for deriving the intended units for the metrics widgets in the tracemetrics dataset config. Adds it to the widget viewer chart and dashboard widgets. The result is that we have visible units in the tooltip UI and the yAxis. This involves setting the units object in the widget queries component which then passes it down and we pass it along to where it needs to be read. It seems like in other datasets we've used the aggregate name to derive this, but I'm doing it by series name because e.g. `avg(memory)` (probably bytes) is different from `avg(latency)` (probably ms) which is a possibility in the future.
…105792) ## PR Details + Auto Open PRs will now be greyed out if Auto Trigger fixes is Off. + Made small changes to the name and description text too. Fixes ENG-6241
Makes it so the charts use the same fidelity ladder as spans and logs since these are all EAP based.
…ta (#105810) This should hopefully catch when the explorer.metadata analytics call doesn't match the rendered # of logs.
…104552) We render the bulk of our HTML via ReactPage. Right now that endpoint is marked as `all_silo` to make integration with tests simpler. Switch these endpoints to control as we're trying to have a minimal number of endpoints marked as `all_silo` and I want to better understand the scope of test failures from this change. Refs INFRENG-238
…5806) `GetTagValues` lived in `sentry/views/dashboards/datasetConfig/base` but was the official type of the `getTagValues` prop of the `SearchQueryBuilder` from `static/app/components/searchQueryBuilder/*`. This moves `GetTagValues` to `static/app/components/searchQueryBuilder` and updates all callers.
This adds a new "Create Alert" drawer with a similar, slightly stripped down alert creation form. This allows users to quickly create a new alert for their monitor without being taken out of the experience.
<!-- Describe your PR here. --> <!-- Sentry employees and contractors can delete or ignore the following. --> ### Legal Boilerplate Look, I get it. The entity doing business as "Sentry" was incorporated in the State of Delaware in 2015 as Functional Software, Inc. and is gonna need some rights from me in order to utilize my contributions in this here PR. So here's the deal: I retain all rights, title and interest in and to my contributions, and by keeping this boilerplate intact I confirm that Sentry can use, modify, copy, and redistribute my contributions, under Sentry's choice of terms.
#105801) This PR fixes a bug in taskworkers that causes a stale redis lock to prevent all tasks with the same cron schedule from running. - When a task's schedule is shortened but an old Redis lock with a long TTL still existed, the scheduler enters a tight loop trying to spawn the "overdue" task, blocking all other tasks with the same schedule. Previously, syncing with a stale value made the scheduler think the task was hours overdue, causing remaining_seconds() to return 0. The task was pushed back onto the heap with `remaining=0`, keeping it at the top of the heap. Since is_due() also returned True (it recalculates from last_run), the while loop never broke, and other tasks never got a chance to be processed - the scheduler was in an infinite loop until the cache entry expired, and prevent all other tasks with the same schedule from running. - When we can't acquire the lock, set `last_run = now` instead of the stale Redis value. By setting `last_run = now`, the scheduler correctly calculates the next scheduled time from the current moment, pushes the task back with a delay of the cron schedule and breaks the loop to allow other tasks to run. Closes TET-1692 --------- Co-authored-by: Mark Story <mark@mark-story.com>
#105780) Refs SENTRY-4A8H We're seeing timeouts when generating escalating forecasts on the postgres query. We previously decreased the iterator size from 10k to 5k in #104662, but this didn't improve error rates. I believe this is since the queries seem to start timing out in the ~thousands of groups queried, so stepping through by 5k didn't affect the timeouts at all. This decreases the iterator step size to 1k, which should result in smaller queries.
…HR (#105464) Our legacy redirect scheme to event/issue details (from the event IDs displayed in the Discover table) currently fails in `devserver` and `dev-ui`. This redirect (via the `ProjectEventRedirect` component) relies on a legacy XHR-based method (via Django returning a 302). This PR migrates this redirect logic to a modern API-based approach using `useApiQuery`. This logic fetches the event details (e.g. the event's group ID) from the API using the event ID, project ID, and organization ID. The group ID is then used to construct the issue event details link that the user should be redirected to. The redirect should now work in `devserver`, `dev-ui`, PR deployments, and `production`. Before changes (`production`): - Discover homepage: `https://sentry.sentry.io/explore/discover/homepage/?dataset=errors&field=title&field=project&field=user.display&field=timestamp&name=All%20Errors&project=1&query=&queryDataset=error-events&sort=-timestamp&statsPeriod=7d&yAxis=count%28%29` - Redirected to: `https://sentry.sentry.io/issues/7091972599/events/05a2cfe07f5344868dd593739de2c726/?project=1` After changes (`devserver`): - Discover homepage: `https://dev.getsentry.net:8003/organizations/sentry/explore/discover/homepage/?dataset=errors&field=title&field=project&field=user.display&field=timestamp&name=All%20Errors&project=3&query=&queryDataset=error-events&sort=-timestamp&statsPeriod=30d&yAxis=count%28%29` - Redirected to: `https://dev.getsentry.net:8003/organizations/sentry/issues/19/events/eeb8190e8f504bd9a069601ae192d814/?project=3&referrer=discover-events-table` After changes (`dev-ui`): - Discover homepage: `https://dev.getsentry.net:7999/explore/discover/homepage/?dataset=errors&field=title&field=project&field=user.display&field=timestamp&name=All%20Errors&project=1&query=&queryDataset=error-events&sort=-timestamp&statsPeriod=7d&yAxis=count%28%29` - Redirected to: `https://dev.getsentry.net:7999/organizations/sentry/issues/6803546951/events/d207da09bdc9489597d7786bfbfc8ac3/?project=1&referrer=discover-events-table`
…ps (#105808) This is the page available at `/settings/legal/`
Fix DE-349
…#105577) ## Summary Consolidates `segmentedControl.chonk.tsx` into `segmentedControl.tsx` and removes chonk naming prefixes. ## Changes - Moved all content from `segmentedControl.chonk.tsx` to `segmentedControl.tsx` - Renamed styled components: - `ChonkStyledGroupWrap` → `GroupWrap` - `ChonkStyledSegmentWrap` → `SegmentWrap` - `ChonkStyledLabelWrap` → `LabelWrap` - `ChonkStyledVisibleLabel` → `VisibleLabel` - Removed `export` keyword from `Priority` type (internal-only) - Updated import to use `button/styles` instead of `button/styles.chonk` - Deleted `segmentedControl.chonk.tsx` ## Test plan - ✅ Linting passes - ✅ Knip passes (no unused exports) - ✅ No remaining chonk references (except external dependencies and intentional DO_NOT_USE naming)
`pull_request_review` and `pull_request_review_comment` have stopped working a while ago. This change stops the forwarding to Overwatch.
Fixes JAVASCRIPT-364G and JAVASCRIPT-363Z `subscription.partner` is undefined when `subscription` is undefined, which occurs sometimes for newly created orgs where the subscription has not been instantiated yet.
Follow-up to #104611. The old Color and Typography pages are outdated and can be removed with the introduction of the new [Tokens](https://sentry.sentry.io/stories/principles/tokens/) page. This PR updates the links on the landing page, removes the outdated stories, and removes the now unused images for those stories.
#105784) If a workflow is being deleted, we should disregard any scheduled attempts to evaluate it. It's still possible for it to be deleted while we're processing since we don't entirely do an up-front fetch, but this ensures a subsequent retry will not have the same issue. Addresses ISWF-819.
Fix DE-338
…5795) I noticed that selecting an arbitrary period in the auditLog list works, but displays `Invalid Period` after selection. The filtering itself always worked because `statsPeriod` is correctly written to the url in any case. before: https://github.com/user-attachments/assets/d4967fae-34ec-4f5e-bf7d-d40268351835 after: https://github.com/user-attachments/assets/927f92c8-bf6b-4297-88df-2a7bec2784d3
Fixes back navigation when a user is viewing a metric issue, clicks to view monitor details, and wants to return to the metric issue. Cursor actually caught this [here](https://github.com/getsentry/sentry/pull/100577/files#r2389538614)
We're going to be removing this type from the codebase, these are some easy instances to cleanup
… functions (#105692) Extract result processing and backfill creation logic from handle_result() into two standalone module-level functions, so that they’re more easily shared with our retry task. First step to adding in retries for results that are received out of order.
…5781) uses the in-memory test router instead of our custom mocks --------- Co-authored-by: George Gritsouk <989898+gggritso@users.noreply.github.com>
…105785) Uses the in-memory test router instead of the manual mocks. The advantages are clear for these tests as you no longer need to manually rerender the component to emulate when query parameters change since they now change as they would in the browser. Deleted one test that doesn't seem to be true and was passing because it was checking the wrong thing. `does not allow sorting by transaction name when widget is using metrics` there doesn't seem to be anything stopping the sorting.
I added placeholder dashboard configurations a few weeks ago, but they're empty. This PR adds the widget configurations so the dashboards actually have widgets in them. This is a best-effort match against the current Mobile Vitals insights so _many_ things are incorrect/missing. This is meant to be a starting point for a full audit of what's needed for full support. **e.g.,** <img width="1429" height="1018" alt="Screenshot 2026-01-06 at 5 00 10 PM" src="https://github.com/user-attachments/assets/78e45cde-917f-4d82-9687-531a05028c92" />
…nNotifications` component (#105772) Migrates the `SubscriptionNotifications` route off of `deprecatedRouteProps`. https://www.notion.so/sentry/Frontend-TSC-Project-Remove-all-uses-of-deprecatedRouteProps-true-26a8b10e4b5d8015a6a2dd14f9d41dd7
…rmation` component (#105777) Migrates the `BillingInformation` route off of `deprecatedRouteProps`. https://www.notion.so/sentry/Frontend-TSC-Project-Remove-all-uses-of-deprecatedRouteProps-true-26a8b10e4b5d8015a6a2dd14f9d41dd7
…omponent (#105779) Migrates the `UsageLog` route off of `deprecatedRouteProps`. https://www.notion.so/sentry/Frontend-TSC-Project-Remove-all-uses-of-deprecatedRouteProps-true-26a8b10e4b5d8015a6a2dd14f9d41dd7
Closes [AIML-2173: Add UI analytics (amplitude)](https://linear.app/getsentry/issue/AIML-2173/add-ui-analytics-amplitude) Todo: call useReferrer in one place and pass to components, to avoid multiple effects - centralizes existing seer events in a new file (shouldn't affect them) - make a stable util to get the current route string, e.g. `/issues/:groupId/` for these events: **Segmented by referrer** panel opened chat sent new session started tool link clicked (includes tool.kind) **Segmented by "surface" (eg global_panel, to differentiate from other features like dynamic grouping)** chat sent new session started **Global panel specific** panel opened tool link clicked **No params** rethink requested copied to clipboard copied link to chat
There are several equations that have no units (all percentage based ones in this case), this PR allows us to define units for prebuilt dashboards. Eventually we could make this a field in the db, and allow it to be clone able/user customizable. There's some wacky stuff I had to do to get the units working for line charts that have a groupby, the series name isn't the equation name in that case, it's the group name. So there's no easy way to map between the two. Please let me know if you have any better suggestions here. <img width="541" height="236" alt="image" src="https://github.com/user-attachments/assets/51e96be0-e9af-4fa8-9678-a41148799973" /> <img width="434" height="474" alt="image" src="https://github.com/user-attachments/assets/f986bd7e-8c54-4508-ad3c-689dc37bd036" /> <img width="454" height="241" alt="image" src="https://github.com/user-attachments/assets/b455a7ce-bc23-4038-8510-5870bc773395" />
The only usage was passing the default values...
when ff off, panel renders as null but noticed this request is still being made by useExplorerMenu
There is a mix of Icons that were used on bespoke backgrounds and thus using the white color variant. Since "white" is not an official variant, I'm moving these to styled(Icon) and passing the color prop directly. In the future, we will want to entirely avoid this pattern by using the right design system primitives for either buttons or icons.
#105829) In our grouping algorithm, certain stacktraces are considered too low quality to use, among them certain single-frame JavaScript stacks which contain code from unnamed functions[1]. When we find such a stack, we set the frame component to be non-contributing, with a hint explaining why. However, this step is skipped if the frame is already marked as `contributes: False`. On the one hand, this makes sense: Why bother to mark a frame as ignored if it's already being ignored? On the other hand, skipping this step means we also skip adding the hint. This PR therefore removes the `contributes` check in the relevant `if` statement, so that we're not only ignoring the frame, we're ignoring the frame and also explaining why. [1] Specifically, we ignore such stacks if their single frame comes from a file whose `abs_path` is something other than a URL. Or at least, that's what we intend to do. In practice, this check is implemented backwards, something which will be fixed in the upcoming new grouping config. But the fact that it's currently backwards explains how one of the snapshots affected by this change can contain a frame component which says it's for a non-URL frame even though its child filename component says it does in fact come from a URL. This has been wrong for a long time, it's just much more obvious now that this PR includes the hint in the grouping info.
Fixes [NEW-665: Verify that we backfilled uptime detector names for auto-generated monitors](https://linear.app/getsentry/issue/NEW-665/verify-that-we-backfilled-uptime-detector-names-for-auto-generated)
Quick fix for broken link when trying to create an alert from an
insights chart or from explore.
If we add a trailing slash
to`${makeMonitorCreatePathname(organization.slug)}settings` results in
the final url being `monitors/new/settings/organization/` instead of
`monitors/new/settings/`
This seems to be do to a regex in `normalizeUrl` which replaces
`/settings/` with `/settings/organization`
https://github.com/getsentry/sentry/blob/309a2c69be51ba9359d15526d905ff3107235d22/static/app/utils/url/normalizeUrl.tsx#L10-L13
This is just a quick fix to put up before we figure out if it's safe to
modify the regex
This allows structured search over 'builds' (PreprodArtifacts). Start with handling only `app_id` (and two aliases `package_name` for Android and `bundle_id` for iOS). We can add more fields in follow ups. Long term hopefully this can replace both of the other 'list-build' endpoints however I don't want to break them while this is under construction. --------- Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
…05782) Add logic to detect and queue out-of-order uptime results for retry processing instead of immediately creating backfill misses. We keep this functionality behind a feature flag so that we can try it out first. <!-- Describe your PR here. -->
) This PR introduces the concept of `SeerOperator` and `SeerEntrypoints`. The Operator and Entrypoint will work in tandem to allow triggering and issuing updates to external services during a seer workflow (in this case, an autofix run). - The **SeerOperator** handles all of the interfacing with seer and does not care or know about what service the entrypoint is talking to. - It connects to a registry of entrypoints, and when autofix updates come through, will signal to those registrants if they've previously interacted with a run. - It also determines what is needed from a third party signal (i.e. Slack Webhook) to trigger a seer workflow (for example, an organization, user, and group for autofix). - This will ensure any more entrypoints that get added later on (for example, Discord, MS Teams, or even non-chat integrations like GitHub comments) will also trigger the same workflows with the same signatures/contract - The **SeerEntrypoint** is a protocol for that handles all of the interfacing with a specific provider, for example Slack. - In practice, specifying callbacks like `on_trigger_autofix_error` and `on_trigger_autofix_success`, the dev can create provider-specific workflows depending on what capabilities the platform actually has. For example, if in slack, maybe we send an ephemeral message to indicate we started a run, for github comments, maybe we just react. - You then implement `create_autofix_cache_payload`, which will be passed back to your `on_autofix_update` method when Seer issues a webhook. **This is critical to back and forth interactions since we cannot do polling in Slack** (for example). In this PR, I've only implemented the entrypoint protocol, the actual slack entrypoint will come in a follow up. The operator is all there though, tests and all 👍
…etails` route (#105836) Migrates the `BeaconDetails` admin route off of `deprecatedRouteProps`. https://www.notion.so/sentry/Frontend-TSC-Project-Remove-all-uses-of-deprecatedRouteProps-true-26a8b10e4b5d8015a6a2dd14f9d41dd7
) - removes "Request access" in menu when that is not true - fixes button placement and switches to compact select - add basic test before <img width="1266" height="704" alt="image" src="https://github.com/user-attachments/assets/5c4e62d9-4a4f-4c83-a8dc-db7ee44ce362" /> after <img width="781" height="370" alt="image" src="https://github.com/user-attachments/assets/f230f68b-e8e9-4076-8a48-24619c301100" />
In our grouping algorithm, one of our checks for whether or not to use a given stacktrace is implemented backwards: We claim to ignore a frame if its `abs_path` isn't a URL, but then only actually do that if its `abs_path` is in fact a URL. This will be fixed in the upcoming new grouping config, but in the process of making that change, it became clear that some of our relevant tests are quite hard to reason about. Specifically, we have two grouping snapshot inputs called `frame_ignores_module_if_page_url` and `frame_ignores_module_if_page_url-2`, which have a few problems: - `frame_ignores_module_if_page_url` doesn't illustrate what it says it does at all, in that the module isn't in fact ignored. What it does turn out to illustrate is the URL/non-URL frame ignoring bug discussed above. - `frame_ignores_module_if_page_url-2` does illustrate the module ignoring, but a) its title isn't as clear as it might be, b) it includes a function component, which muddies the waters in terms of what's ignored or not, and c) though it doesn't currently illustrate the URL/non-URL frame ignoring behavior which was previously discussed, once the bug is fixed it will, which will be another thing adding mud to the aforementioned proverbial water. To fix these problems, this PR adds three new inputs: one to illustrate the module ignoring (and only the module ignoring), and one each to illustrate the URL and non-URL frame ignoring cases, respectively. This should make it easier to see the effects of the bug fix, as only the latter two inputs should be affected. (A follow-up PR will remove the bad inputs. Doing both in a single PR was confusing GitHub, making it think that things had been renamed and slightly modified rather than replaced.)
This is a follow-up to #105843, which aimed to replace some confusing grouping test inputs with clearer ones. When that PR included both adding the new inputs and removing the old ones, GitHub erroneously detected file renames rather than replacements. That PR was therefore restricted to the file addition half of the process, with the file removal half included here.
closes https://www.notion.so/sentry/UI-subscription-page-nits-2cc8b10e4b5d80658675c8b1975701f4?source=copy_link <img width="402" height="390" alt="Screenshot 2026-01-07 at 1 47 50 PM" src="https://github.com/user-attachments/assets/2fa645a4-aa0a-4b63-bb84-5f1d4243454e" />
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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 : )