Skip to content

Commit 6d12166

Browse files
committed
initial commit
1 parent f0eba5f commit 6d12166

File tree

7 files changed

+324
-218
lines changed

7 files changed

+324
-218
lines changed

aws-distro-opentelemetry-node-autoinstrumentation/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
"@opentelemetry/exporter-metrics-otlp-grpc": "0.57.1",
105105
"@opentelemetry/exporter-metrics-otlp-http": "0.57.1",
106106
"@opentelemetry/exporter-trace-otlp-proto": "0.57.1",
107+
"@opentelemetry/exporter-logs-otlp-proto": "0.57.1",
107108
"@opentelemetry/exporter-zipkin": "1.30.1",
108109
"@opentelemetry/id-generator-aws-xray": "1.2.3",
109110
"@opentelemetry/instrumentation": "0.57.1",

aws-distro-opentelemetry-node-autoinstrumentation/src/aws-opentelemetry-configurator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ import { AttributePropagatingSpanProcessorBuilder } from './attribute-propagatin
5656
import { AwsBatchUnsampledSpanProcessor } from './aws-batch-unsampled-span-processor';
5757
import { AwsMetricAttributesSpanExporterBuilder } from './aws-metric-attributes-span-exporter-builder';
5858
import { AwsSpanMetricsProcessorBuilder } from './aws-span-metrics-processor-builder';
59-
import { OTLPAwsSpanExporter } from './otlp-aws-span-exporter';
59+
import { OTLPAwsSpanExporter } from './exporter/otlp/aws/traces/otlp-aws-span-exporter';
6060
import { OTLPUdpSpanExporter } from './otlp-udp-exporter';
6161
import { AwsXRayRemoteSampler } from './sampler/aws-xray-remote-sampler';
6262
// This file is generated via `npm run compile`
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// import { diag } from '@opentelemetry/api';
2+
// import { getNodeVersion } from '../../../../utils';
3+
4+
// let SignatureV4: any;
5+
// let HttpRequest: any;
6+
// let defaultProvider: any;
7+
// let Sha256: any;
8+
9+
// const nodeVersionSupported = getNodeVersion() >= 16;
10+
11+
// if (nodeVersionSupported) {
12+
// try {
13+
// const { defaultProvider: awsDefaultProvider } = require('@aws-sdk/credential-provider-node');
14+
// const { Sha256: awsSha256 } = require('@aws-crypto/sha256-js');
15+
// const { SignatureV4: awsSignatureV4 } = require('@smithy/signature-v4');
16+
// const { HttpRequest: awsHttpRequest } = require('@smithy/protocol-http');
17+
18+
// // Assign to module-level variables
19+
// defaultProvider = awsDefaultProvider;
20+
// Sha256 = awsSha256;
21+
// SignatureV4 = awsSignatureV4;
22+
// HttpRequest = awsHttpRequest;
23+
// } catch (error) {
24+
// diag.error(`Failed to load required AWS dependency for SigV4 Signing: ${error}`);
25+
// }
26+
// }
27+
28+
// export class AwsAuthenticator {
29+
30+
// private static readonly SERVICE_NAME: string = 'xray';
31+
// private endpoint: string;
32+
// private region: string;
33+
// private service: string;
34+
35+
// // Holds the dependencies needed to sign the SigV4 headers
36+
// private defaultProvider: any;
37+
// private sha256: any;
38+
// private signatureV4: any;
39+
// private httpRequest: any;
40+
41+
// constructor(endpoint: string, region: string, service: string) {
42+
// this.endpoint = endpoint;
43+
// this.region = region;
44+
// this.service = service;
45+
46+
// }
47+
48+
// // if (oldHeaders) {
49+
// // const request = new this.httpRequest({
50+
// // method: 'POST',
51+
// // protocol: 'https',
52+
// // hostname: url.hostname,
53+
// // path: url.pathname,
54+
// // body: serializedSpans,
55+
// // headers: {
56+
// // ...this.removeSigV4Headers(oldHeaders),
57+
// // host: url.hostname,
58+
// // },
59+
// // });
60+
61+
// // try {
62+
// // const signer = new this.signatureV4({
63+
// // credentials: this.defaultProvider(),
64+
// // region: this.region,
65+
// // service: OTLPAwsSpanExporter.SERVICE_NAME,
66+
// // sha256: this.sha256,
67+
// // });
68+
69+
// // const signedRequest = await signer.sign(request);
70+
71+
// // // See type: https://github.com/open-telemetry/opentelemetry-js/blob/experimental/v0.57.1/experimental/packages/otlp-exporter-base/src/transport/http-transport-types.ts#L31
72+
// // const newHeaders: () => Record<string, string> = () => signedRequest.headers;
73+
// // this['_delegate']._transport._transport._parameters.headers = newHeaders;
74+
// // } catch (exception) {
75+
// // diag.debug(
76+
// // `Failed to sign/authenticate the given exported Span request to OTLP XRay endpoint with error: ${exception}`
77+
// // );
78+
// // }
79+
// // }
80+
// }

aws-distro-opentelemetry-node-autoinstrumentation/src/exporter/otlp/aws/logs/otlp-aws-log-exporter.ts

Whitespace-only changes.

aws-distro-opentelemetry-node-autoinstrumentation/src/otlp-aws-span-exporter.ts renamed to aws-distro-opentelemetry-node-autoinstrumentation/src/exporter/otlp/aws/traces/otlp-aws-span-exporter.ts

Lines changed: 56 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,31 @@ import { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base';
66
import { ProtobufTraceSerializer } from '@opentelemetry/otlp-transformer';
77
import { ReadableSpan } from '@opentelemetry/sdk-trace-base';
88
import { ExportResult } from '@opentelemetry/core';
9-
import { getNodeVersion } from './utils';
9+
import { getNodeVersion } from '../../../../utils';
10+
let SignatureV4: any;
11+
let HttpRequest: any;
12+
let defaultProvider: any;
13+
let Sha256: any;
14+
15+
const nodeVersionSupported = getNodeVersion() >= 16;
16+
17+
if (nodeVersionSupported) {
18+
try {
19+
const { defaultProvider: awsDefaultProvider } = require('@aws-sdk/credential-provider-node');
20+
const { Sha256: awsSha256 } = require('@aws-crypto/sha256-js');
21+
const { SignatureV4: awsSignatureV4 } = require('@smithy/signature-v4');
22+
const { HttpRequest: awsHttpRequest } = require('@smithy/protocol-http');
23+
24+
// Assign to module-level variables
25+
defaultProvider = awsDefaultProvider;
26+
Sha256 = awsSha256;
27+
SignatureV4 = awsSignatureV4;
28+
HttpRequest = awsHttpRequest;
29+
} catch (error) {
30+
diag.error(`Failed to load required AWS dependency for SigV4 Signing: ${error}`);
31+
}
32+
}
33+
1034

1135
/**
1236
* This exporter extends the functionality of the OTLPProtoTraceExporter to allow spans to be exported
@@ -21,18 +45,18 @@ export class OTLPAwsSpanExporter extends OTLPProtoTraceExporter {
2145
private endpoint: string;
2246
private region: string;
2347

24-
// Holds the dependencies needed to sign the SigV4 headers
25-
private defaultProvider: any;
26-
private sha256: any;
27-
private signatureV4: any;
28-
private httpRequest: any;
48+
// // Holds the dependencies needed to sign the SigV4 headers
49+
// private defaultProvider: any;
50+
// private sha256: any;
51+
// private signatureV4: any;
52+
// private httpRequest: any;
2953

3054
// If the required dependencies are installed then we enable SigV4 signing. Otherwise skip it
3155
private hasRequiredDependencies: boolean = false;
3256

3357
constructor(endpoint: string, config?: OTLPExporterNodeConfigBase) {
3458
super(OTLPAwsSpanExporter.changeUrlConfig(endpoint, config));
35-
this.initDependencies();
59+
// this.initDependencies();
3660
this.region = endpoint.split('.')[1];
3761
this.endpoint = endpoint;
3862
}
@@ -59,7 +83,7 @@ export class OTLPAwsSpanExporter extends OTLPProtoTraceExporter {
5983
const oldHeaders = this['_delegate']._transport?._transport?._parameters?.headers();
6084

6185
if (oldHeaders) {
62-
const request = new this.httpRequest({
86+
const request = new HttpRequest.httpRequest({
6387
method: 'POST',
6488
protocol: 'https',
6589
hostname: url.hostname,
@@ -72,11 +96,11 @@ export class OTLPAwsSpanExporter extends OTLPProtoTraceExporter {
7296
});
7397

7498
try {
75-
const signer = new this.signatureV4({
76-
credentials: this.defaultProvider(),
99+
const signer = new SignatureV4({
100+
credentials: defaultProvider(),
77101
region: this.region,
78102
service: OTLPAwsSpanExporter.SERVICE_NAME,
79-
sha256: this.sha256,
103+
sha256: Sha256,
80104
});
81105

82106
const signedRequest = await signer.sign(request);
@@ -108,27 +132,27 @@ export class OTLPAwsSpanExporter extends OTLPProtoTraceExporter {
108132
return newHeaders;
109133
}
110134

111-
private initDependencies(): any {
112-
if (getNodeVersion() < 16) {
113-
diag.error('SigV4 signing requires atleast Node major version 16');
114-
return;
115-
}
116-
117-
try {
118-
const awsSdkModule = require('@aws-sdk/credential-provider-node');
119-
const awsCryptoModule = require('@aws-crypto/sha256-js');
120-
const signatureModule = require('@smithy/signature-v4');
121-
const httpModule = require('@smithy/protocol-http');
122-
123-
(this.defaultProvider = awsSdkModule.defaultProvider),
124-
(this.sha256 = awsCryptoModule.Sha256),
125-
(this.signatureV4 = signatureModule.SignatureV4),
126-
(this.httpRequest = httpModule.HttpRequest);
127-
this.hasRequiredDependencies = true;
128-
} catch (error) {
129-
diag.error(`Failed to load required AWS dependency for SigV4 Signing: ${error}`);
130-
}
131-
}
135+
// private initDependencies(): any {
136+
// if (getNodeVersion() < 16) {
137+
// diag.error('SigV4 signing requires atleast Node major version 16');
138+
// return;
139+
// }
140+
141+
// try {
142+
// const awsSdkModule = require('@aws-sdk/credential-provider-node');
143+
// const awsCryptoModule = require('@aws-crypto/sha256-js');
144+
// const signatureModule = require('@smithy/signature-v4');
145+
// const httpModule = require('@smithy/protocol-http');
146+
147+
// (this.defaultProvider = awsSdkModule.defaultProvider),
148+
// (this.sha256 = awsCryptoModule.Sha256),
149+
// (this.signatureV4 = signatureModule.SignatureV4),
150+
// (this.httpRequest = httpModule.HttpRequest);
151+
// this.hasRequiredDependencies = true;
152+
// } catch (error) {
153+
// diag.error(`Failed to load required AWS dependency for SigV4 Signing: ${error}`);
154+
// }
155+
// }
132156

133157
private static changeUrlConfig(endpoint: string, config?: OTLPExporterNodeConfigBase): OTLPExporterNodeConfigBase {
134158
const newConfig =

0 commit comments

Comments
 (0)