Commit Graph
4041 Commits
Author SHA1 Message Date
Loakesh Indiran 487e5e5681 fix(templates): review round 3 on amendment A
- Pending renames stay queued until their tuples move; every tuple on
  the old name, ownership and role grants, moves in one write that
  reports failure, and a failed one is retried on the next boot.
- A Custom email subject is plain text, so "API & worker" no longer
  reads "API & worker" for synthetics, downtime and on-call.
- The Content path substitutes in one pass over the authored tokens,
  so no inserted value is scanned again.
- The on-call and incident samples carry the chosen severity as their
  priority, and the incident sample reads its severity as its level.
- inferAppliesTo reads {name:30} and {name|modifier} tokens.
2026-11-04 16:38:11 +05:30
Loakesh Indiran cdb736e8be fix(downtimes): declare the test send's rate limit and keep it out of MCP
A test send posts into real channels, so MCP stays off for it.
2026-11-04 15:56:31 +05:30
Loakesh Indiran feaf6baf31 fix(templates): review round 2 on amendment A
- Migrations treat only o2_default_content as a seed, so a user row
  named o2_default moves to user_o2_default with its body and
  references; the boot rename still leaves the seeder's row alone.
- Migrations 137 and 143 record their renames, and boot moves the
  OpenFGA ownership tuples for them, then clears the list.
- A renamed name is cut to fit the 256-character column.
- Migration 144 turns a json templates column from an earlier build
  of 141 or 142 into text on Postgres.
- A downtime Send test goes through the new
  POST /v2/{org}/downtimes/{id}/test, which sends the started message
  through the live path to the row's own destinations, so it reads
  exactly what a real start sends.
- The Content path no longer rescans inserted values for the new
  tokens, and a literal kind token in a value survives.
- The Playground severity also sets the example's level text.
- The override picker reloads after Create template opens a new tab,
  and an imported template keeps its kind and applies_to.
2026-11-04 15:35:15 +05:30
Loakesh Indiran a1b66758aa fix(templates): View in OpenObserve opens the anomaly, check or downtime page
The anomaly link opens the detector's detail page on its detection tab,
the synthetics link uses the synthetics route that exists, and the
downtime link opens the downtime itself instead of the list.
2026-11-04 15:04:10 +05:30
Loakesh Indiran 594ed013d9 Merge remote-tracking branch 'origin/main' into feat/unified-notification-templates 2026-11-04 14:50:13 +05:30
Loakesh Indiran 4c3d2947ca fix(templates): review round on amendment A
- Main seeded only o2_default_content, so a default org row named like
  another kind default is a user row: migration 137 renames it and 143
  leaves it alone. Tests cover the rename and the fold.
- The templates columns of downtime_notifications and
  oncall_response_events are text, not json.
- Custom templates replace the new tokens first, so an inserted value
  is never scanned for them.
- A reserved rename moves the OpenFGA ownership tuples, and a rename
  in an org skips a name the default org holds.
- An incident card reads the incident severity as its level, and
  Warning or degraded gets the orange dot before the notice rule.
- A saved template opens Applies to in manual mode, and the draft keeps
  the list and the mode.
- The downtime Send test always renders on the server.
2026-11-04 14:50:10 +05:30
Subhra264 dc235a9609 fix(oncall): a member removed from a team no longer holds the problem (#16355) 2026-11-04 09:05:40 +00:00
Loakesh Indiran 7bd33c1655 fix(templates): a generic webhook keeps the downtime body main sent
Retiring prebuilt_downtime moved generic webhook downtime sends to the
o2_default envelope, which nests downtime_name under context. Downtime
now has a legacy payload like anomaly, synthetics and on-call, so a
generic webhook keeps {"text", "downtime": {...}}. The content
templates Playwright spec reads the top-level Slack blocks.
2026-11-04 14:34:36 +05:30
Huaijin a72a13d0c3 fix(self-profiles): run the self-profiles loop on single-role routers (#16379) 2026-11-04 08:56:09 +00:00
Loakesh Indiran 87a374216a feat(templates): one o2_default, no org default level, status dot
Amendment A to the unified notification templates design.

- D2: remove the org default level. The Default templates card, the
  default_templates setting and its validation, the legacy pointer
  backfill and the incident org override are gone. Resolution is the
  override, then the destination's template if it applies, then the
  compiled default. Stored template_source rows that say org_default
  still read.
- D3: one compiled content template, o2_default, for every kind, with
  the 17-field superset. A field whose variables are all blank hides,
  and another kind's variable reads blank instead of unknown. Each
  module maps its values onto the common keys. Migration 143 folds the
  five o2_default_* rows and the prebuilt_downtime pair into
  o2_default, moves their references and deletes the org pointer
  settings. The seeder repeats it on boot.
- D1: new status_dot, alert_level_label and alert_trigger_time_utc
  variables. Slack blocks sit at the top level with no attachment
  color. Teams, Discord and email lose their accent color and badge.
- D4 to D6: Playground heading and help line. The playground Kind
  drives the variable chips and guide. A template opens on its first
  Applies to kind.
- The downtime Send test renders o2_default on the server.
- The content templates Playwright spec expects the Critical default.
2026-11-04 13:50:49 +05:30
Loakesh Indiran e1a659a531 Merge remote-tracking branch 'origin/main' into feat/unified-notification-templates 2026-11-04 13:06:32 +05:30
Loakesh Indiran 8aa54b0d9b fix(templates): hide blank card fields and keep the facts each module sent
A content template now hides a field whose value is blank on every kind,
alerts included; legacy custom templates are unchanged. The editor preview
and test send start on Critical, so the sample Level is never blank.

notification_kind_label and notification_event_label give the title-case
kind and event (Alert, On-call, Firing). notification_kind and
notification_event stay lowercase because webhook bodies read them.

The compiled defaults keep what each module sent before: synthetics adds
Status, Environments and Time (check_environments, check_checked_at);
incident adds Stream, Threshold, Value and Triggered from the alert card;
on-call uses the engine's subject and page body as title and body, so the
priority no longer shows twice.
2026-11-04 11:59:43 +05:30
Loakesh Indiran b6bc3b1283 Merge remote-tracking branch 'origin/main' into feat/unified-notification-templates
# Conflicts:
#	src/core/src/alerts/alert.rs
#	src/core/src/downtimes/notify.rs
2026-11-04 11:19:30 +05:30
Subhra264 f595787e88 fix(oncall): serve the on-call pages list from bulk reads (#16344) 2026-11-04 05:46:26 +00:00
Loakesh Indiran be90173478 fix(downtimes): muted real-time rows, replica reads, notification bodies, replication ties (#16339) 2026-11-04 05:25:39 +00:00
Omkar Kesarkhaneandgithub-actions[bot] a3225b96e0 feat(traces): create alerts, add RED charts to dashboards and ask AI from the explorer (#16284)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-11-04 05:23:12 +00:00
Vamsi Karthik R 5c4f7a520c fix(synthetics): drop the stray "or" from the check-budget error (#16330) 2026-11-04 04:41:25 +00:00
Loakesh Indiran 81df8466be fix(oncall): name the template on each on-call delivery
The shared on-call sender returns the template name and source it
rendered with. The delivery ledger row stores them in a new nullable
templates column on oncall_response_events (migration 142), and the
Deliveries tab shows a Template line per row. Rows written before the
column stay blank. The downtime log and the ledger share one formatter.
2026-11-04 09:04:50 +05:30
Loakesh Indiran 9876b0f9bc Merge remote-tracking branch 'origin/main' into feat/unified-notification-templates 2026-11-04 08:45:03 +05:30
Loakesh Indiran 3d44ab7228 fix(templates): address UX review P1s F-01 to F-05
F-01: TemplateOverridePicker takes a context prop. An org default row
shows "Built-in <kind> message" and its own help, with no override
drawer. The drawer copy is kind-neutral for object overrides and names
the destinations the override does not fit.

F-02: the preview response lists empty_variables, the variables the
draft uses that render blank in the previewed kind's sample. The
preview panel shows them as "Empty for <kind>: ...".

F-03: under each override picker, "Will use: <name> (<source>)" follows
the server's order: override, destination template if it applies, org
default, built-in. The downtime notification log records the template
name and source per destination (migration 141) and shows a Template
column.

F-04: the template list has an Applies to column, an Applies to filter,
and a dismissable notice that counts user templates stored as every
kind, with a Review action that filters to them.

F-05: the alert edit page loads the org templates, so the Advanced tab
override select has options.
2026-11-04 08:44:57 +05:30
Hengfei Yang 6e854d53bb fix(fleet): persist the rollout strategy, three-column pipeline map, enterprise build fix (#16365) 2026-11-04 11:02:02 +08:00
Harsh MahajanandHengfei Yang 8dfdc45457 fix(auth): serve invites only behind auth middleware (#16363)
Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
2026-11-04 09:34:05 +08:00
Hengfei Yang 0eabd7d1f1 fix(fleet): record each audit event's fleet at write time and page the trail on the server (#16343) 2026-11-04 08:46:19 +08:00
Nikith Sai e1e21c9fef feat(license): gate features by license in the backend (#14933) 2026-11-04 00:27:11 +00:00
Loakesh Indiran 52337b5a08 test(templates): give the default-templates cache test its own org per run
The test stores an incident default for its org, and the local meta
store outlives the run, so a second run read that row and failed.
2026-11-03 23:46:09 +05:30
Loakesh Indiran 430218fc1c fix(templates): set the resolved event on alert recoveries
build_notification_context and the alert sample never set event, so a
recovered alert rendered {notification_event} as firing next to
alert_status=resolved. Both now follow resolved. Also moves the
saveCustomDestination comment back above its function.
2026-11-03 23:28:33 +05:30
Loakesh Indiran 6d81f347e1 Merge remote-tracking branch 'origin/main' into feat/unified-notification-templates
# Conflicts:
#	src/config/src/config.rs
#	src/infra/src/table/migration/mod.rs
2026-11-03 22:52:01 +05:30
Loakesh Indiran 0f321312cb fix(templates): downtime preview sample, event and applies_to mode
- Preview as Downtime renders a downtime sample (started, or ended
  for the resolved preview) instead of the alert sample, with a golden
  fixture beside the other kinds.
- A downtime start sends event Firing and an end or cancel Resolved,
  matching alert_status. Ending soon and extended stay Informational.
  Platforms still skip every downtime event.
- A reopened template stored as all kinds, whose body infers no kind,
  opens in the inferred mode instead of Chosen by you.
2026-11-03 22:45:15 +05:30
Loakesh Indiran 9a1d5aa640 fix(templates): pick a renamed default row name no org owns
A user row under o2_default_ in the default org is shared, so the
migration moves every org's references to its new name. If another
org already owned that name, its local row won the read and the
inherited reference changed body on upgrade. The replacement name
for a default org row must now be free in every org.
2026-11-03 22:32:31 +05:30
uddhavdave cd1264bfd1 fix(ai): LLM ingest for Vercel/OpenInference/OpenLLMetry/Langfuse, de-duplicated totals, prompt and playground fixes (#16286) 2026-11-03 16:19:42 +00:00
Ashish Kolhe 7e00c41e06 feat(workflows): call any workflow over an authenticated HTTP endpoint (#15706) 2026-11-03 16:06:09 +00:00
a3ee7b1827 feat(dashboards): add a Date variable type with a date picker, output formats and timezone (#16191)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
2026-11-03 16:02:09 +00:00
Shrinath Rao f595e0b7d6 test(alerts): stop the two rca_turn unit-test flakes in the enterprise build (#16326) 2026-11-03 15:20:39 +00:00
Subhra264 45be37ef24 fix(oncall): unsnooze a page so paging continues now (#16338) 2026-11-03 14:37:30 +00:00
Loakesh Indiran 6c211e963b fix(notifications): skip reason, read only default rows, plain synthetics description
- Destination skip names not_applicable for a user template whose
  applies_to excludes the kind; reserved rows keep "reserved".
- o2_default_* rows are read only for every caller, root included.
  The seeder writes them directly, so it still re-creates a missing row.
- Synthetics alert_description no longer wraps the error in a code
  fence. The card's Error field carries the error, so body_markdown
  has no escaped backticks.
2026-11-03 18:09:06 +05:30
Subhra264 fa128f2575 fix(oncall): Resolve ends the acknowledgement, plus 13 first-use UX fixes (#16287) 2026-11-03 12:22:02 +00:00
uddhavdave 43cdd4fe61 feat(ai-obs): fix the AI observability UX gaps (#15984) 2026-11-03 11:52:08 +00:00
Hengfei Yang 5074ae209f fix(fleet): list every fleet while RBAC is lifted, as item reads already allow (#16335) 2026-11-03 19:05:13 +08:00
Bhargav 0050546f2f fix(rum): accept a JSON array body on the RUM logs intake (#16324) 2026-11-03 10:38:27 +00:00
Hengfei Yang 730b95b29d fix(fleet): wait for an online collector before a rollout sends an unproven version (#16321) 2026-11-03 10:31:49 +00:00
Loakesh Indiran d98ac2db71 Merge remote-tracking branch 'origin/main' into feat/unified-notification-templates
# Conflicts:
#	src/config/src/config.rs
#	src/infra/src/table/entity/synthetics_checks.rs
#	src/infra/src/table/migration/mod.rs
#	src/infra/src/table/synthetics_checks.rs
#	src/infra/src/table/synthetics_refs.rs
#	src/super_cluster_queue/src/synthetics.rs
#	src/synthetics/src/service/composition.rs
2026-11-03 15:55:02 +05:30
Loakesh Indiran 6d69da63c9 fix: status page counts verdicts per run, not per tick (#16096) 2026-11-03 09:46:51 +00:00
Loakesh Indiran d1aff44ca5 fix(oncall): stage 2 fix, review pass 3
A platform skip is no longer counted as a delivery, so a test page or a
notice that only reaches PagerDuty, Opsgenie or ServiceNow reports that
nothing was sent. The policy handler checks the template first, writes the
policy, and only then writes and replicates the template override, so a
refused policy leaves no half-applied override. The upgrade line also scans
the team's own channel destinations for email and SNS.
2026-11-03 15:15:53 +05:30
Loakesh Indiran 11bdda9646 fix(synthetics): stage 2 fix, review pass 2
The private location card sets check_type, check_locations_line and an
empty check_error, so no field renders the unknown marker on Slack or
email. A downtime result names each destination (ok, skipped with its
reason, or the error) and fails only on a real error, so a platform skip
no longer logs a warning. slack_publish::send_post lost its last caller and
is deleted. A Slack app destination now gets the compiled card through
send_templated_post instead of the plain text through send_post.

Tests: the run event mapping, the location card render, the downtime
summary, the Slack app route, and email and SNS entries in every example
fixture. The on-call adapter drops an import that only its tests use.
2026-11-03 14:49:42 +05:30
Loakesh Indiran 5d0bdb21c9 fix(oncall): stage 2c, the maintenance coverage gap page names its stage 2026-11-03 14:37:02 +05:30
Loakesh Indiran 656e8256c7 Merge remote-tracking branch 'origin/main' into feat/unified-notification-templates 2026-11-03 14:24:05 +05:30
Loakesh Indiran bcc37562a0 feat(oncall): stage 2c, on-call sends through the shared send path
The on-call engine reaches notify() through a registered sender slot. Pages,
escalations, manual escalates and handoffs are Firing with the response id
as the platform key; coverage gap, verdict and test pages are
Informational, so platforms skip them. Email and SNS destinations now get
pages (D9), and a generic webhook keeps today's page JSON (D1). Nothing is
sent on acknowledge or resolve (strict D8, D4). oncall_policies gains a
template column (m20261210_000001) with validation and replication, and a
startup line names the policies whose email or SNS destinations now get
pages.
2026-11-03 14:24:05 +05:30
Loakesh Indiran b24f9e4425 Merge remote-tracking branch 'origin/main' into feat/unified-notification-templates 2026-11-03 14:11:06 +05:30
Loakesh Indiran 4bdea24558 fix(synthetics): stage 2a fix, private location down skips platforms
A location down is sent as Informational with no platform key, so
PagerDuty, Opsgenie and ServiceNow skip it with a logged reason (strict
D8). Every other destination gets the location card, and a generic webhook
keeps today's text body.
2026-11-03 14:10:56 +05:30
Loakesh Indiran 89718515b8 fix(alerts): stage 1 fix, strict D8 and review pass 1
D8 is strict: a platform resolve goes out only where a module sends a
recovery today. Incident and on-call Resolved are now a platform skip, and
the incident resolve hook, resolve_platform_destinations and its guard are
removed. Incidents keep the keyed trigger.

Review pass 1: incidents pass "[{event}] {title}" as the subject again,
and the subject rule is a pure function with a matrix test. Alerts set
cluster_name. The rename migration exempts only the exact seeded names, so
a root user's o2_default_foo in the default org is renamed. PlatformNoAck
is removed. The resolve answer mapping and the default_templates miss cache
have tests. A non-alert destination returns Ok(false) from the anomaly
sender again, as before this branch.
2026-11-03 14:10:56 +05:30