فهرست منبع

fix: injecting opentelemetry trace into sqs/sns coms

Karol Sójko 1 سال پیش
والد
کامیت
4a6f90b95b

+ 6 - 4
packages/domain-events-infra/src/Infra/OpenTelemetry/OpenTelemetryPropagation.ts

@@ -1,15 +1,17 @@
 import * as OpenTelemetryApi from '@opentelemetry/api'
 
-export class OpenTelemetryPropagation {
-  inject(): { traceparent?: string; tracestate?: string } {
+import { OpenTelemetryPropagationInterface } from './OpenTelemetryPropagationInterface'
+
+export class OpenTelemetryPropagation implements OpenTelemetryPropagationInterface {
+  inject(): Record<string, string> {
     const output = {}
 
     OpenTelemetryApi.propagation.inject(OpenTelemetryApi.context.active(), output)
 
-    return output as { traceparent?: string; tracestate?: string }
+    return output
   }
 
-  extract(input: { traceparent?: string; tracestate?: string }): OpenTelemetryApi.Context {
+  extract(input: Record<string, string>): OpenTelemetryApi.Context {
     const activeContext = OpenTelemetryApi.propagation.extract(OpenTelemetryApi.context.active(), input)
 
     return activeContext

+ 2 - 2
packages/domain-events-infra/src/Infra/OpenTelemetry/OpenTelemetryPropagationInterface.ts

@@ -1,6 +1,6 @@
 import { Context } from '@opentelemetry/api'
 
 export interface OpenTelemetryPropagationInterface {
-  inject(): { traceparent?: string; tracestate?: string }
-  extract(input: { traceparent?: string; tracestate?: string }): Context
+  inject(): Record<string, string>
+  extract(input: Record<string, string>): Context
 }

+ 3 - 1
packages/domain-events-infra/src/Infra/SNS/SNSOpenTelemetryDomainEventPublisher.ts

@@ -13,7 +13,9 @@ export class SNSOpenTelemetryDomainEventPublisher implements DomainEventPublishe
 
   async publish(event: DomainEventInterface): Promise<void> {
     const trace = this.propagator.inject()
-    event.meta.trace = trace
+    if (Object.keys(trace).length > 0) {
+      event.meta.trace = trace
+    }
 
     const message: PublishCommandInput = {
       TopicArn: this.topicArn,

+ 2 - 0
packages/domain-events-infra/src/Infra/SQS/SQSOpenTelemetryEventMessageHandler.ts

@@ -44,6 +44,8 @@ export class SQSOpenTelemetryEventMessageHandler implements DomainEventMessageHa
       this.logger.debug(`Event has trace: ${JSON.stringify(domainEvent.meta.trace)}`)
 
       activeContext = this.propagator.extract(domainEvent.meta.trace)
+
+      this.logger.info(`Injecting pre-existing active context into trace: ${JSON.stringify(activeContext)}`)
     }
 
     this.tracer.startSpan(this.serviceName, domainEvent.type, activeContext)

+ 1 - 4
packages/domain-events/src/Domain/Event/DomainEventInterface.ts

@@ -9,10 +9,7 @@ export interface DomainEventInterface {
       userIdentifier: string
       userIdentifierType: 'uuid' | 'email' | 'shared-vault-uuid'
     }
-    trace?: {
-      traceparent?: string
-      tracestate?: string
-    }
+    trace?: Record<string, string>
     origin: DomainEventService
     target?: DomainEventService
   }