feat(insights): multi-project Sentry archive #3
Reference in New Issue
Block a user
Delete Branch "feat/sentry-multi-project"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The
sentry-archivejob was hardcoded to a singleSENTRY_PROJECTslug. Now that sase has a second Sentry project (sase-web, browser SDK live as of 2026-06-01), the worker has to pull both — otherwise frontend events stay only in Sentry's UI and never reachsentry_eventsfor the BIP to pick up.Changes
SENTRY_PROJECTbecomes a CSV (e.g.python,sase-web); single value still works.sentrySourceProjectfrom the Sentry payload.errorbut doesn't abort the rest.perProject: { [slug]: { fetched, inserted, duplicate } }. Pipeline log gains a[python=N/M sase-web=N/M]breakdown.sentrySourceProjectonSentryIssue+SentryEvent(+ composite index). Pure nullable add —prisma db pushon container start is safe; existing rows stay null until next sync touches them.Verification
pnpm --filter @panel/worker exec tsc --noEmit✓pnpm --filter @panel/web exec tsc --noEmit✓pnpm --filter @panel/web exec prisma generate✓Post-merge
SENTRY_PROJECT=python,sase-webon panel-worker Coolify appjk8gsg04w0kwo4sc4s84k8cc.🤖 Generated with Claude Code
The sentry-archive job was hardcoded to a single SENTRY_PROJECT slug. Now that sase has a second Sentry project (sase-web, browser SDK), the worker has to pull both — otherwise frontend events live only in Sentry's UI and never reach the panel's sentry_events table for the behavioral-insight pipeline to pick up. Changes: - SENTRY_PROJECT becomes a CSV (e.g. "python,sase-web") parsed once at module load into PROJECTS[]. Backward-compatible: a single value keeps working exactly as before. - Issues are fetched org-wide in a single loop (unchanged endpoint) but each issue's Sentry project slug is now persisted via the new `sentrySourceProject` column on sentry_issues. - Events are project-scoped on Sentry's side, so the job iterates projects and calls listEventsPage(slug, cursor) for each. Per-project pagination + dedup is preserved. A project-level failure is recorded in `error` but doesn't abort the other projects. - New result shape: `perProject: { [slug]: { fetched, inserted, duplicate } }` Pipeline log gains a `[python=N/M sase-web=N/M]` breakdown so it's obvious at a glance which project produced what. - Schema: nullable `sentrySourceProject` on both SentryIssue and SentryEvent (+ composite index per projectKey for queries that want to filter "panel project = sase AND sentry project = sase-web"). Migration is a pure nullable add — `prisma db push` on container start is safe. Existing rows stay null until next sync touches them. After merge, set `SENTRY_PROJECT=python,sase-web` on the panel-worker Coolify app and redeploy.