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

Commit 9638fa7

Browse files
author
Amir Blum
committed
refactor(plugin-aws-sdk): make service extension a class
1 parent e625f41 commit 9638fa7

File tree

7 files changed

+149
-220
lines changed

7 files changed

+149
-220
lines changed

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

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,7 @@ import { Span, CanonicalCode, Attributes } from "@opentelemetry/api";
1313
import * as shimmer from "shimmer";
1414
import AWS from "aws-sdk";
1515
import { AttributeNames } from "./enums";
16-
import {
17-
getRequestServiceAttributes,
18-
getResponseServiceAttributes,
19-
} from "./services";
16+
import { ServicesExtensions } from "./services";
2017
import { AwsSdkPluginConfig } from "./types";
2118

2219
const VERSION = "0.0.4";
@@ -25,12 +22,15 @@ class AwsPlugin extends BasePlugin<typeof AWS> {
2522
readonly component: string;
2623
protected _config: AwsSdkPluginConfig;
2724
private REQUEST_SPAN_KEY = Symbol("opentelemetry.plugin.aws-sdk.span");
25+
private servicesExtensions: ServicesExtensions;
2826

2927
constructor(readonly moduleName: string) {
3028
super(`opentelemetry-plugin-aws-sdk`, VERSION);
3129
}
3230

3331
protected patch() {
32+
this.servicesExtensions = new ServicesExtensions(this._tracer);
33+
3434
this._logger.debug(
3535
"applying patch to %s@%s",
3636
this.moduleName,
@@ -112,11 +112,7 @@ class AwsPlugin extends BasePlugin<typeof AWS> {
112112
span.setAttribute(AttributeNames.AWS_ERROR, response.error);
113113
}
114114

115-
const responseAttributes = getResponseServiceAttributes(
116-
response,
117-
span,
118-
thisPlugin._tracer
119-
);
115+
this.servicesExtensions.responseHook(response, span);
120116

121117
span.setAttributes({
122118
[AttributeNames.AWS_REQUEST_ID]: response.requestId,
@@ -143,7 +139,7 @@ class AwsPlugin extends BasePlugin<typeof AWS> {
143139
}
144140

145141
const span = thisPlugin._startAwsSpan(awsRequest);
146-
const requestMetadata = getRequestServiceAttributes(awsRequest, span);
142+
thisPlugin.servicesExtensions.requestHook(awsRequest, span);
147143
thisPlugin._callPreRequestHooks(span, awsRequest);
148144
thisPlugin._registerCompletedEvent(span, awsRequest);
149145

@@ -170,7 +166,10 @@ class AwsPlugin extends BasePlugin<typeof AWS> {
170166
}
171167

172168
const span = thisPlugin._startAwsSpan(awsRequest);
173-
const requestMetadata = getRequestServiceAttributes(awsRequest, span);
169+
const requestMetadata = thisPlugin.servicesExtensions.requestHook(
170+
awsRequest,
171+
span
172+
);
174173
thisPlugin._callPreRequestHooks(span, awsRequest);
175174
thisPlugin._registerCompletedEvent(span, awsRequest);
176175

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Span } from "@opentelemetry/api";
2+
3+
/*
4+
isIncoming - if true, then the operation callback / promise should be bind with the operation's span
5+
*/
6+
export interface RequestMetadata {
7+
isIncoming: boolean;
8+
}
9+
10+
export interface ServiceExtension {
11+
requestHook: (request: AWS.Request<any, any>, span: Span) => RequestMetadata;
12+
responseHook: (response: AWS.Response<any, any>, span: Span) => void;
13+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Tracer, Span } from "@opentelemetry/api";
2+
import { ServiceExtension, RequestMetadata } from "./ServiceExtension";
3+
import { SqsServiceExtension } from "./sqs";
4+
import * as AWS from "aws-sdk";
5+
6+
export class ServicesExtensions implements ServiceExtension {
7+
services: Map<string, ServiceExtension> = new Map();
8+
9+
constructor(tracer: Tracer) {
10+
this.services.set("sqs", new SqsServiceExtension(tracer));
11+
}
12+
13+
requestHook(request: AWS.Request<any, any>, span: Span): RequestMetadata {
14+
const serviceId = (request as any)?.service?.serviceIdentifier;
15+
const serviceExtension = this.services.get(serviceId);
16+
if (!serviceExtension) return { isIncoming: false };
17+
return serviceExtension.requestHook(request, span);
18+
}
19+
20+
responseHook(response: AWS.Response<any, any>, span: Span) {
21+
const serviceId = (response as any)?.request?.service?.serviceIdentifier;
22+
const serviceExtension = this.services.get(serviceId);
23+
if (!serviceExtension) return;
24+
serviceExtension.responseHook(response, span);
25+
}
26+
}
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
1-
export {
2-
getRequestServiceAttributes,
3-
getResponseServiceAttributes,
4-
} from "./service-attributes";
1+
export { ServicesExtensions } from "./ServicesExtensions";

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

Lines changed: 0 additions & 19 deletions
This file was deleted.

packages/plugin-aws-sdk/src/services/service-attributes.ts

Lines changed: 0 additions & 85 deletions
This file was deleted.

0 commit comments

Comments
 (0)