hotelme-nuxt-logger 1.6.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -195,7 +195,7 @@ OTEL_TRACES_SLOW_MS: "1000"
|
|
|
195
195
|
- **Активний контекст на весь запит.** Плагін обгортає `nitroApp.h3App.handler`, тож middleware, handler'и та SSR-рендер виконуються всередині `context.with(serverSpan)` — span'и з коду застосунку стають дочірніми без обгорток.
|
|
196
196
|
- **Server span** на кожен запит, батько — вхідний `traceparent`. Без нього trace id = `X-Request-ID` без дефісів (`2e285875-f20c-…` → `2e285875f20c…`, як у libwts3), якщо це UUID / 32 hex; інакше випадковий. У `event.context`: `otelSpan`; у відповіді — `X-Trace-Id`. 5xx → статус ERROR, 4xx — ні.
|
|
197
197
|
- **Вихідні fetch** (native `fetch`, `$fetch`, ofetch на зовнішній URL) — `@opentelemetry/instrumentation-undici` через diagnostics_channel: CLIENT span `GET <host>` (повний URL — в `url.full`), `traceparent` і `X-Request-ID` сторінки, якщо виклик не поставив свій. Поза запитом span'и не пишуться.
|
|
198
|
-
- **Внутрішні SSR-виклики** (`$fetch('/api/…')` → Nitro localFetch) ідуть у тому ж async-ланцюжку, тож span роуту стає дочірнім span'а сторінки, а logger-middleware бере reqid сторінки. Заголовки руками не потрібні.
|
|
198
|
+
- **Внутрішні SSR-виклики** (`$fetch('/api/…')` → Nitro localFetch) ідуть у тому ж async-ланцюжку, тож span роуту стає дочірнім span'а сторінки, а logger-middleware бере reqid сторінки. Заголовки руками не потрібні. Внутрішній підзапит на відфільтрований шлях (`/__nuxt_island/…`) span'а не отримує, але лишається в контексті сторінки — його `/api/…`-виклики стають прямими дітьми span'а сторінки.
|
|
199
199
|
- **Назва span'а** — шаблон, ніколи сирий шлях (кожна назва — окремий stream у VictoriaTraces), визначається сама після роутингу:
|
|
200
200
|
- сторінка → `route.name` з Vue Router без i18n-суфікса: `GET weather-citynameid`, `GET index` (аліаси теж). Локаль — в атрибуті `i18n.locale`;
|
|
201
201
|
- Nitro-хендлер → шаблон з файлової структури: `GET /api/city_info`, `GET /record/**`;
|
package/dist/module.json
CHANGED
|
@@ -19,6 +19,8 @@ declare module 'h3' {
|
|
|
19
19
|
* невибраний контекст, а не просто відсутність span'а: інакше їхні внутрішні
|
|
20
20
|
* /api-виклики, вихідні fetch і span'и бекенда стали б осиротілими
|
|
21
21
|
* root-трейсами. Дочірні запити успадковують його через parent-based семплер.
|
|
22
|
+
* Виняток — внутрішній підзапит з локальним span'ом у контексті: він
|
|
23
|
+
* лишається в контексті сторінки без власного span'а.
|
|
22
24
|
*
|
|
23
25
|
* `?force_otel=1` (як у libwts3) — трейс вибраний попри фільтри, частку
|
|
24
26
|
* семплера й вхідний `traceparent …-00`, root з `sampling.kept_by: "force"`.
|
|
@@ -26,6 +26,8 @@ export function serverSpanContext(event) {
|
|
|
26
26
|
if (isTracingSuppressed(active)) return active;
|
|
27
27
|
const forced = new URLSearchParams(query).get("force_otel") === "1";
|
|
28
28
|
if (!forced && (settings.ignoreUserAgent?.test(userAgent) || settings.ignorePaths.some((prefix) => pathname.startsWith(prefix)) || settings.ignoreStaticAssets && STATIC_ASSET.test(pathname))) {
|
|
29
|
+
const parent = trace.getSpan(active)?.spanContext();
|
|
30
|
+
if (parent && !parent.isRemote && isSpanContextValid(parent)) return active;
|
|
29
31
|
return unsampledContext(active);
|
|
30
32
|
}
|
|
31
33
|
const carrier = {};
|