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

Commit 38014f0

Browse files
author
Amir Blum
committed
refacotr(plugin-aws-sdk): call request hook before span is started
1 parent 161ad51 commit 38014f0

File tree

4 files changed

+36
-17
lines changed

4 files changed

+36
-17
lines changed

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

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
callback | 1 | 2
1010
*/
1111
import { BasePlugin } from "@opentelemetry/core";
12-
import { Span, CanonicalCode } from "@opentelemetry/api";
12+
import { Span, CanonicalCode, Attributes } from "@opentelemetry/api";
1313
import * as shimmer from "shimmer";
1414
import AWS from "aws-sdk";
1515
import { AttributeNames } from "./enums";
@@ -69,7 +69,10 @@ class AwsPlugin extends BasePlugin<typeof AWS> {
6969
return target;
7070
}
7171

72-
private _startAwsSpan(request: AWS.Request<any, any>): Span {
72+
private _startAwsSpan(
73+
request: AWS.Request<any, any>,
74+
additionalAttributes?: Attributes
75+
): Span {
7376
const operation = (request as any).operation;
7477
const service = (request as any).service;
7578

@@ -83,6 +86,7 @@ class AwsPlugin extends BasePlugin<typeof AWS> {
8386
[AttributeNames.AWS_SERVICE_API]: service?.api?.className,
8487
[AttributeNames.AWS_SERVICE_IDENTIFIER]: service?.serviceIdentifier,
8588
[AttributeNames.AWS_SERVICE_NAME]: service?.api?.abbreviation,
89+
...additionalAttributes,
8690
},
8791
});
8892

@@ -138,8 +142,13 @@ class AwsPlugin extends BasePlugin<typeof AWS> {
138142
return original.apply(this, arguments);
139143
}
140144

141-
const span = thisPlugin._startAwsSpan(awsRequest);
142-
thisPlugin.servicesExtensions.requestHook(awsRequest, span);
145+
const requestMetadata = thisPlugin.servicesExtensions.requestHook(
146+
awsRequest
147+
);
148+
const span = thisPlugin._startAwsSpan(
149+
awsRequest,
150+
requestMetadata.spanAttributes
151+
);
143152
thisPlugin._callPreRequestHooks(span, awsRequest);
144153
thisPlugin._registerCompletedEvent(span, awsRequest);
145154

@@ -165,10 +174,12 @@ class AwsPlugin extends BasePlugin<typeof AWS> {
165174
return original.apply(this, arguments);
166175
}
167176

168-
const span = thisPlugin._startAwsSpan(awsRequest);
169177
const requestMetadata = thisPlugin.servicesExtensions.requestHook(
178+
awsRequest
179+
);
180+
const span = thisPlugin._startAwsSpan(
170181
awsRequest,
171-
span
182+
requestMetadata.spanAttributes
172183
);
173184
thisPlugin._callPreRequestHooks(span, awsRequest);
174185
thisPlugin._registerCompletedEvent(span, awsRequest);
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
import { Span } from "@opentelemetry/api";
1+
import { Span, Attributes } from "@opentelemetry/api";
22

33
/*
44
isIncoming - if true, then the operation callback / promise should be bind with the operation's span
55
*/
66
export interface RequestMetadata {
77
isIncoming: boolean;
8+
spanAttributes?: Attributes;
89
}
910

1011
export interface ServiceExtension {
11-
requestHook: (request: AWS.Request<any, any>, span: Span) => RequestMetadata;
12+
// called before request is sent, and before span is created
13+
requestHook: (request: AWS.Request<any, any>) => RequestMetadata;
1214
responseHook: (response: AWS.Response<any, any>, span: Span) => void;
1315
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@ export class ServicesExtensions implements ServiceExtension {
1010
this.services.set("sqs", new SqsServiceExtension(tracer));
1111
}
1212

13-
requestHook(request: AWS.Request<any, any>, span: Span): RequestMetadata {
13+
requestHook(request: AWS.Request<any, any>): RequestMetadata {
1414
const serviceId = (request as any)?.service?.serviceIdentifier;
1515
const serviceExtension = this.services.get(serviceId);
16-
if (!serviceExtension) return { isIncoming: false };
17-
return serviceExtension.requestHook(request, span);
16+
if (!serviceExtension)
17+
return {
18+
isIncoming: false,
19+
};
20+
return serviceExtension.requestHook(request);
1821
}
1922

2023
responseHook(response: AWS.Response<any, any>, span: Span) {

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,27 +27,30 @@ export class SqsServiceExtension implements ServiceExtension {
2727
this.tracer = tracer;
2828
}
2929

30-
requestHook(request: AWS.Request<any, any>, span: Span): RequestMetadata {
30+
requestHook(request: AWS.Request<any, any>): RequestMetadata {
3131
const queueUrl = this.extractQueueUrl(request);
3232
const queueName = this.extractQueueNameFromUrl(queueUrl);
3333

34-
span.setAttribute(SqsAttributeNames.MESSAGING_SYSTEM, "aws.sqs");
35-
span.setAttribute(SqsAttributeNames.MESSAGING_DESTINATIONKIND, "queue");
36-
span.setAttribute(SqsAttributeNames.MESSAGING_DESTINATION, queueName);
37-
span.setAttribute(SqsAttributeNames.MESSAGING_URL, queueUrl);
34+
const spanAttributes = {
35+
[SqsAttributeNames.MESSAGING_SYSTEM]: "aws.sqs",
36+
[SqsAttributeNames.MESSAGING_DESTINATIONKIND]: "queue",
37+
[SqsAttributeNames.MESSAGING_DESTINATION]: queueName,
38+
[SqsAttributeNames.MESSAGING_URL]: queueUrl,
39+
};
3840

3941
let isIncoming = false;
4042

4143
const operation = (request as any)?.operation;
4244
switch (operation) {
4345
case "receiveMessage":
4446
isIncoming = true;
45-
span.setAttribute(SqsAttributeNames.MESSAGING_OPERATION, "receive");
47+
spanAttributes[SqsAttributeNames.MESSAGING_OPERATION] = "receive";
4648
break;
4749
}
4850

4951
return {
5052
isIncoming,
53+
spanAttributes,
5154
};
5255
}
5356

0 commit comments

Comments
 (0)