瀏覽代碼

fix: setting parent span on workers

Karol Sójko 1 年之前
父節點
當前提交
1c54d18c3c

+ 5 - 1
packages/auth/src/Bootstrap/Container.ts

@@ -1246,7 +1246,11 @@ export class ContainerConfigLoader {
         .toConstantValue(
           isConfiguredForHomeServerOrSelfHosting
             ? new SQSEventMessageHandler(eventHandlers, container.get(TYPES.Auth_Logger))
-            : new SQSOpenTelemetryEventMessageHandler(eventHandlers, container.get(TYPES.Auth_Logger)),
+            : new SQSOpenTelemetryEventMessageHandler(
+                ServiceIdentifier.NAMES.AuthWorker,
+                eventHandlers,
+                container.get(TYPES.Auth_Logger),
+              ),
         )
 
       container

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

@@ -9,8 +9,10 @@ import {
 
 export class SQSOpenTelemetryEventMessageHandler implements DomainEventMessageHandlerInterface {
   private currentSpan: OpenTelemetryApi.Span | undefined
+  private internalSpan: OpenTelemetryApi.Span | undefined
 
   constructor(
+    private serviceName: string,
     private handlers: Map<string, DomainEventHandlerInterface>,
     private logger: Logger,
   ) {}
@@ -35,18 +37,26 @@ export class SQSOpenTelemetryEventMessageHandler implements DomainEventMessageHa
 
     const tracer = OpenTelemetryApi.trace.getTracer('sqs-handler')
 
-    this.currentSpan = tracer.startSpan(domainEvent.type)
+    this.currentSpan = tracer.startSpan(this.serviceName, { kind: OpenTelemetryApi.SpanKind.CONSUMER })
+    this.internalSpan = tracer.startSpan(domainEvent.type, { kind: OpenTelemetryApi.SpanKind.INTERNAL })
 
     await handler.handle(domainEvent)
 
+    this.internalSpan.end()
     this.currentSpan.end()
 
+    this.internalSpan = undefined
     this.currentSpan = undefined
   }
 
   async handleError(error: Error): Promise<void> {
+    if (this.internalSpan) {
+      this.internalSpan.recordException(error)
+      this.internalSpan.end()
+      this.internalSpan = undefined
+    }
+
     if (this.currentSpan) {
-      this.currentSpan.recordException(error)
       this.currentSpan.end()
       this.currentSpan = undefined
     }

+ 5 - 1
packages/files/src/Bootstrap/Container.ts

@@ -316,7 +316,11 @@ export class ContainerConfigLoader {
         .toConstantValue(
           isConfiguredForHomeServerOrSelfHosting
             ? new SQSEventMessageHandler(eventHandlers, container.get(TYPES.Files_Logger))
-            : new SQSOpenTelemetryEventMessageHandler(eventHandlers, container.get(TYPES.Files_Logger)),
+            : new SQSOpenTelemetryEventMessageHandler(
+                ServiceIdentifier.NAMES.FilesWorker,
+                eventHandlers,
+                container.get(TYPES.Files_Logger),
+              ),
         )
       container
         .bind<DomainEventSubscriberFactoryInterface>(TYPES.Files_DomainEventSubscriberFactory)

+ 5 - 1
packages/revisions/src/Bootstrap/Container.ts

@@ -533,7 +533,11 @@ export class ContainerConfigLoader {
         .toConstantValue(
           isConfiguredForHomeServerOrSelfHosting
             ? new SQSEventMessageHandler(eventHandlers, container.get(TYPES.Revisions_Logger))
-            : new SQSOpenTelemetryEventMessageHandler(eventHandlers, container.get(TYPES.Revisions_Logger)),
+            : new SQSOpenTelemetryEventMessageHandler(
+                ServiceIdentifier.NAMES.RevisionsWorker,
+                eventHandlers,
+                container.get(TYPES.Revisions_Logger),
+              ),
         )
 
       container

+ 5 - 1
packages/syncing-server/src/Bootstrap/Container.ts

@@ -1178,7 +1178,11 @@ export class ContainerConfigLoader {
         .toConstantValue(
           isConfiguredForHomeServerOrSelfHosting
             ? new SQSEventMessageHandler(eventHandlers, container.get(TYPES.Sync_Logger))
-            : new SQSOpenTelemetryEventMessageHandler(eventHandlers, container.get(TYPES.Sync_Logger)),
+            : new SQSOpenTelemetryEventMessageHandler(
+                ServiceIdentifier.NAMES.SyncingServerWorker,
+                eventHandlers,
+                container.get(TYPES.Sync_Logger),
+              ),
         )
     }
 

+ 7 - 1
packages/websockets/src/Bootstrap/Container.ts

@@ -164,7 +164,13 @@ export class ContainerConfigLoader {
 
     container
       .bind<DomainEventMessageHandlerInterface>(TYPES.DomainEventMessageHandler)
-      .toConstantValue(new SQSOpenTelemetryEventMessageHandler(eventHandlers, container.get(TYPES.Logger)))
+      .toConstantValue(
+        new SQSOpenTelemetryEventMessageHandler(
+          ServiceIdentifier.NAMES.WebsocketsWorker,
+          eventHandlers,
+          container.get(TYPES.Logger),
+        ),
+      )
     container
       .bind<DomainEventSubscriberFactoryInterface>(TYPES.DomainEventSubscriberFactory)
       .toConstantValue(