Flagsmith / Flagsmith/flagsmith
Unify base_url config with region dropdown + manual override
- Dominant language
- Python
- Stars
- 6.6k
- Forks
- 567
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 121
Description
Several analytics/APM integrations require a `base_url` to pick the regional endpoint, but each one is configured ad-hoc — some are a free-text input (Heap after #7732, Mixpanel after #7792, Amplitude, New Relic, Datadog), one is already a dropdown (Segment via `ChoiceField`), and a few mix in per-tenant URLs (Grafana, Rudderstack, Dynatrace).
Unify this so that any integration whose `base_url` represents a data centre / region offers a dropdown of known regional presets, while always allowing the user to enter a URL manually as a fallback.
One option worth considering (not a hard requirement): drive the preset list from the `integrations` feature flag so regions can be added/edited via remote config without a deploy.
## Integration audit
Where each integration's destination URL comes from today, and whether it has multiple regions / tenants worth surfacing as presets.
| Integration | URL model | Regions / tenants | Needs looking into? |
| --- | --- | --- | --- |
| Amplitude | `base_url`, default `https://api2.amplitude.com` | US, EU (`https://api.eu.amplitude.com`) | Yes — add EU preset |
| Datadog | `base_url`, required | US1, US3, US5, EU, AP1, US1-FED | Yes — add region presets |
| Dynatrace | `base_url`, required | Per-tenant URL (`{env-id}.live.dynatrace.com`) | No — keep free-text |
| GitHub | OAuth / GitHub App | github.com, GitHub Enterprise Server (per-tenant) | Verify Enterprise Server is supported; otherwise no change |
| GitLab | `gitlab_instance_url`, default `https://gitlab.com` | Per-tenant URL | No — keep free-text |
| Grafana | `base_url`, default `https://grafana.com` | Per-tenant URL (Grafana Cloud or self-hosted) | No — keep free-text |
| Heap | `base_url`, default `https://heapanalytics.com` (after #7732) | US, EU (`https://heapanalytics.eu`) | Already in scope via #7732 — convert to preset |
| LaunchDarkly (import) | Hardcoded `https://app.launchdarkly.com` | US, EU (`https://app.eu.launchdarkly.com`) | Yes — currently hardcoded, no EU support |
| Mixpanel | Hardcoded `https://api.mixpanel.com` (base_url added in #7792) | US, EU (`api-eu.mixpanel.com`), IN (`api-in.mixpanel.com`) | Already in scope via #7792 — convert to preset |
| New Relic | `base_url`, required | US (`insights-collector.newrelic.com`), EU (`insights-collector.eu01.nr-data.net`) | Yes — add region presets |
| Rudderstack | `base_url`, required | Per-tenant data plane URL | No — keep free-text |
| Segment | `base_url`, `ChoiceField` US / EU | US (`api.segment.io`), EU (`events.eu1.segmentapis.com`) | Already a dropdown — align with new schema |
| Sentry | `webhook_url`, required | Per-tenant webhook URL | No — keep free-text |
| Slack | OAuth | slack.com only | No |
| Webhook | `url`, required | Customer-provided URL | No — keep free-text |
Contributor guide
Assessment
This issue has not been assessed yet.