Files
openobserve/src/super_cluster_queue
Ashish Kolhe 23e816b1e4 feat: External Alert Sources incident ingestion (#13578)
## Summary
Adds a full "External Alert Sources" feature so OpenObserve Incidents
can serve as ingestion/correlation layer for third-party alert tools
(Grafana, Alertmanager, generic webhooks):

- Token-authenticated inbound webhook endpoint (`o2iat_` tokens) that
normalizes Grafana/Alertmanager/generic payloads and correlates them
into Incidents alongside internally-generated alerts.
- Incident integrations CRUD (create, list, enable/disable, rotate
token, delete — default integration protected from deletion) with
per-sender observed status.
- Settings UI: single always-open alert sources table (merged from an
earlier two-panel design), shared-token badge, add/rotate/delete flows.
- Incident detail UX: contributing-alert Source/Labels columns, "view
raw payload" action (surfaces the exact webhook JSON received), and an
external-source badge on the incident header so it's obvious at a glance
whether an incident has external contributors.
- **Auto-resolve**: incidents now close automatically once every
contributing external alert reports `status: resolved` — previously
required manual resolution even when the source alert cleared.

## Notable follow-up fixes bundled in
- Rebased onto latest `main`; repaired two build breaks surfaced by
upstream changes that landed after this branch diverged
(`CorrelationSubject` refactor's new `eval_level` param, and a new
`SeverityEscalated` correlation outcome) — both textually merged clean
but were semantically incomplete for the external-event path.
- Removed the `O2_INCIDENTS_EXTERNAL_SOURCES_ENABLED` enterprise config
flag (companion removal in o2-enterprise) — external sources are now
gated solely by `O2_INCIDENTS_ENABLED`, removing a redundant toggle.

## Test plan
- [x] `cargo build --no-default-features --features enterprise` — clean,
no warnings introduced
- [x] `cargo clippy` on touched crates (`infra`, `openobserve-core`,
`openobserve-api-management`, `openobserve-api-http`) — no new warnings
- [x] `cargo fmt --check` — clean on all touched files
- [x] `cargo test` — all tests in touched modules pass
(`alert_incidents`, `incident_integrations`, `external_alerts`,
`alerts::*` — 274/274); two unrelated flaky DB-pool-timeout tests
(`db::tests::test_delete`,
`table::ratelimit::tests::test_add_batch_missing_rule_id`) confirmed
pre-existing and pass in isolation
- [x] Frontend: `vitest run` on all touched components — 156/156
passing; `vue-tsc --noEmit` clean
- [x] Manually verified end-to-end against a running dev server:
fired/resolved external alerts, confirmed auto-resolve, delete, and
raw-payload retrieval all work against real HTTP calls
2026-08-02 16:16:50 +00:00
..