Conversation
added 2 commits
September 4, 2026 15:53
Two related gaps made a busy instance hard to use. The sentry requests carried no scope at all: the project picked in the sidebar had no effect on the exceptions list, so the grouped view — the view that makes a shared instance usable — always showed every project mixed together. The backend has had project and environment filters all along, nothing was sending them. And nothing could be narrowed by time. /api/events/preview returned the whole project (tens of megabytes of JSON on our instance) and the sentry lists paged through all of history, so reaching an error from a particular hour meant scrolling. Adds a period selector to the header (1h … 30d, All time; stored in localStorage, 24h by default) whose value is sent as ?window= alongside the project, and refetches the feed and the sentry lists when either changes. Server-side support for window/project is in buggregator/server; an older server simply ignores the extra parameters.
On an instance with a live stream of events the sentry pages flickered constantly. Two causes: 1. The lists were replaced by a placeholder on every refresh. The template swapped the whole list for "Loading..." whenever loading was true, and the footer with the group count was hidden the same way, so each refetch blanked the page and shifted the layout. The composables now distinguish a first load from a background one (isInitialLoading = loading && !hasLoaded), so a refresh leaves the current list in place and Vue reuses the DOM by :key. A project/period/filter change still shows the loading state — that one is a response to a user action. 2. Refreshes happened about once a second. The event bus debounced by 1s, but a debounce never settles on a continuous stream: every incoming event pushed the timer and the lists were refetched constantly. A minimum interval of 10s between notifications is added; exception groups change slowly (counters going up), so nothing meaningful is delayed.
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.
On an instance with a live stream of events the sentry pages flicker constantly. Two independent causes.
1. The list was replaced by a placeholder on every refresh. The template swapped the whole list for
Loading...wheneverloadingwas true, and the footer with the item count was hidden the same way, so each refetch blanked the page and shifted the layout.The composables now distinguish a first load from a background one —
isInitialLoading = loading && !hasLoaded— so a refresh leaves the current list in place and Vue reuses the DOM by:key. A project/period/filter change still shows the loading state: that one is a response to a user action, not a background refresh.2. Refreshes happened about once a second. The event bus debounced by 1s, but a debounce never settles on a continuous stream: every incoming event pushed the timer out, so the lists were refetched constantly (
/api/sentry/countsalone was hit 1939 times a day on our instance). A minimum interval of 10s between notifications is added. Exception groups change slowly — it is mostly counters going up — so nothing meaningful is delayed.The live event feed still updates in real time by design; the existing Listening/Paused button is unchanged.
Testing
vue-tsc --build --forceclean,eslintclean on the touched files,vite build --minifysucceeds. Running in production on our instance; the lists now hold still while events keep arriving.