@@ -2,9 +2,14 @@ import { Attributes, AttributeValue, Link, trace, TraceFlags, Tracer } from "@op
22import { RandomIdGenerator } from "@opentelemetry/sdk-trace-base" ;
33import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions" ;
44import {
5+ correctErrorStackTrace ,
6+ createPacketAttributesAsJson ,
57 ExceptionEventProperties ,
68 ExceptionSpanEvent ,
9+ flattenAttributes ,
10+ isExceptionSpanEvent ,
711 NULL_SENTINEL ,
12+ omit ,
813 PRIMARY_VARIANT ,
914 SemanticInternalAttributes ,
1015 SpanEvent ,
@@ -13,28 +18,24 @@ import {
1318 TaskEventEnvironment ,
1419 TaskEventStyle ,
1520 TaskRunError ,
16- correctErrorStackTrace ,
17- createPacketAttributesAsJson ,
18- flattenAttributes ,
19- isExceptionSpanEvent ,
20- omit ,
2121 unflattenAttributes ,
2222} from "@trigger.dev/core/v3" ;
23+ import { parseTraceparent , serializeTraceparent } from "@trigger.dev/core/v3/isomorphic" ;
2324import { Prisma , TaskEvent , TaskEventKind , TaskEventStatus } from "@trigger.dev/database" ;
25+ import { nanoid } from "nanoid" ;
2426import { createHash } from "node:crypto" ;
2527import { EventEmitter } from "node:stream" ;
2628import { Gauge } from "prom-client" ;
27- import { $replica , PrismaClient , PrismaReplicaClient , prisma } from "~/db.server" ;
29+ import { $replica , prisma , PrismaClient , PrismaReplicaClient } from "~/db.server" ;
2830import { env } from "~/env.server" ;
2931import { metricsRegister } from "~/metrics.server" ;
32+ import { createRedisClient , RedisClient , RedisWithClusterOptions } from "~/redis.server" ;
3033import { logger } from "~/services/logger.server" ;
3134import { singleton } from "~/utils/singleton" ;
3235import { DynamicFlushScheduler } from "./dynamicFlushScheduler.server" ;
36+ import { TaskEventStore , TaskEventStoreTable } from "./taskEventStore.server" ;
3337import { startActiveSpan } from "./tracer.server" ;
34- import { createRedisClient , RedisClient , RedisWithClusterOptions } from "~/redis.server" ;
3538import { startSpan } from "./tracing.server" ;
36- import { nanoid } from "nanoid" ;
37- import { TaskEventStore , TaskEventStoreTable } from "./taskEventStore.server" ;
3839
3940const MAX_FLUSH_DEPTH = 5 ;
4041
@@ -80,7 +81,7 @@ export type SetAttribute<T extends TraceAttributes> = (key: keyof T, value: T[ke
8081
8182export type TraceEventOptions = {
8283 kind ?: CreatableEventKind ;
83- context ?: Record < string , string | undefined > ;
84+ context ?: Record < string , unknown > ;
8485 spanParentAsLink ?: boolean ;
8586 parentAsLinkType ?: "trigger" | "replay" ;
8687 spanIdSeed ?: string ;
@@ -932,7 +933,7 @@ export class EventRepository {
932933 traceId,
933934 spanId,
934935 parentId,
935- tracestate,
936+ tracestate : typeof tracestate === "string" ? tracestate : undefined ,
936937 message : message ,
937938 serviceName : "api server" ,
938939 serviceNamespace : "trigger.dev" ,
@@ -989,6 +990,11 @@ export class EventRepository {
989990 ) : Promise < TResult > {
990991 const propagatedContext = extractContextFromCarrier ( options . context ?? { } ) ;
991992
993+ logger . debug ( "[otelContext]" , {
994+ propagatedContext,
995+ options,
996+ } ) ;
997+
992998 const start = process . hrtime . bigint ( ) ;
993999 const startTime = options . startTime ?? getNowInNanoseconds ( ) ;
9941000
@@ -1002,7 +1008,8 @@ export class EventRepository {
10021008 : this . generateSpanId ( ) ;
10031009
10041010 const traceContext = {
1005- traceparent : `00-${ traceId } -${ spanId } -01` ,
1011+ ...options . context ,
1012+ traceparent : serializeTraceparent ( traceId , spanId ) ,
10061013 } ;
10071014
10081015 const links : Link [ ] =
@@ -1087,7 +1094,7 @@ export class EventRepository {
10871094 traceId,
10881095 spanId,
10891096 parentId,
1090- tracestate,
1097+ tracestate : typeof tracestate === "string" ? tracestate : undefined ,
10911098 duration : options . incomplete ? 0 : duration ,
10921099 isPartial : failedWithError ? false : options . incomplete ,
10931100 isError : ! ! failedWithError ,
@@ -1493,36 +1500,21 @@ function excludePartialEventsWithCorrespondingFullEvent(batch: CreatableEvent[])
14931500 ) ;
14941501}
14951502
1496- export function extractContextFromCarrier ( carrier : Record < string , string | undefined > ) {
1503+ export function extractContextFromCarrier ( carrier : Record < string , unknown > ) {
14971504 const traceparent = carrier [ "traceparent" ] ;
14981505 const tracestate = carrier [ "tracestate" ] ;
14991506
1507+ if ( typeof traceparent !== "string" ) {
1508+ return undefined ;
1509+ }
1510+
15001511 return {
1512+ ...carrier ,
15011513 traceparent : parseTraceparent ( traceparent ) ,
15021514 tracestate,
15031515 } ;
15041516}
15051517
1506- function parseTraceparent ( traceparent ?: string ) : { traceId : string ; spanId : string } | undefined {
1507- if ( ! traceparent ) {
1508- return undefined ;
1509- }
1510-
1511- const parts = traceparent . split ( "-" ) ;
1512-
1513- if ( parts . length !== 4 ) {
1514- return undefined ;
1515- }
1516-
1517- const [ version , traceId , spanId , flags ] = parts ;
1518-
1519- if ( version !== "00" ) {
1520- return undefined ;
1521- }
1522-
1523- return { traceId, spanId } ;
1524- }
1525-
15261518function prepareEvent ( event : QueriedEvent ) : PreparedEvent {
15271519 return {
15281520 ...event ,
0 commit comments