diff --git a/src/integrations/AWSIntegration.ts b/src/integrations/AWSIntegration.ts index 126031ad..6871bd99 100644 --- a/src/integrations/AWSIntegration.ts +++ b/src/integrations/AWSIntegration.ts @@ -65,7 +65,8 @@ export class AWSIntegration implements Integration { activeSpan = AWSServiceIntegration.doCreateSpan(tracer, request, config); - if (request.httpRequest) { + if (request.httpRequest + && AWSServiceIntegration.isSpanContextInjectableToHeader(request)) { const httpRequest = request.httpRequest; const headers = httpRequest.headers ? httpRequest.headers : {}; tracer.inject(activeSpan.spanContext, opentracing.FORMAT_TEXT_MAP, headers); diff --git a/src/integrations/AWSServiceIntegration.ts b/src/integrations/AWSServiceIntegration.ts index 9be0b0d1..557c9767 100644 --- a/src/integrations/AWSServiceIntegration.ts +++ b/src/integrations/AWSServiceIntegration.ts @@ -38,6 +38,23 @@ export class AWSServiceIntegration { return messageAttributes; } + public static isSpanContextInjectableToHeader(request: any): boolean { + let result = true; + const service = AWSServiceIntegration.getServiceFromReq(request); + if (service) { + if (service.name !== AWSServiceIntegration.name + && service.isSpanContextInjectableToHeader) { + result = service.isSpanContextInjectableToHeader(request); + } else { + if (service.name === AWSS3Integration.name) { + result = false; + } + } + } + + return result; + } + public static serviceFactory(serviceName: string): any { switch (serviceName) { case 'sqs': diff --git a/src/integrations/AWSv3Integration.ts b/src/integrations/AWSv3Integration.ts index ce4a1b96..dbc01e92 100644 --- a/src/integrations/AWSv3Integration.ts +++ b/src/integrations/AWSv3Integration.ts @@ -96,7 +96,8 @@ export class AWSv3Integration implements Integration { ThundraLogger.debug(' Build middleware working...'); - if (args && args.request) { + if (args && args.request + && AWSServiceIntegration.isSpanContextInjectableToHeader(request)) { const httpRequest = args.request; const headers = httpRequest.headers ? httpRequest.headers : {}; tracer.inject(activeSpan.spanContext, opentracing.FORMAT_TEXT_MAP, headers);