|
1 | | -import { DiagConsoleLogger, DiagLogLevel, TracerProvider, diag } from "@opentelemetry/api"; |
| 1 | +import { |
| 2 | + DiagConsoleLogger, |
| 3 | + DiagLogLevel, |
| 4 | + TraceFlags, |
| 5 | + TracerProvider, |
| 6 | + diag, |
| 7 | +} from "@opentelemetry/api"; |
2 | 8 | import { logs } from "@opentelemetry/api-logs"; |
3 | 9 | import { TraceState } from "@opentelemetry/core"; |
4 | 10 | import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http"; |
@@ -293,13 +299,10 @@ class ExternalSpanExporterWrapper { |
293 | 299 | private underlyingExporter: SpanExporter, |
294 | 300 | private externalTraceId: string, |
295 | 301 | private externalTraceContext: |
296 | | - | { traceId: string; spanId: string; tracestate?: string; traceFlags?: string } |
| 302 | + | { traceId: string; spanId: string; traceFlags: number; tracestate?: string } |
297 | 303 | | undefined |
298 | 304 | ) { |
299 | | - this._isExternallySampled = |
300 | | - typeof externalTraceContext?.traceFlags === "string" |
301 | | - ? externalTraceContext.traceFlags === "01" |
302 | | - : true; |
| 305 | + this._isExternallySampled = isTraceFlagSampled(externalTraceContext?.traceFlags); |
303 | 306 | } |
304 | 307 |
|
305 | 308 | private transformSpan(span: ReadableSpan): ReadableSpan | undefined { |
@@ -383,13 +386,10 @@ class ExternalLogRecordExporterWrapper { |
383 | 386 | private underlyingExporter: LogRecordExporter, |
384 | 387 | private externalTraceId: string, |
385 | 388 | private externalTraceContext: |
386 | | - | { traceId: string; spanId: string; tracestate?: string; traceFlags?: string } |
| 389 | + | { traceId: string; spanId: string; tracestate?: string; traceFlags: number } |
387 | 390 | | undefined |
388 | 391 | ) { |
389 | | - this._isExternallySampled = |
390 | | - typeof externalTraceContext?.traceFlags === "string" |
391 | | - ? externalTraceContext.traceFlags === "01" |
392 | | - : true; |
| 392 | + this._isExternallySampled = isTraceFlagSampled(externalTraceContext?.traceFlags); |
393 | 393 | } |
394 | 394 |
|
395 | 395 | export(logs: any[], resultCallback: (result: any) => void): void { |
@@ -455,25 +455,42 @@ function isSpanInternalOnly(span: ReadableSpan): boolean { |
455 | 455 |
|
456 | 456 | const httpUrl = span.attributes[SEMATTRS_HTTP_URL] ?? span.attributes["url.full"]; |
457 | 457 |
|
458 | | - if (typeof httpUrl === "string" && httpUrl.includes("https://api.trigger.dev")) { |
459 | | - return true; |
460 | | - } |
| 458 | + const url = safeParseUrl(httpUrl); |
461 | 459 |
|
462 | | - if (typeof httpUrl === "string" && httpUrl.includes("https://billing.trigger.dev")) { |
463 | | - return true; |
| 460 | + if (!url) { |
| 461 | + return false; |
464 | 462 | } |
465 | 463 |
|
466 | | - if (typeof httpUrl === "string" && httpUrl.includes("https://cloud.trigger.dev")) { |
467 | | - return true; |
| 464 | + const internalHosts = [ |
| 465 | + "api.trigger.dev", |
| 466 | + "billing.trigger.dev", |
| 467 | + "cloud.trigger.dev", |
| 468 | + "engine.trigger.dev", |
| 469 | + "platform.trigger.dev", |
| 470 | + ]; |
| 471 | + |
| 472 | + return ( |
| 473 | + internalHosts.some((host) => url.hostname.includes(host)) || |
| 474 | + url.pathname.includes("/api/v1/usage/ingest") |
| 475 | + ); |
| 476 | +} |
| 477 | + |
| 478 | +function safeParseUrl(url: unknown): URL | undefined { |
| 479 | + if (typeof url !== "string") { |
| 480 | + return undefined; |
468 | 481 | } |
469 | 482 |
|
470 | | - if (typeof httpUrl === "string" && httpUrl.includes("https://engine.trigger.dev")) { |
471 | | - return true; |
| 483 | + try { |
| 484 | + return new URL(url); |
| 485 | + } catch (e) { |
| 486 | + return undefined; |
472 | 487 | } |
| 488 | +} |
473 | 489 |
|
474 | | - if (typeof httpUrl === "string" && httpUrl.includes("/api/v1/usage/ingest")) { |
| 490 | +function isTraceFlagSampled(traceFlags?: number): boolean { |
| 491 | + if (typeof traceFlags !== "number") { |
475 | 492 | return true; |
476 | 493 | } |
477 | 494 |
|
478 | | - return false; |
| 495 | + return (traceFlags & TraceFlags.SAMPLED) === TraceFlags.SAMPLED; |
479 | 496 | } |
0 commit comments