Skip to content
This repository was archived by the owner on Oct 31, 2024. It is now read-only.

Commit 83b0035

Browse files
author
Amir Blum
authored
Merge pull request #19 from aspecto-io/sqs-inject-span-bug-fix
fix(opentelemetry-plugin-aws-sdk): set aws span as the propagated context
2 parents cf8ab57 + 55f12ae commit 83b0035

File tree

4 files changed

+33
-14
lines changed

4 files changed

+33
-14
lines changed

packages/plugin-aws-sdk/src/aws-sdk.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ class AwsPlugin extends BasePlugin<typeof AWS> {
163163

164164
const callbackWithContext = thisPlugin._tracer.bind(callback, span);
165165
return thisPlugin._tracer.withSpan(span, () => {
166+
thisPlugin.servicesExtensions.requestPostSpanHook(awsRequest);
166167
return original.call(awsRequest, callbackWithContext);
167168
});
168169
};
@@ -198,6 +199,7 @@ class AwsPlugin extends BasePlugin<typeof AWS> {
198199
const origPromise: Promise<any> = thisPlugin._tracer.withSpan(
199200
span,
200201
() => {
202+
thisPlugin.servicesExtensions.requestPostSpanHook(awsRequest);
201203
return original.apply(awsRequest, arguments);
202204
}
203205
);

packages/plugin-aws-sdk/src/services/ServiceExtension.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,9 @@ export interface RequestMetadata {
1313
export interface ServiceExtension {
1414
// called before request is sent, and before span is started
1515
requestHook: (request: AWS.Request<any, any>) => RequestMetadata;
16+
17+
// called before request is sent, and after span is started
18+
requestPostSpanHook?: (request: AWS.Request<any, any>) => void;
19+
1620
responseHook: (response: AWS.Response<any, any>, span: Span) => void;
1721
}

packages/plugin-aws-sdk/src/services/ServicesExtensions.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ export class ServicesExtensions implements ServiceExtension {
2020
return serviceExtension.requestHook(request);
2121
}
2222

23+
requestPostSpanHook(request: AWS.Request<any, any>) {
24+
const serviceId = (request as any)?.service?.serviceIdentifier;
25+
const serviceExtension = this.services.get(serviceId);
26+
if (!serviceExtension?.requestPostSpanHook) return;
27+
return serviceExtension.requestPostSpanHook(request);
28+
}
29+
2330
responseHook(response: AWS.Response<any, any>, span: Span) {
2431
const serviceId = (response as any)?.request?.service?.serviceIdentifier;
2532
const serviceExtension = this.services.get(serviceId);

packages/plugin-aws-sdk/src/services/sqs.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,26 @@ export class SqsServiceExtension implements ServiceExtension {
100100
break;
101101

102102
case "sendMessage":
103-
{
104-
spanKind = SpanKind.PRODUCER;
105-
spanName = queueName;
103+
case "sendMessageBatch":
104+
spanKind = SpanKind.PRODUCER;
105+
spanName = queueName;
106+
break;
107+
}
108+
109+
return {
110+
isIncoming,
111+
spanAttributes,
112+
spanKind,
113+
spanName,
114+
};
115+
}
106116

117+
requestPostSpanHook = (request: AWS.Request<any, any>) => {
118+
const operation = (request as any)?.operation;
119+
console.log(operation);
120+
switch (operation) {
121+
case "sendMessage":
122+
{
107123
const params: SendMessageRequest = (request as any).params;
108124
params.MessageAttributes = this.InjectPropagationContext(
109125
params.MessageAttributes
@@ -113,9 +129,6 @@ export class SqsServiceExtension implements ServiceExtension {
113129

114130
case "sendMessageBatch":
115131
{
116-
spanKind = SpanKind.PRODUCER;
117-
spanName = queueName;
118-
119132
const params: SendMessageBatchRequest = (request as any).params;
120133
params.Entries.forEach(
121134
(messageParams: SendMessageBatchRequestEntry) => {
@@ -127,14 +140,7 @@ export class SqsServiceExtension implements ServiceExtension {
127140
}
128141
break;
129142
}
130-
131-
return {
132-
isIncoming,
133-
spanAttributes,
134-
spanKind,
135-
spanName,
136-
};
137-
}
143+
};
138144

139145
responseHook = (response: AWS.Response<any, any>, span: Span) => {
140146
const messages: AWS.SQS.Message[] = response?.data?.Messages;

0 commit comments

Comments
 (0)