Correlate HTTP requests with scenarios and X-Ray, including embedded fragments

未关闭
#28 0 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 6 天内回复

@fateeand 已经在做这个了。

开始于 2026年10月27日。

  • #29 来自 @fateeand —— 未关闭

评估

这个 Issue 还没有评估数据。

描述

enhancement

Problem

Backend logs and AWS X-Ray traces can't be tied to the user journeys the library records:

  1. No scenario id attached to the backend requests. A scenario's id links its RUM record, BI events and client logs, but requests made during the scenario carry nothing the backend can log or search by.
  2. Relative URLs get no X-Ray header. The RUM client checks its X-Ray rule against the URL exactly as the app passes it. Angular HttpClient passes relative URLs (/api/...), but the library's default rule only matches absolute same-origin URLs. So most HttpClient requests go out without X-Amzn-Trace-Id, even in a single app, and the backend can't continue the browser's trace.
  3. Fragment requests aren't traced at all. In a micro-frontend page, the RUM client runs only in the shell and patches only the shell's fetch and XMLHttpRequest. Each fragment (e.g. Web Fragments) runs in its own hidden iframe with its own copies of these, so its requests get no X-Ray header and no RUM HTTP events.

Proposed change

  • Scenario header. Add uwtScenarioHeaderInterceptor() and uwtScenarioContext(scenario). A request marked with a scenario gets an X-Uwt-Scenario-Id: <scenario.id> header; apps can rename it with { headerName }. Requests are marked one by one, because several scenarios can run at once and nothing else can tell which one a request belongs to. The header is sent only on same-origin requests, only while telemetry is on, and never on unmarked requests. The interceptor only adds the header: settling the scenario stays with the caller or traceScenario.
  • Relative URLs. Treat relative URLs as same-origin in the default http telemetry config.
  • Fragments. Let the shell's RUM sink trace fragments. At startup, a fragment's 'broadcast' sink hands its window to the shell, and the shell applies the RUM client's own fetch/XHR plugins to it. The fragment keeps its own fetch, XHR and zone.js. The shell lets go of the window when the fragment is removed or destroyed.
  • Backend convention (documented). The backend logs the header as scenarioId and adds it to its X-Ray trace as the scenarioId annotation, so annotation.scenarioId = "<id>" finds every trace of a journey.

Acceptance criteria

  • Marked same-origin requests carry X-Uwt-Scenario-Id. Unmarked requests, cross-origin requests, requests made while telemetry is off and server-side requests don't.
  • Concurrent scenarios each send their own id, and a retried request sends the same id again.
  • Same-origin requests with relative URLs carry X-Amzn-Trace-Id; cross-origin requests still don't.
  • Requests from a fragment using provideUwtTelemetrySink('broadcast') carry X-Amzn-Trace-Id, with both the fetch and XHR backends.
  • Those requests appear as RUM HTTP and X-Ray events in the shell's session.
  • A removed fragment is unpatched and not kept in memory by the shell.
  • DESIGN.md and the README describe the behaviour, the backend convention and the limits.

Notes

  • New public API: uwtScenarioHeaderInterceptor, uwtScenarioContext, UwtScenarioHeaderOptions and UWT_DEFAULT_SCENARIO_HEADER. The X-Ray changes need no changes in consumer apps.
  • Fragment requests count against the shared session's event budget (200 by default), the same as the shell's.
  • Requests made before the shell's RUM client loads aren't traced, the same as in the shell today.
  • Apps that pass their own telemetries config keep their own X-Ray rule.
主要语言
TypeScript
星标
0
派生
0
平均合并
5 天 6 小时
30 天内合并 PR
14

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

AbsaOSS/ui-watchtower 的其他 Issue

查看 AbsaOSS/ui-watchtower 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。