< Summary

Information
Class: ssr-request.ts
Assembly: app.otel
File(s): /home/runner/work/ClutterStock/ClutterStock/frontend/app/otel/ssr-request.ts
Tag: 58_25416222083
Line coverage
0%
Covered lines: 0
Uncovered lines: 14
Coverable lines: 14
Total lines: 45
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/ClutterStock/ClutterStock/frontend/app/otel/ssr-request.ts

#LineLine coverage
 1import {
 2  context,
 3  propagation,
 4  SpanStatusCode,
 5  trace,
 6} from "@opentelemetry/api";
 7
 8import { headersTextMapGetter } from "./propagation";
 9
 010export function withSsrRequestSpan<T>(
 11  request: Request,
 12  fn: () => Promise<T>,
 13): Promise<T> {
 014  const parentCtx = propagation.extract(
 15    context.active(),
 16    request.headers,
 17    headersTextMapGetter,
 18  );
 19
 020  return context.with(parentCtx, async () => {
 021    const tracer = trace.getTracer("clutterstock.react-router");
 022    const span = tracer.startSpan("ssr.document", {
 23      attributes: {
 24        "http.request.method": request.method,
 25        "url.full": request.url,
 26      },
 27    });
 028    const spanCtx = trace.setSpan(context.active(), span);
 29
 030    try {
 031      const result = await context.with(spanCtx, fn);
 032      span.setStatus({ code: SpanStatusCode.OK });
 033      return result;
 34    } catch (err) {
 035      span.recordException(err as Error);
 036      span.setStatus({
 37        code: SpanStatusCode.ERROR,
 38        message: err instanceof Error ? err.message : String(err),
 39      });
 040      throw err;
 41    } finally {
 042      span.end();
 43    }
 44  });
 45}