@opentelemetry/instrumentation-aws-sdk 0.74.0 → 0.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  [component owners](https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/.github/component_owners.yml): @blumamir @jj22ee @trivikr
7
7
 
8
- This module provides automatic instrumentation for the [AWS SDK for JavaScript v3](https://github.com/aws/aws-sdk-js-v3) modules, which may be loaded using the [`@opentelemetry/sdk-trace-node`](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node) package and is included in the [`@opentelemetry/auto-instrumentations-node`](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node) bundle.
8
+ This module provides automatic instrumentation for the [AWS SDK for JavaScript v3](https://github.com/aws/aws-sdk-js-v3) modules.
9
9
 
10
10
  If total installation size is not constrained, it is recommended to use the [`@opentelemetry/auto-instrumentations-node`](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node) bundle with [@opentelemetry/sdk-node](`https://www.npmjs.com/package/@opentelemetry/sdk-node`) for the most seamless instrumentation experience.
11
11
 
@@ -23,25 +23,22 @@ npm install --save @opentelemetry/instrumentation-aws-sdk
23
23
 
24
24
  ## Usage
25
25
 
26
- For further automatic instrumentation instruction see the [@opentelemetry/instrumentation](https://www.npmjs.com/package/@opentelemetry/instrumentation) package.
26
+ To enable a specific instrumentation, pass it to `registerInstrumentations()`.
27
+ This is commonly done via `NodeSDK` for fully setting up all OpenTelemetry SDK components:
27
28
 
28
29
  ```js
29
- const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
30
- const { registerInstrumentations } = require('@opentelemetry/instrumentation');
31
- const {
32
- AwsInstrumentation,
33
- } = require('@opentelemetry/instrumentation-aws-sdk');
30
+ const { NodeSDK } = require('@opentelemetry/sdk-node');
31
+ const { AwsInstrumentation } = require('@opentelemetry/instrumentation-aws-sdk');
34
32
 
35
- const provider = new NodeTracerProvider();
36
- provider.register();
37
-
38
- registerInstrumentations({
33
+ const sdk = new NodeSDK({
39
34
  instrumentations: [
40
35
  new AwsInstrumentation({
41
- // see under for available configuration
36
+ // see below for available configuration
42
37
  }),
43
38
  ],
44
39
  });
40
+ sdk.start();
41
+ process.once('beforeExit', async () => { await sdk.shutdown(); });
45
42
  ```
46
43
 
47
44
  ### aws-sdk Instrumentation Options
@@ -103,104 +100,51 @@ The instrumentation is doing best effort to support the trace specification of O
103
100
 
104
101
  ## Semantic Conventions
105
102
 
106
- This package emits telemetry using a mix of Semantic Convention versions. While not ideal, this is a result of there being a number of separate AWS services instrumented with independent maintenance.
107
-
108
- - As a baseline, initial implementations follow [Version 1.7.0](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.7.0/semantic_conventions/README.md).
109
- - SQS instrumentation was [updated](https://github.com/open-telemetry/opentelemetry-js-contrib/pull/2345) to follow v1.36.0.
103
+ The `instrumentation-aws-sdk` versions 0.75.0 and later emit the stable semantic conventions.
110
104
 
111
105
  Attributes collected (this list is currently not exhaustive):
112
106
 
113
- | Attribute | Short Description | Service |
114
- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------- | -------- |
115
- | `http.status_code` / `http.response.status_code` | (aws-sdk) HTTP response status code. See "HTTP Semantic Convention migration" note below. | |
116
- | `rpc.method` | The name of the (logical) method being called. | |
117
- | `rpc.service` | The full (logical) name of the service being called. | |
118
- | `rpc.system` | A string identifying the remoting system. | |
119
- | `cloud.region` | The AWS Region where the requested service is being accessed. | |
120
- | `aws.dynamodb.attribute_definitions` | The JSON-serialized value of each item in the `AttributeDefinitions` request field. | dynamodb |
121
- | `aws.dynamodb.consistent_read` | The value of the `ConsistentRead` request parameter. | dynamodb |
122
- | `aws.dynamodb.consumed_capacity` | The JSON-serialized value of each item in the `ConsumedCapacity` response field. | dynamodb |
123
- | `aws.dynamodb.count` | The value of the `Count` response parameter. | dynamodb |
124
- | `aws.dynamodb.exclusive_start_table` | The value of the `ExclusiveStartTableName` request parameter. | dynamodb |
125
- | `aws.dynamodb.global_secondary_index_updates` | The JSON-serialized value of each item in the the `GlobalSecondaryIndexUpdates` request field. | dynamodb |
126
- | `aws.dynamodb.global_secondary_indexes` | The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field. | dynamodb |
127
- | `aws.dynamodb.index_name` | The value of the `IndexName` request parameter. | dynamodb |
128
- | `aws.dynamodb.item_collection_metrics` | The JSON-serialized value of the `ItemCollectionMetrics` response field. | dynamodb |
129
- | `aws.dynamodb.limit` | The value of the `Limit` request parameter. | dynamodb |
130
- | `aws.dynamodb.local_secondary_indexes` | The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field. | dynamodb |
131
- | `aws.dynamodb.projection` | The value of the `ProjectionExpression` request parameter. | dynamodb |
132
- | `aws.dynamodb.provisioned_read_capacity` | The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter. | dynamodb |
133
- | `aws.dynamodb.provisioned_write_capacity` | The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter. | dynamodb |
134
- | `aws.dynamodb.scan_forward` | The value of the `ScanIndexForward` request parameter. | dynamodb |
135
- | `aws.dynamodb.scanned_count` | The value of the `ScannedCount` response parameter. | dynamodb |
136
- | `aws.dynamodb.segment` | The value of the `Segment` request parameter. | dynamodb |
137
- | `aws.dynamodb.select` | The value of the `Select` request parameter. | dynamodb |
138
- | `aws.dynamodb.table_count` | The number of items in the `TableNames` response parameter. | dynamodb |
139
- | `aws.dynamodb.table_names` | The keys in the `RequestItems` object field. | dynamodb |
140
- | `aws.dynamodb.total_segments` | The value of the `TotalSegments` request parameter. | dynamodb |
141
- | `db.name` / `db.namespace` | The name of the database (TableName). See "Database Semantic Convention migration" note below. | dynamodb |
142
- | `db.operation` / `db.operation.name` | The name of the operation. See "Database Semantic Convention migration" note below. | dynamodb |
143
- | `db.statement` / `db.query.text` | The database statement. See "Database Semantic Convention migration" note below. | dynamodb |
144
- | `db.system` / `db.system.name` | Database system identifier. See "Database Semantic Convention migration" note below. | dynamodb |
145
- | `faas.execution` | The execution ID of the current function execution. | lambda |
146
- | `faas.invoked_name` | The name of the invoked function. | lambda |
147
- | `faas.invoked_provider` | The cloud provider of the invoked function. | lambda |
148
- | `faas.invoked_region` | The cloud region of the invoked function. | lambda |
149
- | `messaging.destination` | The message destination name. | sns, sqs |
150
- | `messaging.destination_kind` | The kind of message destination. | sns, sqs |
151
- | `messaging.system` | A string identifying the messaging system. | sns, sqs |
152
- | `messaging.operation` | A string identifying the kind of message consumption. | sqs |
153
- | `messaging.message_id` | A value used by the messaging system as an identifier for the message. | sqs |
154
- | `messaging.url` | The connection string. | sqs |
155
-
156
- ### HTTP Semantic Convention migration
157
-
158
- HTTP semantic conventions (semconv) were stabilized in v1.23.0, and a [migration process](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/non-normative/http-migration.md#http-semantic-convention-stability-migration)
159
- was defined. `instrumentation-aws-sdk` adds some minimal HTTP-related
160
- attributes on created spans. Starting with `instrumentation-aws-sdk` version
161
- 0.61.0, the `OTEL_SEMCONV_STABILITY_OPT_IN` environment variable can be used to
162
- customize which HTTP semantic conventions are used for those HTTP-related
163
- attributes.
164
-
165
- To select which semconv version(s) is emitted from this instrumentation, use the
166
- `OTEL_SEMCONV_STABILITY_OPT_IN` environment variable.
167
-
168
- - `http`: emit the new (stable) v1.23.0+ semantics
169
- - `http/dup`: emit **both** the old v1.7.0 and the new (stable) v1.23.0+ semantics
170
- - By default, if `OTEL_SEMCONV_STABILITY_OPT_IN` includes neither of the above tokens, the old v1.7.0 semconv is used.
171
-
172
- For this instrumentation, the only impacted attributes are as follows:
173
-
174
- | v1.7.0 semconv | v1.23.0 semconv | Short Description |
175
- | ------------------ | --------------------------- | ------------------------- |
176
- | `http.status_code` | `http.response.status_code` | HTTP response status code |
177
-
178
- See the [HTTP semconv migration plan for OpenTelemetry JS instrumentations](https://github.com/open-telemetry/opentelemetry-js/issues/5646) for more details.
179
-
180
- ### Database Semantic Convention migration
181
-
182
- Database semantic conventions (semconv) were stabilized in v1.33.0, and a [migration process](https://opentelemetry.io/docs/specs/semconv/non-normative/db-migration/)
183
- was defined. For DynamoDB operations, `instrumentation-aws-sdk` emits database-related
184
- attributes. The `OTEL_SEMCONV_STABILITY_OPT_IN` environment variable can be used to
185
- customize which database semantic conventions are used.
186
-
187
- To select which semconv version(s) is emitted from this instrumentation, use the
188
- `OTEL_SEMCONV_STABILITY_OPT_IN` environment variable.
189
-
190
- - `database`: emit the new (stable) v1.33.0+ semantics
191
- - `database/dup`: emit **both** the old v1.7.0 and the new (stable) v1.33.0+ semantics
192
- - By default, if `OTEL_SEMCONV_STABILITY_OPT_IN` includes neither of the above tokens, the old v1.7.0 semconv is used.
193
-
194
- For DynamoDB instrumentation, the impacted attributes are as follows:
195
-
196
- | v1.7.0 semconv | v1.33.0 semconv | Short Description |
197
- | -------------- | ------------------- | ------------------------------------------------- |
198
- | `db.system` | `db.system.name` | Database system identifier |
199
- | `db.name` | `db.namespace` | The database name (TableName for DynamoDB) |
200
- | `db.operation` | `db.operation.name` | The name of the operation being executed |
201
- | `db.statement` | `db.query.text` | The database statement (if serializer configured) |
202
-
203
- See the [database migration guide](https://opentelemetry.io/docs/specs/semconv/non-normative/db-migration/) for details.
107
+ | Attribute | Short Description | Service |
108
+ | ------------------------------------ | ---------------------------------------------------------------------------------------------- | -------- |
109
+ | `http.response.status_code` | HTTP response status code. | |
110
+ | `rpc.method` | The name of the (logical) method being called. | |
111
+ | `rpc.service` | The full (logical) name of the service being called. | |
112
+ | `rpc.system` | A string identifying the remoting system. | |
113
+ | `cloud.region` | The AWS Region where the requested service is being accessed. | |
114
+ | `aws.dynamodb.attribute_definitions` | The JSON-serialized value of each item in the `AttributeDefinitions` request field. | dynamodb |
115
+ | `aws.dynamodb.consistent_read` | The value of the `ConsistentRead` request parameter. | dynamodb |
116
+ | `aws.dynamodb.consumed_capacity` | The JSON-serialized value of each item in the `ConsumedCapacity` response field. | dynamodb |
117
+ | `aws.dynamodb.count` | The value of the `Count` response parameter. | dynamodb |
118
+ | `aws.dynamodb.exclusive_start_table` | The value of the `ExclusiveStartTableName` request parameter. | dynamodb |
119
+ | `aws.dynamodb.global_secondary_index_updates` | The JSON-serialized value of each item in the `GlobalSecondaryIndexUpdates` request field. | dynamodb |
120
+ | `aws.dynamodb.global_secondary_indexes` | The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field. | dynamodb |
121
+ | `aws.dynamodb.index_name` | The value of the `IndexName` request parameter. | dynamodb |
122
+ | `aws.dynamodb.item_collection_metrics` | The JSON-serialized value of the `ItemCollectionMetrics` response field. | dynamodb |
123
+ | `aws.dynamodb.limit` | The value of the `Limit` request parameter. | dynamodb |
124
+ | `aws.dynamodb.local_secondary_indexes` | The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field. | dynamodb |
125
+ | `aws.dynamodb.projection` | The value of the `ProjectionExpression` request parameter. | dynamodb |
126
+ | `aws.dynamodb.provisioned_read_capacity` | The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter. | dynamodb |
127
+ | `aws.dynamodb.provisioned_write_capacity` | The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter. | dynamodb |
128
+ | `aws.dynamodb.scan_forward` | The value of the `ScanIndexForward` request parameter. | dynamodb |
129
+ | `aws.dynamodb.scanned_count` | The value of the `ScannedCount` response parameter. | dynamodb |
130
+ | `aws.dynamodb.segment` | The value of the `Segment` request parameter. | dynamodb |
131
+ | `aws.dynamodb.select` | The value of the `Select` request parameter. | dynamodb |
132
+ | `aws.dynamodb.table_count` | The number of items in the `TableNames` response parameter. | dynamodb |
133
+ | `aws.dynamodb.table_names` | The keys in the `RequestItems` object field. | dynamodb |
134
+ | `aws.dynamodb.total_segments` | The value of the `TotalSegments` request parameter. | dynamodb |
135
+ | `db.namespace` | The name of the database (TableName). | dynamodb |
136
+ | `db.operation.name` | The name of the operation. | dynamodb |
137
+ | `db.query.text` | The database statement (if serializer configured). | dynamodb |
138
+ | `db.system.name` | Database system identifier. | dynamodb |
139
+ | `faas.execution` | The execution ID of the current function execution. | lambda |
140
+ | `faas.invoked_name` | The name of the invoked function. | lambda |
141
+ | `faas.invoked_provider` | The cloud provider of the invoked function. | lambda |
142
+ | `faas.invoked_region` | The cloud region of the invoked function. | lambda |
143
+ | `messaging.destination.name` | The message destination name. | sns, sqs |
144
+ | `messaging.system` | A string identifying the messaging system. | sns, sqs |
145
+ | `messaging.operation.type` | A string identifying the kind of message consumption. | sqs |
146
+ | `messaging.message.id` | A value used by the messaging system as an identifier for the message. | sqs |
147
+ | `url.full` | The connection string. | sqs |
204
148
 
205
149
  ## Useful links
206
150
 
@@ -3,8 +3,6 @@ import { InstrumentationBase, InstrumentationModuleDefinition } from '@opentelem
3
3
  export declare class AwsInstrumentation extends InstrumentationBase<AwsSdkInstrumentationConfig> {
4
4
  static readonly component = "aws-sdk";
5
5
  private servicesExtensions;
6
- private _httpSemconvStability;
7
- private _dbSemconvStability;
8
6
  constructor(config?: AwsSdkInstrumentationConfig);
9
7
  protected init(): InstrumentationModuleDefinition[];
10
8
  protected patchV3ConstructStack(moduleExports: any, moduleVersion?: string): any;
@@ -14,17 +14,12 @@ const version_1 = require("./version");
14
14
  const instrumentation_1 = require("@opentelemetry/instrumentation");
15
15
  const utils_1 = require("./utils");
16
16
  const propwrap_1 = require("./propwrap");
17
- const semconv_1 = require("./semconv");
18
17
  const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
19
18
  const V3_CLIENT_CONFIG_KEY = Symbol('opentelemetry.instrumentation.aws-sdk.client.config');
20
19
  class AwsInstrumentation extends instrumentation_1.InstrumentationBase {
21
20
  static component = 'aws-sdk';
22
- _httpSemconvStability;
23
- _dbSemconvStability;
24
21
  constructor(config = {}) {
25
22
  super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config);
26
- this._httpSemconvStability = (0, instrumentation_1.semconvStabilityFromStr)('http', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);
27
- this._dbSemconvStability = (0, instrumentation_1.semconvStabilityFromStr)('database', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);
28
23
  }
29
24
  init() {
30
25
  const v3MiddlewareStackFileOldVersions = new instrumentation_1.InstrumentationNodeModuleFile('@aws-sdk/middleware-stack/dist/cjs/MiddlewareStack.js', ['>=3.1.0 <3.35.0'], this.patchV3ConstructStack.bind(this), this.unpatchV3ConstructStack.bind(this));
@@ -175,7 +170,7 @@ class AwsInstrumentation extends instrumentation_1.InstrumentationBase {
175
170
  awsExecutionContext.clientName || 'AWS', 'Client');
176
171
  const commandName = awsExecutionContext.commandName ?? command.constructor?.name;
177
172
  const normalizedRequest = (0, utils_1.normalizeV3Request)(serviceName, commandName, command.input, undefined);
178
- const requestMetadata = self.servicesExtensions.requestPreSpanHook(normalizedRequest, self.getConfig(), self._diag, self._dbSemconvStability);
173
+ const requestMetadata = self.servicesExtensions.requestPreSpanHook(normalizedRequest, self.getConfig(), self._diag);
179
174
  const startTime = (0, core_1.hrTime)();
180
175
  const span = self._startAwsV3Span(normalizedRequest, requestMetadata);
181
176
  const activeContextWithSpan = api_1.trace.setSpan(api_1.context.active(), span);
@@ -204,12 +199,7 @@ class AwsInstrumentation extends instrumentation_1.InstrumentationBase {
204
199
  }
205
200
  const httpStatusCode = response.output?.$metadata?.httpStatusCode;
206
201
  if (httpStatusCode) {
207
- if (self._httpSemconvStability & instrumentation_1.SemconvStability.OLD) {
208
- span.setAttribute(semconv_1.ATTR_HTTP_STATUS_CODE, httpStatusCode);
209
- }
210
- if (self._httpSemconvStability & instrumentation_1.SemconvStability.STABLE) {
211
- span.setAttribute(semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE, httpStatusCode);
212
- }
202
+ span.setAttribute(semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE, httpStatusCode);
213
203
  }
214
204
  const extendedRequestId = response.output?.$metadata?.extendedRequestId;
215
205
  if (extendedRequestId) {
@@ -235,12 +225,7 @@ class AwsInstrumentation extends instrumentation_1.InstrumentationBase {
235
225
  }
236
226
  const httpStatusCode = err?.$metadata?.httpStatusCode;
237
227
  if (httpStatusCode) {
238
- if (self._httpSemconvStability & instrumentation_1.SemconvStability.OLD) {
239
- span.setAttribute(semconv_1.ATTR_HTTP_STATUS_CODE, httpStatusCode);
240
- }
241
- if (self._httpSemconvStability & instrumentation_1.SemconvStability.STABLE) {
242
- span.setAttribute(semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE, httpStatusCode);
243
- }
228
+ span.setAttribute(semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE, httpStatusCode);
244
229
  }
245
230
  const extendedRequestId = err?.extendedRequestId;
246
231
  if (extendedRequestId) {
@@ -1 +1 @@
1
- {"version":3,"file":"aws-sdk.js","sourceRoot":"","sources":["../../src/aws-sdk.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,4CAO4B;AAC5B,8CAA8D;AAC9D,mCAAyC;AACzC,yCAAgD;AAQhD,kBAAkB;AAClB,uCAA0D;AAC1D,oEASwC;AAQxC,mCAKiB;AACjB,yCAAsC;AAEtC,uCAAkD;AAClD,8EAAqF;AAErF,MAAM,oBAAoB,GAAG,MAAM,CACjC,qDAAqD,CACtD,CAAC;AAKF,MAAa,kBAAmB,SAAQ,qCAAgD;IACtF,MAAM,CAAU,SAAS,GAAG,SAAS,CAAC;IAI9B,qBAAqB,CAAmB;IACxC,mBAAmB,CAAmB;IAE9C,YAAY,SAAsC,EAAE;QAClD,KAAK,CAAC,sBAAY,EAAE,yBAAe,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,qBAAqB,GAAG,IAAA,yCAAuB,EAClD,MAAM,EACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAC1C,CAAC;QACF,IAAI,CAAC,mBAAmB,GAAG,IAAA,yCAAuB,EAChD,UAAU,EACV,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAC1C,CAAC;IACJ,CAAC;IAES,IAAI;QACZ,MAAM,gCAAgC,GAAG,IAAI,+CAA6B,CACxE,uDAAuD,EACvD,CAAC,iBAAiB,CAAC,EACnB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EACrC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CACxC,CAAC;QACF,MAAM,gCAAgC,GAAG,IAAI,+CAA6B,CACxE,uDAAuD,EACvD,CAAC,UAAU,CAAC,EACZ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EACrC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CACxC,CAAC;QAEF,uFAAuF;QACvF,mDAAmD;QACnD,4EAA4E;QAC5E,MAAM,iBAAiB,GAAG,IAAI,qDAAmC,CAC/D,2BAA2B,EAC3B,CAAC,QAAQ,CAAC,EACV,SAAS,EACT,SAAS,EACT,CAAC,gCAAgC,EAAE,gCAAgC,CAAC,CACrE,CAAC;QAEF,wEAAwE;QACxE,0EAA0E;QAC1E,gDAAgD;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC;QAElB,MAAM,uBAAuB,GAAG,IAAI,qDAAmC,CACrE,0BAA0B,EAC1B,CAAC,SAAS,CAAC,EACX,CAAC,aAAa,EAAE,aAAa,EAAE,EAAE;YAC/B,MAAM,UAAU,GAAG,IAAA,mBAAQ,EACzB,aAAa,EACb,gBAAgB,EAChB,CAAC,IAAS,EAAE,EAAE;gBACZ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC,yBAAyB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAC7D,CAAC,CACF,CAAC;YACF,OAAO,UAAU,CAAC;QACpB,CAAC,CACF,CAAC;QAEF,kFAAkF;QAClF,qFAAqF;QACrF,MAAM,sBAAsB,GAAG,IAAI,+CAA6B,CAC9D,kDAAkD,EAClD,CAAC,UAAU,CAAC,EACZ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EACnC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CACtC,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,qDAAmC,CAC1D,cAAc,EACd,CAAC,UAAU,CAAC,EACZ,SAAS,EACT,SAAS,EACT,CAAC,sBAAsB,CAAC,CACzB,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,qDAAmC,CAC5D,wBAAwB,EACxB,CAAC,QAAQ,CAAC,EACV,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EACnC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CACtC,CAAC;QAEF,qEAAqE;QACrE,MAAM,iBAAiB,GAAG,IAAI,qDAAmC,CAC/D,uBAAuB,EACvB,CAAC,SAAS,CAAC,EACX,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EACnC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CACtC,CAAC;QAEF,OAAO;YACL,iBAAiB;YACjB,uBAAuB;YACvB,YAAY;YACZ,cAAc;YACd,iBAAiB;SAClB,CAAC;IACJ,CAAC;IAES,qBAAqB,CAAC,aAAkB,EAAE,aAAsB;QACxE,IAAI,CAAC,KAAK,CACR,aAAa,EACb,gBAAgB,EAChB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CACzD,CAAC;QACF,OAAO,aAAa,CAAC;IACvB,CAAC;IAES,uBAAuB,CAAC,aAAkB;QAClD,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAC9C,OAAO,aAAa,CAAC;IACvB,CAAC;IAES,mBAAmB,CAAC,aAAkB,EAAE,aAAsB;QACtE,IAAI,CAAC,KAAK,CACR,aAAa,CAAC,MAAM,CAAC,SAAS,EAC9B,MAAM,EACN,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAC3D,CAAC;QACF,OAAO,aAAa,CAAC;IACvB,CAAC;IAES,qBAAqB,CAAC,aAAkB;QAChD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,eAAe,CACrB,iBAAoC,EACpC,QAAyB;QAEzB,MAAM,IAAI,GACR,QAAQ,CAAC,QAAQ;YACjB,GAAG,iBAAiB,CAAC,WAAW,IAAI,iBAAiB,CAAC,WAAW,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;YAC1C,IAAI,EAAE,QAAQ,CAAC,QAAQ,IAAI,cAAQ,CAAC,MAAM;YAC1C,UAAU,EAAE;gBACV,GAAG,IAAA,8CAAsC,EAAC,iBAAiB,CAAC;gBAC5D,GAAG,QAAQ,CAAC,cAAc;aAC3B;SACF,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,uBAAuB,CAC7B,IAAU,EACV,OAA0B,EAC1B,aAAiC;QAEjC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,cAAc,EAAE;YAClB,MAAM,WAAW,GAAiC;gBAChD,aAAa;gBACb,OAAO;aACR,CAAC;YACF,IAAA,wCAAsB,EACpB,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,EACvC,CAAC,CAAoB,EAAE,EAAE;gBACvB,IAAI,CAAC;oBACH,UAAI,CAAC,KAAK,CACR,GAAG,kBAAkB,CAAC,SAAS,wCAAwC,EACvE,CAAC,CACF,CAAC;YACN,CAAC,EACD,IAAI,CACL,CAAC;SACH;IACH,CAAC;IAEO,qBAAqB,CAAC,IAAU,EAAE,QAA4B;QACpE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,MAAM,YAAY,GAAkC;YAClD,QAAQ;SACT,CAAC;QACF,IAAA,wCAAsB,EACpB,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,EACtC,CAAC,CAAoB,EAAE,EAAE;YACvB,IAAI,CAAC;gBACH,UAAI,CAAC,KAAK,CACR,GAAG,kBAAkB,CAAC,SAAS,sCAAsC,EACrE,CAAC,CACF,CAAC;QACN,CAAC,EACD,IAAI,CACL,CAAC;IACJ,CAAC;IAEO,8BAA8B,CACpC,IAAU,EACV,OAA0B,EAC1B,GAAQ;QAER,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3C,IAAI,CAAC,aAAa;YAAE,OAAO;QAC3B,MAAM,WAAW,GAAiC;YAChD,OAAO;SACR,CAAC;QAEF,IAAA,wCAAsB,EACpB,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,EAC3C,CAAC,CAAoB,EAAE,EAAE;YACvB,IAAI,CAAC;gBACH,UAAI,CAAC,KAAK,CACR,GAAG,kBAAkB,CAAC,SAAS,uCAAuC,EACtE,CAAC,CACF,CAAC;QACN,CAAC,EACD,IAAI,CACL,CAAC;IACJ,CAAC;IAEO,yBAAyB,CAC/B,aAAiC,EACjC,QAA2D;QAE3D,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO,SAAS,cAAc,CAE5B,GAAG,IAAe;YAElB,MAAM,KAAK,GAA8B,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpE,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;IACJ,CAAC;IAEO,2BAA2B,CACjC,aAAiC,EACjC,QAA8C;QAE9C,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO,SAAS,IAAI,CAElB,OAAwB,EACxB,GAAG,IAAe;YAElB,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAC5C,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACjE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAC5B,aAAiC,EACjC,sBAAiD;QAEjD,IAAI,CAAC,IAAA,2BAAS,EAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE;YAC9C,IAAI,CAAC,KAAK,CACR,sBAAsB,EACtB,SAAS,EACT,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CACjE,CAAC;SACH;QAED,0FAA0F;QAC1F,yEAAyE;QACzE,IAAI,CAAC,IAAA,2BAAS,EAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;YAC5C,IAAI,CAAC,KAAK,CACR,sBAAsB,EACtB,OAAO,EACP,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAC/D,CAAC;SACH;QACD,IAAI,CAAC,IAAA,2BAAS,EAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE;YAC7C,IAAI,CAAC,KAAK,CACR,sBAAsB,EACtB,QAAQ,EACR,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAC/D,CAAC;SACH;IACH,CAAC;IAEO,+BAA+B,CACrC,aAAiC,EACjC,QAAuD;QAEvD,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO,UAAqB,GAAG,IAAW;YACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YACrD,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC;IAEO,iCAAiC,CACvC,aAAiC,EACjC,QAGqC;QAErC,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO,UAEL,QAAa,EACb,mBAA4C;YAE5C,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YACvE,MAAM,cAAc,GAAG,UAErB,OAEC;gBAED,MAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;gBACnD,MAAM,aAAa,GAAG,YAAY,EAAE,MAAM,EAAE,EAAE,CAAC;gBAC/C,MAAM,WAAW,GACf,YAAY,EAAE,SAAS;oBACvB,IAAA,sCAA8B;oBAC5B,gEAAgE;oBAChE,kDAAkD;oBAClD,mBAAmB,CAAC,UAAU,IAAI,KAAK,EACvC,QAAQ,CACT,CAAC;gBACJ,MAAM,WAAW,GACf,mBAAmB,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;gBAC/D,MAAM,iBAAiB,GAAG,IAAA,0BAAkB,EAC1C,WAAW,EACX,WAAW,EACX,OAAO,CAAC,KAAK,EACb,SAAS,CACV,CAAC;gBACF,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAChE,iBAAiB,EACjB,IAAI,CAAC,SAAS,EAAE,EAChB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,mBAAmB,CACzB,CAAC;gBACF,MAAM,SAAS,GAAG,IAAA,aAAM,GAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;gBACtE,MAAM,qBAAqB,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;gBAEpE,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACrD,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;yBAC3B,IAAI,CAAC,cAAc,CAAC,EAAE;wBACrB,iBAAiB,CAAC,MAAM,GAAG,cAAc,CAAC;wBAC1C,IAAI,CAAC,YAAY,CAAC,sBAAc,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;oBACjE,CAAC,CAAC;yBACD,KAAK,CAAC,CAAC,CAAC,EAAE;wBACT,gDAAgD;wBAChD,qCAAqC;wBACrC,UAAI,CAAC,KAAK,CACR,GAAG,kBAAkB,CAAC,SAAS,gEAAgE,EAC/F,CAAC,CACF,CAAC;oBACJ,CAAC,CAAC;yBACD,OAAO,CAAC,GAAG,EAAE;wBACZ,IAAI,CAAC,uBAAuB,CAC1B,IAAI,EACJ,iBAAiB,EACjB,aAAa,CACd,CAAC;wBACF,MAAM,aAAa,GAAG,aAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;4BAC7D,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;4BAC/D,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,CACrC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAChC,CAAC;wBACJ,CAAC,CAAC,CAAC;wBACH,MAAM,wBAAwB,GAAG,aAAa;6BAC3C,IAAI,CAAC,QAAQ,CAAC,EAAE;4BACf,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;4BACxD,IAAI,SAAS,EAAE;gCACb,IAAI,CAAC,YAAY,CAAC,sBAAc,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;6BAC7D;4BAED,MAAM,cAAc,GAClB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC;4BAC7C,IAAI,cAAc,EAAE;gCAClB,IAAI,IAAI,CAAC,qBAAqB,GAAG,kCAAgB,CAAC,GAAG,EAAE;oCACrD,IAAI,CAAC,YAAY,CAAC,+BAAqB,EAAE,cAAc,CAAC,CAAC;iCAC1D;gCACD,IAAI,IAAI,CAAC,qBAAqB,GAAG,kCAAgB,CAAC,MAAM,EAAE;oCACxD,IAAI,CAAC,YAAY,CACf,qDAA8B,EAC9B,cAAc,CACf,CAAC;iCACH;6BACF;4BAED,MAAM,iBAAiB,GACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,iBAAiB,CAAC;4BAChD,IAAI,iBAAiB,EAAE;gCACrB,IAAI,CAAC,YAAY,CACf,sBAAc,CAAC,uBAAuB,EACtC,iBAAiB,CAClB,CAAC;6BACH;4BAED,MAAM,kBAAkB,GAAuB;gCAC7C,IAAI,EAAE,QAAQ,CAAC,MAAM;gCACrB,OAAO,EAAE,iBAAiB;gCAC1B,SAAS,EAAE,SAAS;6BACrB,CAAC;4BACF,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CACnD,kBAAkB,EAClB,IAAI,EACJ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,EAAE,EAChB,SAAS,CACV,CAAC;4BACF,IAAI,QAAQ,EAAE;gCACZ,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC;gCAC3B,kBAAkB,CAAC,IAAI,GAAG,QAAQ,CAAC;6BACpC;4BACD,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;4BACrD,OAAO,QAAQ,CAAC;wBAClB,CAAC,CAAC;6BACD,KAAK,CAAC,GAAG,CAAC,EAAE;4BACX,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,CAAC;4BACjC,IAAI,SAAS,EAAE;gCACb,IAAI,CAAC,YAAY,CAAC,sBAAc,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;6BAC7D;4BAED,MAAM,cAAc,GAAG,GAAG,EAAE,SAAS,EAAE,cAAc,CAAC;4BACtD,IAAI,cAAc,EAAE;gCAClB,IAAI,IAAI,CAAC,qBAAqB,GAAG,kCAAgB,CAAC,GAAG,EAAE;oCACrD,IAAI,CAAC,YAAY,CAAC,+BAAqB,EAAE,cAAc,CAAC,CAAC;iCAC1D;gCACD,IAAI,IAAI,CAAC,qBAAqB,GAAG,kCAAgB,CAAC,MAAM,EAAE;oCACxD,IAAI,CAAC,YAAY,CACf,qDAA8B,EAC9B,cAAc,CACf,CAAC;iCACH;6BACF;4BAED,MAAM,iBAAiB,GAAG,GAAG,EAAE,iBAAiB,CAAC;4BACjD,IAAI,iBAAiB,EAAE;gCACrB,IAAI,CAAC,YAAY,CACf,sBAAc,CAAC,uBAAuB,EACtC,iBAAiB,CAClB,CAAC;6BACH;4BAED,IAAI,CAAC,SAAS,CAAC;gCACb,IAAI,EAAE,oBAAc,CAAC,KAAK;gCAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;6BACrB,CAAC,CAAC;4BACH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;4BAC1B,IAAI,CAAC,8BAA8B,CACjC,IAAI,EACJ,iBAAiB,EACjB,GAAG,CACJ,CAAC;4BACF,MAAM,GAAG,CAAC;wBACZ,CAAC,CAAC;6BACD,OAAO,CAAC,GAAG,EAAE;4BACZ,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;gCAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;6BACZ;wBACH,CAAC,CAAC,CAAC;wBACL,wBAAwB;6BACrB,IAAI,CAAC,GAAG,CAAC,EAAE;4BACV,OAAO,CAAC,GAAG,CAAC,CAAC;wBACf,CAAC,CAAC;6BACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/B,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBAEH,OAAO,eAAe,CAAC,UAAU;oBAC/B,CAAC,CAAC,IAAA,mBAAW,EAAC,cAAc,EAAE,qBAAqB,EAAE,CAAC,CAAC;oBACvD,CAAC,CAAC,cAAc,CAAC;YACrB,CAAC,CAAC;YACF,OAAO,cAAc,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAAI,gBAAuC;QACtE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,+BAA+B,EAAE;YACpD,OAAO,aAAO,CAAC,IAAI,CAAC,IAAA,sBAAe,EAAC,aAAO,CAAC,MAAM,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;SAC1E;aAAM;YACL,OAAO,gBAAgB,EAAE,CAAC;SAC3B;IACH,CAAC;IAEQ,wBAAwB;QAC/B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,IAAI,CAAC,kBAAkB,GAAG,IAAI,6BAAkB,EAAE,CAAC;SACpD;QACD,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;;AAzeU,gDAAkB","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n Span,\n SpanKind,\n context,\n trace,\n diag,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport { hrTime, suppressTracing } from '@opentelemetry/core';\nimport { AttributeNames } from './enums';\nimport { ServicesExtensions } from './services';\nimport {\n AwsSdkInstrumentationConfig,\n AwsSdkRequestHookInformation,\n AwsSdkResponseHookInformation,\n NormalizedRequest,\n NormalizedResponse,\n} from './types';\n/** @knipignore */\nimport { PACKAGE_NAME, PACKAGE_VERSION } from './version';\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n isWrapped,\n safeExecuteInTheMiddle,\n SemconvStability,\n semconvStabilityFromStr,\n} from '@opentelemetry/instrumentation';\nimport type {\n MiddlewareStack,\n HandlerExecutionContext,\n Command as AwsV3Command,\n Handler as AwsV3MiddlewareHandler,\n InitializeHandlerArguments,\n} from '@aws-sdk/types';\nimport {\n bindPromise,\n extractAttributesFromNormalizedRequest,\n normalizeV3Request,\n removeSuffixFromStringIfExists,\n} from './utils';\nimport { propwrap } from './propwrap';\nimport { RequestMetadata } from './services/ServiceExtension';\nimport { ATTR_HTTP_STATUS_CODE } from './semconv';\nimport { ATTR_HTTP_RESPONSE_STATUS_CODE } from '@opentelemetry/semantic-conventions';\n\nconst V3_CLIENT_CONFIG_KEY = Symbol(\n 'opentelemetry.instrumentation.aws-sdk.client.config'\n);\ntype V3PluginCommand = AwsV3Command<any, any, any, any, any> & {\n [V3_CLIENT_CONFIG_KEY]?: any;\n};\n\nexport class AwsInstrumentation extends InstrumentationBase<AwsSdkInstrumentationConfig> {\n static readonly component = 'aws-sdk';\n // need declare since initialized in callbacks from super constructor\n declare private servicesExtensions: ServicesExtensions;\n\n private _httpSemconvStability: SemconvStability;\n private _dbSemconvStability: SemconvStability;\n\n constructor(config: AwsSdkInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n this._httpSemconvStability = semconvStabilityFromStr(\n 'http',\n process.env.OTEL_SEMCONV_STABILITY_OPT_IN\n );\n this._dbSemconvStability = semconvStabilityFromStr(\n 'database',\n process.env.OTEL_SEMCONV_STABILITY_OPT_IN\n );\n }\n\n protected init(): InstrumentationModuleDefinition[] {\n const v3MiddlewareStackFileOldVersions = new InstrumentationNodeModuleFile(\n '@aws-sdk/middleware-stack/dist/cjs/MiddlewareStack.js',\n ['>=3.1.0 <3.35.0'],\n this.patchV3ConstructStack.bind(this),\n this.unpatchV3ConstructStack.bind(this)\n );\n const v3MiddlewareStackFileNewVersions = new InstrumentationNodeModuleFile(\n '@aws-sdk/middleware-stack/dist-cjs/MiddlewareStack.js',\n ['>=3.35.0'],\n this.patchV3ConstructStack.bind(this),\n this.unpatchV3ConstructStack.bind(this)\n );\n\n // as for aws-sdk v3.13.1, constructStack is exported from @aws-sdk/middleware-stack as\n // getter instead of function, which fails shimmer.\n // so we are patching the MiddlewareStack.js file directly to get around it.\n const v3MiddlewareStack = new InstrumentationNodeModuleDefinition(\n '@aws-sdk/middleware-stack',\n ['^3.1.0'],\n undefined,\n undefined,\n [v3MiddlewareStackFileOldVersions, v3MiddlewareStackFileNewVersions]\n );\n\n // Patch for @smithy/middleware-stack for @aws-sdk/* packages v3.363.0+.\n // As of @smithy/middleware-stack@2.1.0 `constructStack` is only available\n // as a getter, so we cannot use `this._wrap()`.\n const self = this;\n\n const v3SmithyMiddlewareStack = new InstrumentationNodeModuleDefinition(\n '@smithy/middleware-stack',\n ['>=2.0.0'],\n (moduleExports, moduleVersion) => {\n const newExports = propwrap(\n moduleExports,\n 'constructStack',\n (orig: any) => {\n self._diag.debug('propwrapping aws-sdk v3 constructStack');\n return self._getV3ConstructStackPatch(moduleVersion, orig);\n }\n );\n return newExports;\n }\n );\n\n // Patch for @smithy/core >= 3.24.0: Client class moved from @smithy/smithy-client\n // into @smithy/core/client bundle. We need to patch Client.prototype.send there too.\n const v3SmithyCoreClientFile = new InstrumentationNodeModuleFile(\n '@smithy/core/dist-cjs/submodules/client/index.js',\n ['>=3.24.0'],\n this.patchV3SmithyClient.bind(this),\n this.unpatchV3SmithyClient.bind(this)\n );\n const v3SmithyCore = new InstrumentationNodeModuleDefinition(\n '@smithy/core',\n ['>=3.24.0'],\n undefined,\n undefined,\n [v3SmithyCoreClientFile]\n );\n const v3SmithyClient = new InstrumentationNodeModuleDefinition(\n '@aws-sdk/smithy-client',\n ['^3.1.0'],\n this.patchV3SmithyClient.bind(this),\n this.unpatchV3SmithyClient.bind(this)\n );\n\n // patch for new @smithy/smithy-client for aws-sdk packages v3.363.0+\n const v3NewSmithyClient = new InstrumentationNodeModuleDefinition(\n '@smithy/smithy-client',\n ['>=1.0.3'],\n this.patchV3SmithyClient.bind(this),\n this.unpatchV3SmithyClient.bind(this)\n );\n\n return [\n v3MiddlewareStack,\n v3SmithyMiddlewareStack,\n v3SmithyCore,\n v3SmithyClient,\n v3NewSmithyClient,\n ];\n }\n\n protected patchV3ConstructStack(moduleExports: any, moduleVersion?: string) {\n this._wrap(\n moduleExports,\n 'constructStack',\n this._getV3ConstructStackPatch.bind(this, moduleVersion)\n );\n return moduleExports;\n }\n\n protected unpatchV3ConstructStack(moduleExports: any) {\n this._unwrap(moduleExports, 'constructStack');\n return moduleExports;\n }\n\n protected patchV3SmithyClient(moduleExports: any, moduleVersion?: string) {\n this._wrap(\n moduleExports.Client.prototype,\n 'send',\n this._getV3SmithyClientSendPatch.bind(this, moduleVersion)\n );\n return moduleExports;\n }\n\n protected unpatchV3SmithyClient(moduleExports: any) {\n this._unwrap(moduleExports.Client.prototype, 'send');\n return moduleExports;\n }\n\n private _startAwsV3Span(\n normalizedRequest: NormalizedRequest,\n metadata: RequestMetadata\n ): Span {\n const name =\n metadata.spanName ??\n `${normalizedRequest.serviceName}.${normalizedRequest.commandName}`;\n const newSpan = this.tracer.startSpan(name, {\n kind: metadata.spanKind ?? SpanKind.CLIENT,\n attributes: {\n ...extractAttributesFromNormalizedRequest(normalizedRequest),\n ...metadata.spanAttributes,\n },\n });\n\n return newSpan;\n }\n\n private _callUserPreRequestHook(\n span: Span,\n request: NormalizedRequest,\n moduleVersion: string | undefined\n ) {\n const { preRequestHook } = this.getConfig();\n if (preRequestHook) {\n const requestInfo: AwsSdkRequestHookInformation = {\n moduleVersion,\n request,\n };\n safeExecuteInTheMiddle(\n () => preRequestHook(span, requestInfo),\n (e: Error | undefined) => {\n if (e)\n diag.error(\n `${AwsInstrumentation.component} instrumentation: preRequestHook error`,\n e\n );\n },\n true\n );\n }\n }\n\n private _callUserResponseHook(span: Span, response: NormalizedResponse) {\n const { responseHook } = this.getConfig();\n if (!responseHook) return;\n\n const responseInfo: AwsSdkResponseHookInformation = {\n response,\n };\n safeExecuteInTheMiddle(\n () => responseHook(span, responseInfo),\n (e: Error | undefined) => {\n if (e)\n diag.error(\n `${AwsInstrumentation.component} instrumentation: responseHook error`,\n e\n );\n },\n true\n );\n }\n\n private _callUserExceptionResponseHook(\n span: Span,\n request: NormalizedRequest,\n err: any\n ) {\n const { exceptionHook } = this.getConfig();\n if (!exceptionHook) return;\n const requestInfo: AwsSdkRequestHookInformation = {\n request,\n };\n\n safeExecuteInTheMiddle(\n () => exceptionHook(span, requestInfo, err),\n (e: Error | undefined) => {\n if (e)\n diag.error(\n `${AwsInstrumentation.component} instrumentation: exceptionHook error`,\n e\n );\n },\n true\n );\n }\n\n private _getV3ConstructStackPatch(\n moduleVersion: string | undefined,\n original: (...args: unknown[]) => MiddlewareStack<any, any>\n ) {\n const self = this;\n return function constructStack(\n this: any,\n ...args: unknown[]\n ): MiddlewareStack<any, any> {\n const stack: MiddlewareStack<any, any> = original.apply(this, args);\n self.patchV3MiddlewareStack(moduleVersion, stack);\n return stack;\n };\n }\n\n private _getV3SmithyClientSendPatch(\n moduleVersion: string | undefined,\n original: (...args: unknown[]) => Promise<any>\n ) {\n const self = this;\n return function send(\n this: any,\n command: V3PluginCommand,\n ...args: unknown[]\n ): Promise<any> {\n command[V3_CLIENT_CONFIG_KEY] = this.config;\n self.patchV3MiddlewareStack(moduleVersion, this.middlewareStack);\n return original.apply(this, [command, ...args]);\n };\n }\n\n private patchV3MiddlewareStack(\n moduleVersion: string | undefined,\n middlewareStackToPatch: MiddlewareStack<any, any>\n ) {\n if (!isWrapped(middlewareStackToPatch.resolve)) {\n this._wrap(\n middlewareStackToPatch,\n 'resolve',\n this._getV3MiddlewareStackResolvePatch.bind(this, moduleVersion)\n );\n }\n\n // 'clone' and 'concat' functions are internally calling 'constructStack' which is in same\n // module, thus not patched, and we need to take care of it specifically.\n if (!isWrapped(middlewareStackToPatch.clone)) {\n this._wrap(\n middlewareStackToPatch,\n 'clone',\n this._getV3MiddlewareStackClonePatch.bind(this, moduleVersion)\n );\n }\n if (!isWrapped(middlewareStackToPatch.concat)) {\n this._wrap(\n middlewareStackToPatch,\n 'concat',\n this._getV3MiddlewareStackClonePatch.bind(this, moduleVersion)\n );\n }\n }\n\n private _getV3MiddlewareStackClonePatch(\n moduleVersion: string | undefined,\n original: (...args: any[]) => MiddlewareStack<any, any>\n ) {\n const self = this;\n return function (this: any, ...args: any[]) {\n const newStack = original.apply(this, args);\n self.patchV3MiddlewareStack(moduleVersion, newStack);\n return newStack;\n };\n }\n\n private _getV3MiddlewareStackResolvePatch(\n moduleVersion: string | undefined,\n original: (\n _handler: any,\n context: HandlerExecutionContext\n ) => AwsV3MiddlewareHandler<any, any>\n ) {\n const self = this;\n return function (\n this: any,\n _handler: any,\n awsExecutionContext: HandlerExecutionContext\n ): AwsV3MiddlewareHandler<any, any> {\n const origHandler = original.call(this, _handler, awsExecutionContext);\n const patchedHandler = function (\n this: any,\n command: InitializeHandlerArguments<any> & {\n [V3_CLIENT_CONFIG_KEY]?: any;\n }\n ): Promise<any> {\n const clientConfig = command[V3_CLIENT_CONFIG_KEY];\n const regionPromise = clientConfig?.region?.();\n const serviceName =\n clientConfig?.serviceId ??\n removeSuffixFromStringIfExists(\n // Use 'AWS' as a fallback serviceName to match type definition.\n // In practice, `clientName` should always be set.\n awsExecutionContext.clientName || 'AWS',\n 'Client'\n );\n const commandName =\n awsExecutionContext.commandName ?? command.constructor?.name;\n const normalizedRequest = normalizeV3Request(\n serviceName,\n commandName,\n command.input,\n undefined\n );\n const requestMetadata = self.servicesExtensions.requestPreSpanHook(\n normalizedRequest,\n self.getConfig(),\n self._diag,\n self._dbSemconvStability\n );\n const startTime = hrTime();\n const span = self._startAwsV3Span(normalizedRequest, requestMetadata);\n const activeContextWithSpan = trace.setSpan(context.active(), span);\n\n const handlerPromise = new Promise((resolve, reject) => {\n Promise.resolve(regionPromise)\n .then(resolvedRegion => {\n normalizedRequest.region = resolvedRegion;\n span.setAttribute(AttributeNames.CLOUD_REGION, resolvedRegion);\n })\n .catch(e => {\n // there is nothing much we can do in this case.\n // we'll just continue without region\n diag.debug(\n `${AwsInstrumentation.component} instrumentation: failed to extract region from async function`,\n e\n );\n })\n .finally(() => {\n self._callUserPreRequestHook(\n span,\n normalizedRequest,\n moduleVersion\n );\n const resultPromise = context.with(activeContextWithSpan, () => {\n self.servicesExtensions.requestPostSpanHook(normalizedRequest);\n return self._callOriginalFunction(() =>\n origHandler.call(this, command)\n );\n });\n const promiseWithResponseLogic = resultPromise\n .then(response => {\n const requestId = response.output?.$metadata?.requestId;\n if (requestId) {\n span.setAttribute(AttributeNames.AWS_REQUEST_ID, requestId);\n }\n\n const httpStatusCode =\n response.output?.$metadata?.httpStatusCode;\n if (httpStatusCode) {\n if (self._httpSemconvStability & SemconvStability.OLD) {\n span.setAttribute(ATTR_HTTP_STATUS_CODE, httpStatusCode);\n }\n if (self._httpSemconvStability & SemconvStability.STABLE) {\n span.setAttribute(\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n httpStatusCode\n );\n }\n }\n\n const extendedRequestId =\n response.output?.$metadata?.extendedRequestId;\n if (extendedRequestId) {\n span.setAttribute(\n AttributeNames.AWS_REQUEST_EXTENDED_ID,\n extendedRequestId\n );\n }\n\n const normalizedResponse: NormalizedResponse = {\n data: response.output,\n request: normalizedRequest,\n requestId: requestId,\n };\n const override = self.servicesExtensions.responseHook(\n normalizedResponse,\n span,\n self.tracer,\n self.getConfig(),\n startTime\n );\n if (override) {\n response.output = override;\n normalizedResponse.data = override;\n }\n self._callUserResponseHook(span, normalizedResponse);\n return response;\n })\n .catch(err => {\n const requestId = err?.RequestId;\n if (requestId) {\n span.setAttribute(AttributeNames.AWS_REQUEST_ID, requestId);\n }\n\n const httpStatusCode = err?.$metadata?.httpStatusCode;\n if (httpStatusCode) {\n if (self._httpSemconvStability & SemconvStability.OLD) {\n span.setAttribute(ATTR_HTTP_STATUS_CODE, httpStatusCode);\n }\n if (self._httpSemconvStability & SemconvStability.STABLE) {\n span.setAttribute(\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n httpStatusCode\n );\n }\n }\n\n const extendedRequestId = err?.extendedRequestId;\n if (extendedRequestId) {\n span.setAttribute(\n AttributeNames.AWS_REQUEST_EXTENDED_ID,\n extendedRequestId\n );\n }\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n });\n span.recordException(err);\n self._callUserExceptionResponseHook(\n span,\n normalizedRequest,\n err\n );\n throw err;\n })\n .finally(() => {\n if (!requestMetadata.isStream) {\n span.end();\n }\n });\n promiseWithResponseLogic\n .then(res => {\n resolve(res);\n })\n .catch(err => reject(err));\n });\n });\n\n return requestMetadata.isIncoming\n ? bindPromise(handlerPromise, activeContextWithSpan, 2)\n : handlerPromise;\n };\n return patchedHandler;\n };\n }\n\n private _callOriginalFunction<T>(originalFunction: (...args: any[]) => T): T {\n if (this.getConfig().suppressInternalInstrumentation) {\n return context.with(suppressTracing(context.active()), originalFunction);\n } else {\n return originalFunction();\n }\n }\n\n override _updateMetricInstruments() {\n if (!this.servicesExtensions) {\n this.servicesExtensions = new ServicesExtensions();\n }\n this.servicesExtensions.updateMetricInstruments(this.meter);\n }\n}\n"]}
1
+ {"version":3,"file":"aws-sdk.js","sourceRoot":"","sources":["../../src/aws-sdk.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n Span,\n SpanKind,\n context,\n trace,\n diag,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport { hrTime, suppressTracing } from '@opentelemetry/core';\nimport { AttributeNames } from './enums';\nimport { ServicesExtensions } from './services';\nimport {\n AwsSdkInstrumentationConfig,\n AwsSdkRequestHookInformation,\n AwsSdkResponseHookInformation,\n NormalizedRequest,\n NormalizedResponse,\n} from './types';\n/** @knipignore */\nimport { PACKAGE_NAME, PACKAGE_VERSION } from './version';\nimport {\n InstrumentationBase,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n isWrapped,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport type {\n MiddlewareStack,\n HandlerExecutionContext,\n Command as AwsV3Command,\n Handler as AwsV3MiddlewareHandler,\n InitializeHandlerArguments,\n} from '@aws-sdk/types';\nimport {\n bindPromise,\n extractAttributesFromNormalizedRequest,\n normalizeV3Request,\n removeSuffixFromStringIfExists,\n} from './utils';\nimport { propwrap } from './propwrap';\nimport { RequestMetadata } from './services/ServiceExtension';\nimport { ATTR_HTTP_RESPONSE_STATUS_CODE } from '@opentelemetry/semantic-conventions';\n\nconst V3_CLIENT_CONFIG_KEY = Symbol(\n 'opentelemetry.instrumentation.aws-sdk.client.config'\n);\ntype V3PluginCommand = AwsV3Command<any, any, any, any, any> & {\n [V3_CLIENT_CONFIG_KEY]?: any;\n};\n\nexport class AwsInstrumentation extends InstrumentationBase<AwsSdkInstrumentationConfig> {\n static readonly component = 'aws-sdk';\n // need declare since initialized in callbacks from super constructor\n declare private servicesExtensions: ServicesExtensions;\n\n constructor(config: AwsSdkInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n }\n\n protected init(): InstrumentationModuleDefinition[] {\n const v3MiddlewareStackFileOldVersions = new InstrumentationNodeModuleFile(\n '@aws-sdk/middleware-stack/dist/cjs/MiddlewareStack.js',\n ['>=3.1.0 <3.35.0'],\n this.patchV3ConstructStack.bind(this),\n this.unpatchV3ConstructStack.bind(this)\n );\n const v3MiddlewareStackFileNewVersions = new InstrumentationNodeModuleFile(\n '@aws-sdk/middleware-stack/dist-cjs/MiddlewareStack.js',\n ['>=3.35.0'],\n this.patchV3ConstructStack.bind(this),\n this.unpatchV3ConstructStack.bind(this)\n );\n\n // as for aws-sdk v3.13.1, constructStack is exported from @aws-sdk/middleware-stack as\n // getter instead of function, which fails shimmer.\n // so we are patching the MiddlewareStack.js file directly to get around it.\n const v3MiddlewareStack = new InstrumentationNodeModuleDefinition(\n '@aws-sdk/middleware-stack',\n ['^3.1.0'],\n undefined,\n undefined,\n [v3MiddlewareStackFileOldVersions, v3MiddlewareStackFileNewVersions]\n );\n\n // Patch for @smithy/middleware-stack for @aws-sdk/* packages v3.363.0+.\n // As of @smithy/middleware-stack@2.1.0 `constructStack` is only available\n // as a getter, so we cannot use `this._wrap()`.\n const self = this;\n\n const v3SmithyMiddlewareStack = new InstrumentationNodeModuleDefinition(\n '@smithy/middleware-stack',\n ['>=2.0.0'],\n (moduleExports, moduleVersion) => {\n const newExports = propwrap(\n moduleExports,\n 'constructStack',\n (orig: any) => {\n self._diag.debug('propwrapping aws-sdk v3 constructStack');\n return self._getV3ConstructStackPatch(moduleVersion, orig);\n }\n );\n return newExports;\n }\n );\n\n // Patch for @smithy/core >= 3.24.0: Client class moved from @smithy/smithy-client\n // into @smithy/core/client bundle. We need to patch Client.prototype.send there too.\n const v3SmithyCoreClientFile = new InstrumentationNodeModuleFile(\n '@smithy/core/dist-cjs/submodules/client/index.js',\n ['>=3.24.0'],\n this.patchV3SmithyClient.bind(this),\n this.unpatchV3SmithyClient.bind(this)\n );\n const v3SmithyCore = new InstrumentationNodeModuleDefinition(\n '@smithy/core',\n ['>=3.24.0'],\n undefined,\n undefined,\n [v3SmithyCoreClientFile]\n );\n const v3SmithyClient = new InstrumentationNodeModuleDefinition(\n '@aws-sdk/smithy-client',\n ['^3.1.0'],\n this.patchV3SmithyClient.bind(this),\n this.unpatchV3SmithyClient.bind(this)\n );\n\n // patch for new @smithy/smithy-client for aws-sdk packages v3.363.0+\n const v3NewSmithyClient = new InstrumentationNodeModuleDefinition(\n '@smithy/smithy-client',\n ['>=1.0.3'],\n this.patchV3SmithyClient.bind(this),\n this.unpatchV3SmithyClient.bind(this)\n );\n\n return [\n v3MiddlewareStack,\n v3SmithyMiddlewareStack,\n v3SmithyCore,\n v3SmithyClient,\n v3NewSmithyClient,\n ];\n }\n\n protected patchV3ConstructStack(moduleExports: any, moduleVersion?: string) {\n this._wrap(\n moduleExports,\n 'constructStack',\n this._getV3ConstructStackPatch.bind(this, moduleVersion)\n );\n return moduleExports;\n }\n\n protected unpatchV3ConstructStack(moduleExports: any) {\n this._unwrap(moduleExports, 'constructStack');\n return moduleExports;\n }\n\n protected patchV3SmithyClient(moduleExports: any, moduleVersion?: string) {\n this._wrap(\n moduleExports.Client.prototype,\n 'send',\n this._getV3SmithyClientSendPatch.bind(this, moduleVersion)\n );\n return moduleExports;\n }\n\n protected unpatchV3SmithyClient(moduleExports: any) {\n this._unwrap(moduleExports.Client.prototype, 'send');\n return moduleExports;\n }\n\n private _startAwsV3Span(\n normalizedRequest: NormalizedRequest,\n metadata: RequestMetadata\n ): Span {\n const name =\n metadata.spanName ??\n `${normalizedRequest.serviceName}.${normalizedRequest.commandName}`;\n const newSpan = this.tracer.startSpan(name, {\n kind: metadata.spanKind ?? SpanKind.CLIENT,\n attributes: {\n ...extractAttributesFromNormalizedRequest(normalizedRequest),\n ...metadata.spanAttributes,\n },\n });\n\n return newSpan;\n }\n\n private _callUserPreRequestHook(\n span: Span,\n request: NormalizedRequest,\n moduleVersion: string | undefined\n ) {\n const { preRequestHook } = this.getConfig();\n if (preRequestHook) {\n const requestInfo: AwsSdkRequestHookInformation = {\n moduleVersion,\n request,\n };\n safeExecuteInTheMiddle(\n () => preRequestHook(span, requestInfo),\n (e: Error | undefined) => {\n if (e)\n diag.error(\n `${AwsInstrumentation.component} instrumentation: preRequestHook error`,\n e\n );\n },\n true\n );\n }\n }\n\n private _callUserResponseHook(span: Span, response: NormalizedResponse) {\n const { responseHook } = this.getConfig();\n if (!responseHook) return;\n\n const responseInfo: AwsSdkResponseHookInformation = {\n response,\n };\n safeExecuteInTheMiddle(\n () => responseHook(span, responseInfo),\n (e: Error | undefined) => {\n if (e)\n diag.error(\n `${AwsInstrumentation.component} instrumentation: responseHook error`,\n e\n );\n },\n true\n );\n }\n\n private _callUserExceptionResponseHook(\n span: Span,\n request: NormalizedRequest,\n err: any\n ) {\n const { exceptionHook } = this.getConfig();\n if (!exceptionHook) return;\n const requestInfo: AwsSdkRequestHookInformation = {\n request,\n };\n\n safeExecuteInTheMiddle(\n () => exceptionHook(span, requestInfo, err),\n (e: Error | undefined) => {\n if (e)\n diag.error(\n `${AwsInstrumentation.component} instrumentation: exceptionHook error`,\n e\n );\n },\n true\n );\n }\n\n private _getV3ConstructStackPatch(\n moduleVersion: string | undefined,\n original: (...args: unknown[]) => MiddlewareStack<any, any>\n ) {\n const self = this;\n return function constructStack(\n this: any,\n ...args: unknown[]\n ): MiddlewareStack<any, any> {\n const stack: MiddlewareStack<any, any> = original.apply(this, args);\n self.patchV3MiddlewareStack(moduleVersion, stack);\n return stack;\n };\n }\n\n private _getV3SmithyClientSendPatch(\n moduleVersion: string | undefined,\n original: (...args: unknown[]) => Promise<any>\n ) {\n const self = this;\n return function send(\n this: any,\n command: V3PluginCommand,\n ...args: unknown[]\n ): Promise<any> {\n command[V3_CLIENT_CONFIG_KEY] = this.config;\n self.patchV3MiddlewareStack(moduleVersion, this.middlewareStack);\n return original.apply(this, [command, ...args]);\n };\n }\n\n private patchV3MiddlewareStack(\n moduleVersion: string | undefined,\n middlewareStackToPatch: MiddlewareStack<any, any>\n ) {\n if (!isWrapped(middlewareStackToPatch.resolve)) {\n this._wrap(\n middlewareStackToPatch,\n 'resolve',\n this._getV3MiddlewareStackResolvePatch.bind(this, moduleVersion)\n );\n }\n\n // 'clone' and 'concat' functions are internally calling 'constructStack' which is in same\n // module, thus not patched, and we need to take care of it specifically.\n if (!isWrapped(middlewareStackToPatch.clone)) {\n this._wrap(\n middlewareStackToPatch,\n 'clone',\n this._getV3MiddlewareStackClonePatch.bind(this, moduleVersion)\n );\n }\n if (!isWrapped(middlewareStackToPatch.concat)) {\n this._wrap(\n middlewareStackToPatch,\n 'concat',\n this._getV3MiddlewareStackClonePatch.bind(this, moduleVersion)\n );\n }\n }\n\n private _getV3MiddlewareStackClonePatch(\n moduleVersion: string | undefined,\n original: (...args: any[]) => MiddlewareStack<any, any>\n ) {\n const self = this;\n return function (this: any, ...args: any[]) {\n const newStack = original.apply(this, args);\n self.patchV3MiddlewareStack(moduleVersion, newStack);\n return newStack;\n };\n }\n\n private _getV3MiddlewareStackResolvePatch(\n moduleVersion: string | undefined,\n original: (\n _handler: any,\n context: HandlerExecutionContext\n ) => AwsV3MiddlewareHandler<any, any>\n ) {\n const self = this;\n return function (\n this: any,\n _handler: any,\n awsExecutionContext: HandlerExecutionContext\n ): AwsV3MiddlewareHandler<any, any> {\n const origHandler = original.call(this, _handler, awsExecutionContext);\n const patchedHandler = function (\n this: any,\n command: InitializeHandlerArguments<any> & {\n [V3_CLIENT_CONFIG_KEY]?: any;\n }\n ): Promise<any> {\n const clientConfig = command[V3_CLIENT_CONFIG_KEY];\n const regionPromise = clientConfig?.region?.();\n const serviceName =\n clientConfig?.serviceId ??\n removeSuffixFromStringIfExists(\n // Use 'AWS' as a fallback serviceName to match type definition.\n // In practice, `clientName` should always be set.\n awsExecutionContext.clientName || 'AWS',\n 'Client'\n );\n const commandName =\n awsExecutionContext.commandName ?? command.constructor?.name;\n const normalizedRequest = normalizeV3Request(\n serviceName,\n commandName,\n command.input,\n undefined\n );\n const requestMetadata = self.servicesExtensions.requestPreSpanHook(\n normalizedRequest,\n self.getConfig(),\n self._diag\n );\n const startTime = hrTime();\n const span = self._startAwsV3Span(normalizedRequest, requestMetadata);\n const activeContextWithSpan = trace.setSpan(context.active(), span);\n\n const handlerPromise = new Promise((resolve, reject) => {\n Promise.resolve(regionPromise)\n .then(resolvedRegion => {\n normalizedRequest.region = resolvedRegion;\n span.setAttribute(AttributeNames.CLOUD_REGION, resolvedRegion);\n })\n .catch(e => {\n // there is nothing much we can do in this case.\n // we'll just continue without region\n diag.debug(\n `${AwsInstrumentation.component} instrumentation: failed to extract region from async function`,\n e\n );\n })\n .finally(() => {\n self._callUserPreRequestHook(\n span,\n normalizedRequest,\n moduleVersion\n );\n const resultPromise = context.with(activeContextWithSpan, () => {\n self.servicesExtensions.requestPostSpanHook(normalizedRequest);\n return self._callOriginalFunction(() =>\n origHandler.call(this, command)\n );\n });\n const promiseWithResponseLogic = resultPromise\n .then(response => {\n const requestId = response.output?.$metadata?.requestId;\n if (requestId) {\n span.setAttribute(AttributeNames.AWS_REQUEST_ID, requestId);\n }\n\n const httpStatusCode =\n response.output?.$metadata?.httpStatusCode;\n if (httpStatusCode) {\n span.setAttribute(\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n httpStatusCode\n );\n }\n\n const extendedRequestId =\n response.output?.$metadata?.extendedRequestId;\n if (extendedRequestId) {\n span.setAttribute(\n AttributeNames.AWS_REQUEST_EXTENDED_ID,\n extendedRequestId\n );\n }\n\n const normalizedResponse: NormalizedResponse = {\n data: response.output,\n request: normalizedRequest,\n requestId: requestId,\n };\n const override = self.servicesExtensions.responseHook(\n normalizedResponse,\n span,\n self.tracer,\n self.getConfig(),\n startTime\n );\n if (override) {\n response.output = override;\n normalizedResponse.data = override;\n }\n self._callUserResponseHook(span, normalizedResponse);\n return response;\n })\n .catch(err => {\n const requestId = err?.RequestId;\n if (requestId) {\n span.setAttribute(AttributeNames.AWS_REQUEST_ID, requestId);\n }\n\n const httpStatusCode = err?.$metadata?.httpStatusCode;\n if (httpStatusCode) {\n span.setAttribute(\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n httpStatusCode\n );\n }\n\n const extendedRequestId = err?.extendedRequestId;\n if (extendedRequestId) {\n span.setAttribute(\n AttributeNames.AWS_REQUEST_EXTENDED_ID,\n extendedRequestId\n );\n }\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n });\n span.recordException(err);\n self._callUserExceptionResponseHook(\n span,\n normalizedRequest,\n err\n );\n throw err;\n })\n .finally(() => {\n if (!requestMetadata.isStream) {\n span.end();\n }\n });\n promiseWithResponseLogic\n .then(res => {\n resolve(res);\n })\n .catch(err => reject(err));\n });\n });\n\n return requestMetadata.isIncoming\n ? bindPromise(handlerPromise, activeContextWithSpan, 2)\n : handlerPromise;\n };\n return patchedHandler;\n };\n }\n\n private _callOriginalFunction<T>(originalFunction: (...args: any[]) => T): T {\n if (this.getConfig().suppressInternalInstrumentation) {\n return context.with(suppressTracing(context.active()), originalFunction);\n } else {\n return originalFunction();\n }\n }\n\n override _updateMetricInstruments() {\n if (!this.servicesExtensions) {\n this.servicesExtensions = new ServicesExtensions();\n }\n this.servicesExtensions.updateMetricInstruments(this.meter);\n }\n}\n"]}
@@ -1,5 +1,4 @@
1
1
  import { DiagLogger, HrTime, Meter, Span, SpanAttributes, SpanKind, Tracer } from '@opentelemetry/api';
2
- import { SemconvStability } from '@opentelemetry/instrumentation';
3
2
  import { AwsSdkInstrumentationConfig, NormalizedRequest, NormalizedResponse } from '../types';
4
3
  export interface RequestMetadata {
5
4
  isIncoming: boolean;
@@ -9,7 +8,7 @@ export interface RequestMetadata {
9
8
  spanName?: string;
10
9
  }
11
10
  export interface ServiceExtension {
12
- requestPreSpanHook: (request: NormalizedRequest, config: AwsSdkInstrumentationConfig, diag: DiagLogger, dbSemconvStability?: SemconvStability) => RequestMetadata;
11
+ requestPreSpanHook: (request: NormalizedRequest, config: AwsSdkInstrumentationConfig, diag: DiagLogger) => RequestMetadata;
13
12
  requestPostSpanHook?: (request: NormalizedRequest) => void;
14
13
  responseHook?: (response: NormalizedResponse, span: Span, tracer: Tracer, config: AwsSdkInstrumentationConfig, startTime: HrTime) => any | undefined;
15
14
  updateMetricInstruments?: (meter: Meter) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceExtension.js","sourceRoot":"","sources":["../../../src/services/ServiceExtension.ts"],"names":[],"mappings":"","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n DiagLogger,\n HrTime,\n Meter,\n Span,\n SpanAttributes,\n SpanKind,\n Tracer,\n} from '@opentelemetry/api';\nimport { SemconvStability } from '@opentelemetry/instrumentation';\nimport {\n AwsSdkInstrumentationConfig,\n NormalizedRequest,\n NormalizedResponse,\n} from '../types';\n\nexport interface RequestMetadata {\n // isIncoming - if true, then the operation callback / promise should be bind with the operation's span\n isIncoming: boolean;\n // isStream - if true, then the response is a stream so the span should not be ended by the middleware.\n // the ServiceExtension must end the span itself, generally by wrapping the stream and ending after it is\n // consumed.\n isStream?: boolean;\n spanAttributes?: SpanAttributes;\n spanKind?: SpanKind;\n spanName?: string;\n}\n\nexport interface ServiceExtension {\n // called before request is sent, and before span is started\n requestPreSpanHook: (\n request: NormalizedRequest,\n config: AwsSdkInstrumentationConfig,\n diag: DiagLogger,\n dbSemconvStability?: SemconvStability\n ) => RequestMetadata;\n\n // called before request is sent, and after span is started\n requestPostSpanHook?: (request: NormalizedRequest) => void;\n\n // called after response is received. If value is returned, it replaces the response output.\n responseHook?: (\n response: NormalizedResponse,\n span: Span,\n tracer: Tracer,\n config: AwsSdkInstrumentationConfig,\n startTime: HrTime\n ) => any | undefined;\n\n updateMetricInstruments?: (meter: Meter) => void;\n}\n"]}
1
+ {"version":3,"file":"ServiceExtension.js","sourceRoot":"","sources":["../../../src/services/ServiceExtension.ts"],"names":[],"mappings":"","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n DiagLogger,\n HrTime,\n Meter,\n Span,\n SpanAttributes,\n SpanKind,\n Tracer,\n} from '@opentelemetry/api';\nimport {\n AwsSdkInstrumentationConfig,\n NormalizedRequest,\n NormalizedResponse,\n} from '../types';\n\nexport interface RequestMetadata {\n // isIncoming - if true, then the operation callback / promise should be bind with the operation's span\n isIncoming: boolean;\n // isStream - if true, then the response is a stream so the span should not be ended by the middleware.\n // the ServiceExtension must end the span itself, generally by wrapping the stream and ending after it is\n // consumed.\n isStream?: boolean;\n spanAttributes?: SpanAttributes;\n spanKind?: SpanKind;\n spanName?: string;\n}\n\nexport interface ServiceExtension {\n // called before request is sent, and before span is started\n requestPreSpanHook: (\n request: NormalizedRequest,\n config: AwsSdkInstrumentationConfig,\n diag: DiagLogger\n ) => RequestMetadata;\n\n // called before request is sent, and after span is started\n requestPostSpanHook?: (request: NormalizedRequest) => void;\n\n // called after response is received. If value is returned, it replaces the response output.\n responseHook?: (\n response: NormalizedResponse,\n span: Span,\n tracer: Tracer,\n config: AwsSdkInstrumentationConfig,\n startTime: HrTime\n ) => any | undefined;\n\n updateMetricInstruments?: (meter: Meter) => void;\n}\n"]}
@@ -1,12 +1,11 @@
1
1
  import { Tracer, Span, DiagLogger, Meter, HrTime } from '@opentelemetry/api';
2
- import { SemconvStability } from '@opentelemetry/instrumentation';
3
2
  import { ServiceExtension, RequestMetadata } from './ServiceExtension';
4
3
  import { AwsSdkInstrumentationConfig, NormalizedRequest, NormalizedResponse } from '../types';
5
4
  export declare class ServicesExtensions implements ServiceExtension {
6
5
  services: Map<string, ServiceExtension>;
7
6
  constructor();
8
7
  private registerServices;
9
- requestPreSpanHook(request: NormalizedRequest, config: AwsSdkInstrumentationConfig, diag: DiagLogger, dbSemconvStability?: SemconvStability): RequestMetadata;
8
+ requestPreSpanHook(request: NormalizedRequest, config: AwsSdkInstrumentationConfig, diag: DiagLogger): RequestMetadata;
10
9
  requestPostSpanHook(request: NormalizedRequest): void;
11
10
  responseHook(response: NormalizedResponse, span: Span, tracer: Tracer, config: AwsSdkInstrumentationConfig, startTime: HrTime): any;
12
11
  updateMetricInstruments(meter: Meter): void;
@@ -26,13 +26,13 @@ class ServicesExtensions {
26
26
  this.services.set('Kinesis', new kinesis_1.KinesisServiceExtension());
27
27
  this.services.set('BedrockRuntime', new bedrock_runtime_1.BedrockRuntimeServiceExtension());
28
28
  }
29
- requestPreSpanHook(request, config, diag, dbSemconvStability) {
29
+ requestPreSpanHook(request, config, diag) {
30
30
  const serviceExtension = this.services.get(request.serviceName);
31
31
  if (!serviceExtension)
32
32
  return {
33
33
  isIncoming: false,
34
34
  };
35
- return serviceExtension.requestPreSpanHook(request, config, diag, dbSemconvStability);
35
+ return serviceExtension.requestPreSpanHook(request, config, diag);
36
36
  }
37
37
  requestPostSpanHook(request) {
38
38
  const serviceExtension = this.services.get(request.serviceName);
@@ -1 +1 @@
1
- {"version":3,"file":"ServicesExtensions.js","sourceRoot":"","sources":["../../../src/services/ServicesExtensions.ts"],"names":[],"mappings":";;;AAOA,+BAA4C;AAM5C,uDAAmE;AACnE,yCAAsD;AACtD,qDAAkE;AAClE,+BAA4C;AAC5C,mDAAgE;AAChE,qCAAkD;AAClD,6BAA0C;AAC1C,uCAAoD;AAEpD,MAAa,kBAAkB;IAC7B,QAAQ,GAAkC,IAAI,GAAG,EAAE,CAAC;IAEpD;QACE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,+CAA8B,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,6CAA6B,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,yBAAmB,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,yBAAmB,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,mCAAwB,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,+BAAsB,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,uBAAkB,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,iCAAuB,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,gDAA8B,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,kBAAkB,CAChB,OAA0B,EAC1B,MAAmC,EACnC,IAAgB,EAChB,kBAAqC;QAErC,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB;YACnB,OAAO;gBACL,UAAU,EAAE,KAAK;aAClB,CAAC;QACJ,OAAO,gBAAgB,CAAC,kBAAkB,CACxC,OAAO,EACP,MAAM,EACN,IAAI,EACJ,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAA0B;QAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB,EAAE,mBAAmB;YAAE,OAAO;QACnD,OAAO,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,YAAY,CACV,QAA4B,EAC5B,IAAU,EACV,MAAc,EACd,MAAmC,EACnC,SAAiB;QAEjB,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEzE,OAAO,gBAAgB,EAAE,YAAY,EAAE,CACrC,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,MAAM,EACN,SAAS,CACV,CAAC;IACJ,CAAC;IAED,uBAAuB,CAAC,KAAY;QAClC,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;YACrD,gBAAgB,CAAC,uBAAuB,EAAE,CAAC,KAAK,CAAC,CAAC;SACnD;IACH,CAAC;CACF;AAnED,gDAmEC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { Tracer, Span, DiagLogger, Meter, HrTime } from '@opentelemetry/api';\nimport { SemconvStability } from '@opentelemetry/instrumentation';\nimport { ServiceExtension, RequestMetadata } from './ServiceExtension';\nimport { SqsServiceExtension } from './sqs';\nimport {\n AwsSdkInstrumentationConfig,\n NormalizedRequest,\n NormalizedResponse,\n} from '../types';\nimport { BedrockRuntimeServiceExtension } from './bedrock-runtime';\nimport { DynamodbServiceExtension } from './dynamodb';\nimport { SecretsManagerServiceExtension } from './secretsmanager';\nimport { SnsServiceExtension } from './sns';\nimport { StepFunctionsServiceExtension } from './stepfunctions';\nimport { LambdaServiceExtension } from './lambda';\nimport { S3ServiceExtension } from './s3';\nimport { KinesisServiceExtension } from './kinesis';\n\nexport class ServicesExtensions implements ServiceExtension {\n services: Map<string, ServiceExtension> = new Map();\n\n constructor() {\n this.registerServices();\n }\n\n private registerServices() {\n this.services.set('SecretsManager', new SecretsManagerServiceExtension());\n this.services.set('SFN', new StepFunctionsServiceExtension());\n this.services.set('SQS', new SqsServiceExtension());\n this.services.set('SNS', new SnsServiceExtension());\n this.services.set('DynamoDB', new DynamodbServiceExtension());\n this.services.set('Lambda', new LambdaServiceExtension());\n this.services.set('S3', new S3ServiceExtension());\n this.services.set('Kinesis', new KinesisServiceExtension());\n this.services.set('BedrockRuntime', new BedrockRuntimeServiceExtension());\n }\n\n requestPreSpanHook(\n request: NormalizedRequest,\n config: AwsSdkInstrumentationConfig,\n diag: DiagLogger,\n dbSemconvStability?: SemconvStability\n ): RequestMetadata {\n const serviceExtension = this.services.get(request.serviceName);\n if (!serviceExtension)\n return {\n isIncoming: false,\n };\n return serviceExtension.requestPreSpanHook(\n request,\n config,\n diag,\n dbSemconvStability\n );\n }\n\n requestPostSpanHook(request: NormalizedRequest) {\n const serviceExtension = this.services.get(request.serviceName);\n if (!serviceExtension?.requestPostSpanHook) return;\n return serviceExtension.requestPostSpanHook(request);\n }\n\n responseHook(\n response: NormalizedResponse,\n span: Span,\n tracer: Tracer,\n config: AwsSdkInstrumentationConfig,\n startTime: HrTime\n ) {\n const serviceExtension = this.services.get(response.request.serviceName);\n\n return serviceExtension?.responseHook?.(\n response,\n span,\n tracer,\n config,\n startTime\n );\n }\n\n updateMetricInstruments(meter: Meter) {\n for (const serviceExtension of this.services.values()) {\n serviceExtension.updateMetricInstruments?.(meter);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ServicesExtensions.js","sourceRoot":"","sources":["../../../src/services/ServicesExtensions.ts"],"names":[],"mappings":";;;AAMA,+BAA4C;AAM5C,uDAAmE;AACnE,yCAAsD;AACtD,qDAAkE;AAClE,+BAA4C;AAC5C,mDAAgE;AAChE,qCAAkD;AAClD,6BAA0C;AAC1C,uCAAoD;AAEpD,MAAa,kBAAkB;IAC7B,QAAQ,GAAkC,IAAI,GAAG,EAAE,CAAC;IAEpD;QACE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,+CAA8B,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,6CAA6B,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,yBAAmB,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,yBAAmB,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,mCAAwB,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,+BAAsB,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,uBAAkB,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,iCAAuB,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,gDAA8B,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,kBAAkB,CAChB,OAA0B,EAC1B,MAAmC,EACnC,IAAgB;QAEhB,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB;YACnB,OAAO;gBACL,UAAU,EAAE,KAAK;aAClB,CAAC;QACJ,OAAO,gBAAgB,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,mBAAmB,CAAC,OAA0B;QAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB,EAAE,mBAAmB;YAAE,OAAO;QACnD,OAAO,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,YAAY,CACV,QAA4B,EAC5B,IAAU,EACV,MAAc,EACd,MAAmC,EACnC,SAAiB;QAEjB,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEzE,OAAO,gBAAgB,EAAE,YAAY,EAAE,CACrC,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,MAAM,EACN,SAAS,CACV,CAAC;IACJ,CAAC;IAED,uBAAuB,CAAC,KAAY;QAClC,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;YACrD,gBAAgB,CAAC,uBAAuB,EAAE,CAAC,KAAK,CAAC,CAAC;SACnD;IACH,CAAC;CACF;AA7DD,gDA6DC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { Tracer, Span, DiagLogger, Meter, HrTime } from '@opentelemetry/api';\nimport { ServiceExtension, RequestMetadata } from './ServiceExtension';\nimport { SqsServiceExtension } from './sqs';\nimport {\n AwsSdkInstrumentationConfig,\n NormalizedRequest,\n NormalizedResponse,\n} from '../types';\nimport { BedrockRuntimeServiceExtension } from './bedrock-runtime';\nimport { DynamodbServiceExtension } from './dynamodb';\nimport { SecretsManagerServiceExtension } from './secretsmanager';\nimport { SnsServiceExtension } from './sns';\nimport { StepFunctionsServiceExtension } from './stepfunctions';\nimport { LambdaServiceExtension } from './lambda';\nimport { S3ServiceExtension } from './s3';\nimport { KinesisServiceExtension } from './kinesis';\n\nexport class ServicesExtensions implements ServiceExtension {\n services: Map<string, ServiceExtension> = new Map();\n\n constructor() {\n this.registerServices();\n }\n\n private registerServices() {\n this.services.set('SecretsManager', new SecretsManagerServiceExtension());\n this.services.set('SFN', new StepFunctionsServiceExtension());\n this.services.set('SQS', new SqsServiceExtension());\n this.services.set('SNS', new SnsServiceExtension());\n this.services.set('DynamoDB', new DynamodbServiceExtension());\n this.services.set('Lambda', new LambdaServiceExtension());\n this.services.set('S3', new S3ServiceExtension());\n this.services.set('Kinesis', new KinesisServiceExtension());\n this.services.set('BedrockRuntime', new BedrockRuntimeServiceExtension());\n }\n\n requestPreSpanHook(\n request: NormalizedRequest,\n config: AwsSdkInstrumentationConfig,\n diag: DiagLogger\n ): RequestMetadata {\n const serviceExtension = this.services.get(request.serviceName);\n if (!serviceExtension)\n return {\n isIncoming: false,\n };\n return serviceExtension.requestPreSpanHook(request, config, diag);\n }\n\n requestPostSpanHook(request: NormalizedRequest) {\n const serviceExtension = this.services.get(request.serviceName);\n if (!serviceExtension?.requestPostSpanHook) return;\n return serviceExtension.requestPostSpanHook(request);\n }\n\n responseHook(\n response: NormalizedResponse,\n span: Span,\n tracer: Tracer,\n config: AwsSdkInstrumentationConfig,\n startTime: HrTime\n ) {\n const serviceExtension = this.services.get(response.request.serviceName);\n\n return serviceExtension?.responseHook?.(\n response,\n span,\n tracer,\n config,\n startTime\n );\n }\n\n updateMetricInstruments(meter: Meter) {\n for (const serviceExtension of this.services.values()) {\n serviceExtension.updateMetricInstruments?.(meter);\n }\n }\n}\n"]}
@@ -1,10 +1,9 @@
1
1
  import { DiagLogger, Span, Tracer } from '@opentelemetry/api';
2
- import { SemconvStability } from '@opentelemetry/instrumentation';
3
2
  import { RequestMetadata, ServiceExtension } from './ServiceExtension';
4
3
  import { AwsSdkInstrumentationConfig, NormalizedRequest, NormalizedResponse } from '../types';
5
4
  export declare class DynamodbServiceExtension implements ServiceExtension {
6
5
  toArray<T>(values: T | T[]): T[];
7
- requestPreSpanHook(normalizedRequest: NormalizedRequest, config: AwsSdkInstrumentationConfig, diag: DiagLogger, dbSemconvStability?: SemconvStability): RequestMetadata;
6
+ requestPreSpanHook(normalizedRequest: NormalizedRequest, config: AwsSdkInstrumentationConfig, diag: DiagLogger): RequestMetadata;
8
7
  responseHook(response: NormalizedResponse, span: Span, _tracer: Tracer, _config: AwsSdkInstrumentationConfig): void;
9
8
  }
10
9
  //# sourceMappingURL=dynamodb.d.ts.map
@@ -6,44 +6,27 @@ exports.DynamodbServiceExtension = void 0;
6
6
  * SPDX-License-Identifier: Apache-2.0
7
7
  */
8
8
  const api_1 = require("@opentelemetry/api");
9
- const instrumentation_1 = require("@opentelemetry/instrumentation");
10
9
  const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
11
10
  const semconv_1 = require("../semconv");
12
11
  class DynamodbServiceExtension {
13
12
  toArray(values) {
14
13
  return Array.isArray(values) ? values : [values];
15
14
  }
16
- requestPreSpanHook(normalizedRequest, config, diag, dbSemconvStability) {
15
+ requestPreSpanHook(normalizedRequest, config, diag) {
17
16
  const spanKind = api_1.SpanKind.CLIENT;
18
17
  let spanName;
19
18
  const isIncoming = false;
20
19
  const operation = normalizedRequest.commandName;
21
20
  const tableName = normalizedRequest.commandInput?.TableName;
22
21
  const spanAttributes = {};
23
- if (dbSemconvStability === undefined ||
24
- dbSemconvStability & instrumentation_1.SemconvStability.OLD) {
25
- spanAttributes[semconv_1.ATTR_DB_SYSTEM] = semconv_1.DB_SYSTEM_VALUE_DYNAMODB;
26
- spanAttributes[semconv_1.ATTR_DB_NAME] = tableName;
27
- spanAttributes[semconv_1.ATTR_DB_OPERATION] = operation;
28
- }
29
- if (dbSemconvStability !== undefined &&
30
- dbSemconvStability & instrumentation_1.SemconvStability.STABLE) {
31
- spanAttributes[semantic_conventions_1.ATTR_DB_SYSTEM_NAME] = semconv_1.DB_SYSTEM_NAME_VALUE_DYNAMODB;
32
- spanAttributes[semantic_conventions_1.ATTR_DB_NAMESPACE] = tableName;
33
- spanAttributes[semantic_conventions_1.ATTR_DB_OPERATION_NAME] = operation;
34
- }
22
+ spanAttributes[semantic_conventions_1.ATTR_DB_SYSTEM_NAME] = semconv_1.DB_SYSTEM_NAME_VALUE_DYNAMODB;
23
+ spanAttributes[semantic_conventions_1.ATTR_DB_NAMESPACE] = tableName;
24
+ spanAttributes[semantic_conventions_1.ATTR_DB_OPERATION_NAME] = operation;
35
25
  if (config.dynamoDBStatementSerializer) {
36
26
  try {
37
27
  const sanitizedStatement = config.dynamoDBStatementSerializer(operation, normalizedRequest.commandInput);
38
28
  if (typeof sanitizedStatement === 'string') {
39
- if (dbSemconvStability === undefined ||
40
- dbSemconvStability & instrumentation_1.SemconvStability.OLD) {
41
- spanAttributes[semconv_1.ATTR_DB_STATEMENT] = sanitizedStatement;
42
- }
43
- if (dbSemconvStability !== undefined &&
44
- dbSemconvStability & instrumentation_1.SemconvStability.STABLE) {
45
- spanAttributes[semantic_conventions_1.ATTR_DB_QUERY_TEXT] = sanitizedStatement;
46
- }
29
+ spanAttributes[semantic_conventions_1.ATTR_DB_QUERY_TEXT] = sanitizedStatement;
47
30
  }
48
31
  }
49
32
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"dynamodb.js","sourceRoot":"","sources":["../../../src/services/dynamodb.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n Attributes,\n DiagLogger,\n Span,\n SpanKind,\n Tracer,\n} from '@opentelemetry/api';\nimport { SemconvStability } from '@opentelemetry/instrumentation';\nimport {\n ATTR_DB_NAMESPACE,\n ATTR_DB_OPERATION_NAME,\n ATTR_DB_QUERY_TEXT,\n ATTR_DB_SYSTEM_NAME,\n} from '@opentelemetry/semantic-conventions';\nimport { RequestMetadata, ServiceExtension } from './ServiceExtension';\nimport {\n ATTR_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS,\n ATTR_AWS_DYNAMODB_CONSISTENT_READ,\n ATTR_AWS_DYNAMODB_CONSUMED_CAPACITY,\n ATTR_AWS_DYNAMODB_COUNT,\n ATTR_AWS_DYNAMODB_EXCLUSIVE_START_TABLE,\n ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES,\n ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES,\n ATTR_AWS_DYNAMODB_INDEX_NAME,\n ATTR_AWS_DYNAMODB_ITEM_COLLECTION_METRICS,\n ATTR_AWS_DYNAMODB_LIMIT,\n ATTR_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES,\n ATTR_AWS_DYNAMODB_PROJECTION,\n ATTR_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY,\n ATTR_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY,\n ATTR_AWS_DYNAMODB_SCAN_FORWARD,\n ATTR_AWS_DYNAMODB_SCANNED_COUNT,\n ATTR_AWS_DYNAMODB_SEGMENT,\n ATTR_AWS_DYNAMODB_SELECT,\n ATTR_AWS_DYNAMODB_TABLE_COUNT,\n ATTR_AWS_DYNAMODB_TABLE_NAMES,\n ATTR_AWS_DYNAMODB_TOTAL_SEGMENTS,\n ATTR_DB_NAME,\n ATTR_DB_OPERATION,\n ATTR_DB_STATEMENT,\n ATTR_DB_SYSTEM,\n DB_SYSTEM_NAME_VALUE_DYNAMODB,\n DB_SYSTEM_VALUE_DYNAMODB,\n} from '../semconv';\nimport {\n AwsSdkInstrumentationConfig,\n NormalizedRequest,\n NormalizedResponse,\n} from '../types';\n\nexport class DynamodbServiceExtension implements ServiceExtension {\n toArray<T>(values: T | T[]): T[] {\n return Array.isArray(values) ? values : [values];\n }\n\n requestPreSpanHook(\n normalizedRequest: NormalizedRequest,\n config: AwsSdkInstrumentationConfig,\n diag: DiagLogger,\n dbSemconvStability?: SemconvStability\n ): RequestMetadata {\n const spanKind: SpanKind = SpanKind.CLIENT;\n let spanName: string | undefined;\n const isIncoming = false;\n const operation = normalizedRequest.commandName;\n const tableName = normalizedRequest.commandInput?.TableName;\n\n const spanAttributes: Attributes = {};\n\n if (\n dbSemconvStability === undefined ||\n dbSemconvStability & SemconvStability.OLD\n ) {\n spanAttributes[ATTR_DB_SYSTEM] = DB_SYSTEM_VALUE_DYNAMODB;\n spanAttributes[ATTR_DB_NAME] = tableName;\n spanAttributes[ATTR_DB_OPERATION] = operation;\n }\n if (\n dbSemconvStability !== undefined &&\n dbSemconvStability & SemconvStability.STABLE\n ) {\n spanAttributes[ATTR_DB_SYSTEM_NAME] = DB_SYSTEM_NAME_VALUE_DYNAMODB;\n spanAttributes[ATTR_DB_NAMESPACE] = tableName;\n spanAttributes[ATTR_DB_OPERATION_NAME] = operation;\n }\n\n if (config.dynamoDBStatementSerializer) {\n try {\n const sanitizedStatement = config.dynamoDBStatementSerializer(\n operation,\n normalizedRequest.commandInput\n );\n\n if (typeof sanitizedStatement === 'string') {\n if (\n dbSemconvStability === undefined ||\n dbSemconvStability & SemconvStability.OLD\n ) {\n spanAttributes[ATTR_DB_STATEMENT] = sanitizedStatement;\n }\n if (\n dbSemconvStability !== undefined &&\n dbSemconvStability & SemconvStability.STABLE\n ) {\n spanAttributes[ATTR_DB_QUERY_TEXT] = sanitizedStatement;\n }\n }\n } catch (err) {\n diag.error('failed to sanitize DynamoDB statement', err);\n }\n }\n\n // normalizedRequest.commandInput.RequestItems) is undefined when no table names are returned\n // keys in this object are the table names\n if (normalizedRequest.commandInput?.TableName) {\n // Necessary for commands with only 1 table name (example: CreateTable). Attribute is TableName not keys of RequestItems\n // single table name returned for operations like CreateTable\n spanAttributes[ATTR_AWS_DYNAMODB_TABLE_NAMES] = [\n normalizedRequest.commandInput.TableName,\n ];\n } else if (normalizedRequest.commandInput?.RequestItems) {\n spanAttributes[ATTR_AWS_DYNAMODB_TABLE_NAMES] = Object.keys(\n normalizedRequest.commandInput.RequestItems\n );\n }\n\n if (operation === 'CreateTable' || operation === 'UpdateTable') {\n // only check for ProvisionedThroughput since ReadCapacityUnits and WriteCapacity units are required attributes\n if (normalizedRequest.commandInput?.ProvisionedThroughput) {\n spanAttributes[ATTR_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY] =\n normalizedRequest.commandInput.ProvisionedThroughput.ReadCapacityUnits;\n spanAttributes[ATTR_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY] =\n normalizedRequest.commandInput.ProvisionedThroughput.WriteCapacityUnits;\n }\n }\n\n if (\n operation === 'GetItem' ||\n operation === 'Scan' ||\n operation === 'Query'\n ) {\n if (normalizedRequest.commandInput?.ConsistentRead) {\n spanAttributes[ATTR_AWS_DYNAMODB_CONSISTENT_READ] =\n normalizedRequest.commandInput.ConsistentRead;\n }\n }\n\n if (operation === 'Query' || operation === 'Scan') {\n if (normalizedRequest.commandInput?.ProjectionExpression) {\n spanAttributes[ATTR_AWS_DYNAMODB_PROJECTION] =\n normalizedRequest.commandInput.ProjectionExpression;\n }\n }\n\n if (operation === 'CreateTable') {\n if (normalizedRequest.commandInput?.GlobalSecondaryIndexes) {\n spanAttributes[ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES] =\n this.toArray(\n normalizedRequest.commandInput.GlobalSecondaryIndexes\n ).map((x: { [DictionaryKey: string]: any }) => JSON.stringify(x));\n }\n\n if (normalizedRequest.commandInput?.LocalSecondaryIndexes) {\n spanAttributes[ATTR_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES] =\n this.toArray(\n normalizedRequest.commandInput.LocalSecondaryIndexes\n ).map((x: { [DictionaryKey: string]: any }) => JSON.stringify(x));\n }\n }\n\n if (\n operation === 'ListTables' ||\n operation === 'Query' ||\n operation === 'Scan'\n ) {\n if (normalizedRequest.commandInput?.Limit) {\n spanAttributes[ATTR_AWS_DYNAMODB_LIMIT] =\n normalizedRequest.commandInput.Limit;\n }\n }\n\n if (operation === 'ListTables') {\n if (normalizedRequest.commandInput?.ExclusiveStartTableName) {\n spanAttributes[ATTR_AWS_DYNAMODB_EXCLUSIVE_START_TABLE] =\n normalizedRequest.commandInput.ExclusiveStartTableName;\n }\n }\n\n if (operation === 'Query') {\n if (normalizedRequest.commandInput?.ScanIndexForward) {\n spanAttributes[ATTR_AWS_DYNAMODB_SCAN_FORWARD] =\n normalizedRequest.commandInput.ScanIndexForward;\n }\n\n if (normalizedRequest.commandInput?.IndexName) {\n spanAttributes[ATTR_AWS_DYNAMODB_INDEX_NAME] =\n normalizedRequest.commandInput.IndexName;\n }\n\n if (normalizedRequest.commandInput?.Select) {\n spanAttributes[ATTR_AWS_DYNAMODB_SELECT] =\n normalizedRequest.commandInput.Select;\n }\n }\n\n if (operation === 'Scan') {\n if (normalizedRequest.commandInput?.Segment) {\n spanAttributes[ATTR_AWS_DYNAMODB_SEGMENT] =\n normalizedRequest.commandInput?.Segment;\n }\n\n if (normalizedRequest.commandInput?.TotalSegments) {\n spanAttributes[ATTR_AWS_DYNAMODB_TOTAL_SEGMENTS] =\n normalizedRequest.commandInput?.TotalSegments;\n }\n\n if (normalizedRequest.commandInput?.IndexName) {\n spanAttributes[ATTR_AWS_DYNAMODB_INDEX_NAME] =\n normalizedRequest.commandInput.IndexName;\n }\n\n if (normalizedRequest.commandInput?.Select) {\n spanAttributes[ATTR_AWS_DYNAMODB_SELECT] =\n normalizedRequest.commandInput.Select;\n }\n }\n\n if (operation === 'UpdateTable') {\n if (normalizedRequest.commandInput?.AttributeDefinitions) {\n spanAttributes[ATTR_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS] = this.toArray(\n normalizedRequest.commandInput.AttributeDefinitions\n ).map((x: { [DictionaryKey: string]: any }) => JSON.stringify(x));\n }\n\n if (normalizedRequest.commandInput?.GlobalSecondaryIndexUpdates) {\n spanAttributes[ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES] =\n this.toArray(\n normalizedRequest.commandInput.GlobalSecondaryIndexUpdates\n ).map((x: { [DictionaryKey: string]: any }) => JSON.stringify(x));\n }\n }\n\n return {\n isIncoming,\n spanAttributes,\n spanKind,\n spanName,\n };\n }\n\n responseHook(\n response: NormalizedResponse,\n span: Span,\n _tracer: Tracer,\n _config: AwsSdkInstrumentationConfig\n ) {\n if (response.data?.ConsumedCapacity) {\n span.setAttribute(\n ATTR_AWS_DYNAMODB_CONSUMED_CAPACITY,\n toArray(response.data.ConsumedCapacity).map(\n (x: { [DictionaryKey: string]: any }) => JSON.stringify(x)\n )\n );\n }\n\n if (response.data?.ItemCollectionMetrics) {\n span.setAttribute(\n ATTR_AWS_DYNAMODB_ITEM_COLLECTION_METRICS,\n this.toArray(response.data.ItemCollectionMetrics).map(\n (x: { [DictionaryKey: string]: any }) => JSON.stringify(x)\n )\n );\n }\n\n if (response.data?.TableNames) {\n span.setAttribute(\n ATTR_AWS_DYNAMODB_TABLE_COUNT,\n response.data?.TableNames.length\n );\n }\n\n if (response.data?.Count) {\n span.setAttribute(ATTR_AWS_DYNAMODB_COUNT, response.data?.Count);\n }\n\n if (response.data?.ScannedCount) {\n span.setAttribute(\n ATTR_AWS_DYNAMODB_SCANNED_COUNT,\n response.data?.ScannedCount\n );\n }\n }\n}\n\nfunction toArray<T>(values: T | T[]): T[] {\n return Array.isArray(values) ? values : [values];\n}\n"]}
1
+ {"version":3,"file":"dynamodb.js","sourceRoot":"","sources":["../../../src/services/dynamodb.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n Attributes,\n DiagLogger,\n Span,\n SpanKind,\n Tracer,\n} from '@opentelemetry/api';\nimport {\n ATTR_DB_NAMESPACE,\n ATTR_DB_OPERATION_NAME,\n ATTR_DB_QUERY_TEXT,\n ATTR_DB_SYSTEM_NAME,\n} from '@opentelemetry/semantic-conventions';\nimport { RequestMetadata, ServiceExtension } from './ServiceExtension';\nimport {\n ATTR_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS,\n ATTR_AWS_DYNAMODB_CONSISTENT_READ,\n ATTR_AWS_DYNAMODB_CONSUMED_CAPACITY,\n ATTR_AWS_DYNAMODB_COUNT,\n ATTR_AWS_DYNAMODB_EXCLUSIVE_START_TABLE,\n ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES,\n ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES,\n ATTR_AWS_DYNAMODB_INDEX_NAME,\n ATTR_AWS_DYNAMODB_ITEM_COLLECTION_METRICS,\n ATTR_AWS_DYNAMODB_LIMIT,\n ATTR_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES,\n ATTR_AWS_DYNAMODB_PROJECTION,\n ATTR_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY,\n ATTR_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY,\n ATTR_AWS_DYNAMODB_SCAN_FORWARD,\n ATTR_AWS_DYNAMODB_SCANNED_COUNT,\n ATTR_AWS_DYNAMODB_SEGMENT,\n ATTR_AWS_DYNAMODB_SELECT,\n ATTR_AWS_DYNAMODB_TABLE_COUNT,\n ATTR_AWS_DYNAMODB_TABLE_NAMES,\n ATTR_AWS_DYNAMODB_TOTAL_SEGMENTS,\n DB_SYSTEM_NAME_VALUE_DYNAMODB,\n} from '../semconv';\nimport {\n AwsSdkInstrumentationConfig,\n NormalizedRequest,\n NormalizedResponse,\n} from '../types';\n\nexport class DynamodbServiceExtension implements ServiceExtension {\n toArray<T>(values: T | T[]): T[] {\n return Array.isArray(values) ? values : [values];\n }\n\n requestPreSpanHook(\n normalizedRequest: NormalizedRequest,\n config: AwsSdkInstrumentationConfig,\n diag: DiagLogger\n ): RequestMetadata {\n const spanKind: SpanKind = SpanKind.CLIENT;\n let spanName: string | undefined;\n const isIncoming = false;\n const operation = normalizedRequest.commandName;\n const tableName = normalizedRequest.commandInput?.TableName;\n\n const spanAttributes: Attributes = {};\n spanAttributes[ATTR_DB_SYSTEM_NAME] = DB_SYSTEM_NAME_VALUE_DYNAMODB;\n spanAttributes[ATTR_DB_NAMESPACE] = tableName;\n spanAttributes[ATTR_DB_OPERATION_NAME] = operation;\n\n if (config.dynamoDBStatementSerializer) {\n try {\n const sanitizedStatement = config.dynamoDBStatementSerializer(\n operation,\n normalizedRequest.commandInput\n );\n\n if (typeof sanitizedStatement === 'string') {\n spanAttributes[ATTR_DB_QUERY_TEXT] = sanitizedStatement;\n }\n } catch (err) {\n diag.error('failed to sanitize DynamoDB statement', err);\n }\n }\n\n // normalizedRequest.commandInput.RequestItems) is undefined when no table names are returned\n // keys in this object are the table names\n if (normalizedRequest.commandInput?.TableName) {\n // Necessary for commands with only 1 table name (example: CreateTable). Attribute is TableName not keys of RequestItems\n // single table name returned for operations like CreateTable\n spanAttributes[ATTR_AWS_DYNAMODB_TABLE_NAMES] = [\n normalizedRequest.commandInput.TableName,\n ];\n } else if (normalizedRequest.commandInput?.RequestItems) {\n spanAttributes[ATTR_AWS_DYNAMODB_TABLE_NAMES] = Object.keys(\n normalizedRequest.commandInput.RequestItems\n );\n }\n\n if (operation === 'CreateTable' || operation === 'UpdateTable') {\n // only check for ProvisionedThroughput since ReadCapacityUnits and WriteCapacity units are required attributes\n if (normalizedRequest.commandInput?.ProvisionedThroughput) {\n spanAttributes[ATTR_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY] =\n normalizedRequest.commandInput.ProvisionedThroughput.ReadCapacityUnits;\n spanAttributes[ATTR_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY] =\n normalizedRequest.commandInput.ProvisionedThroughput.WriteCapacityUnits;\n }\n }\n\n if (\n operation === 'GetItem' ||\n operation === 'Scan' ||\n operation === 'Query'\n ) {\n if (normalizedRequest.commandInput?.ConsistentRead) {\n spanAttributes[ATTR_AWS_DYNAMODB_CONSISTENT_READ] =\n normalizedRequest.commandInput.ConsistentRead;\n }\n }\n\n if (operation === 'Query' || operation === 'Scan') {\n if (normalizedRequest.commandInput?.ProjectionExpression) {\n spanAttributes[ATTR_AWS_DYNAMODB_PROJECTION] =\n normalizedRequest.commandInput.ProjectionExpression;\n }\n }\n\n if (operation === 'CreateTable') {\n if (normalizedRequest.commandInput?.GlobalSecondaryIndexes) {\n spanAttributes[ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES] =\n this.toArray(\n normalizedRequest.commandInput.GlobalSecondaryIndexes\n ).map((x: { [DictionaryKey: string]: any }) => JSON.stringify(x));\n }\n\n if (normalizedRequest.commandInput?.LocalSecondaryIndexes) {\n spanAttributes[ATTR_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES] =\n this.toArray(\n normalizedRequest.commandInput.LocalSecondaryIndexes\n ).map((x: { [DictionaryKey: string]: any }) => JSON.stringify(x));\n }\n }\n\n if (\n operation === 'ListTables' ||\n operation === 'Query' ||\n operation === 'Scan'\n ) {\n if (normalizedRequest.commandInput?.Limit) {\n spanAttributes[ATTR_AWS_DYNAMODB_LIMIT] =\n normalizedRequest.commandInput.Limit;\n }\n }\n\n if (operation === 'ListTables') {\n if (normalizedRequest.commandInput?.ExclusiveStartTableName) {\n spanAttributes[ATTR_AWS_DYNAMODB_EXCLUSIVE_START_TABLE] =\n normalizedRequest.commandInput.ExclusiveStartTableName;\n }\n }\n\n if (operation === 'Query') {\n if (normalizedRequest.commandInput?.ScanIndexForward) {\n spanAttributes[ATTR_AWS_DYNAMODB_SCAN_FORWARD] =\n normalizedRequest.commandInput.ScanIndexForward;\n }\n\n if (normalizedRequest.commandInput?.IndexName) {\n spanAttributes[ATTR_AWS_DYNAMODB_INDEX_NAME] =\n normalizedRequest.commandInput.IndexName;\n }\n\n if (normalizedRequest.commandInput?.Select) {\n spanAttributes[ATTR_AWS_DYNAMODB_SELECT] =\n normalizedRequest.commandInput.Select;\n }\n }\n\n if (operation === 'Scan') {\n if (normalizedRequest.commandInput?.Segment) {\n spanAttributes[ATTR_AWS_DYNAMODB_SEGMENT] =\n normalizedRequest.commandInput?.Segment;\n }\n\n if (normalizedRequest.commandInput?.TotalSegments) {\n spanAttributes[ATTR_AWS_DYNAMODB_TOTAL_SEGMENTS] =\n normalizedRequest.commandInput?.TotalSegments;\n }\n\n if (normalizedRequest.commandInput?.IndexName) {\n spanAttributes[ATTR_AWS_DYNAMODB_INDEX_NAME] =\n normalizedRequest.commandInput.IndexName;\n }\n\n if (normalizedRequest.commandInput?.Select) {\n spanAttributes[ATTR_AWS_DYNAMODB_SELECT] =\n normalizedRequest.commandInput.Select;\n }\n }\n\n if (operation === 'UpdateTable') {\n if (normalizedRequest.commandInput?.AttributeDefinitions) {\n spanAttributes[ATTR_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS] = this.toArray(\n normalizedRequest.commandInput.AttributeDefinitions\n ).map((x: { [DictionaryKey: string]: any }) => JSON.stringify(x));\n }\n\n if (normalizedRequest.commandInput?.GlobalSecondaryIndexUpdates) {\n spanAttributes[ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES] =\n this.toArray(\n normalizedRequest.commandInput.GlobalSecondaryIndexUpdates\n ).map((x: { [DictionaryKey: string]: any }) => JSON.stringify(x));\n }\n }\n\n return {\n isIncoming,\n spanAttributes,\n spanKind,\n spanName,\n };\n }\n\n responseHook(\n response: NormalizedResponse,\n span: Span,\n _tracer: Tracer,\n _config: AwsSdkInstrumentationConfig\n ) {\n if (response.data?.ConsumedCapacity) {\n span.setAttribute(\n ATTR_AWS_DYNAMODB_CONSUMED_CAPACITY,\n toArray(response.data.ConsumedCapacity).map(\n (x: { [DictionaryKey: string]: any }) => JSON.stringify(x)\n )\n );\n }\n\n if (response.data?.ItemCollectionMetrics) {\n span.setAttribute(\n ATTR_AWS_DYNAMODB_ITEM_COLLECTION_METRICS,\n this.toArray(response.data.ItemCollectionMetrics).map(\n (x: { [DictionaryKey: string]: any }) => JSON.stringify(x)\n )\n );\n }\n\n if (response.data?.TableNames) {\n span.setAttribute(\n ATTR_AWS_DYNAMODB_TABLE_COUNT,\n response.data?.TableNames.length\n );\n }\n\n if (response.data?.Count) {\n span.setAttribute(ATTR_AWS_DYNAMODB_COUNT, response.data?.Count);\n }\n\n if (response.data?.ScannedCount) {\n span.setAttribute(\n ATTR_AWS_DYNAMODB_SCANNED_COUNT,\n response.data?.ScannedCount\n );\n }\n }\n}\n\nfunction toArray<T>(values: T | T[]): T[] {\n return Array.isArray(values) ? values : [values];\n}\n"]}
@@ -1,3 +1,3 @@
1
- export declare const PACKAGE_VERSION = "0.74.0";
1
+ export declare const PACKAGE_VERSION = "0.76.0";
2
2
  export declare const PACKAGE_NAME = "@opentelemetry/instrumentation-aws-sdk";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -6,6 +6,6 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.PACKAGE_NAME = exports.PACKAGE_VERSION = void 0;
8
8
  // this is autogenerated file, see scripts/version-update.js
9
- exports.PACKAGE_VERSION = '0.74.0';
9
+ exports.PACKAGE_VERSION = '0.76.0';
10
10
  exports.PACKAGE_NAME = '@opentelemetry/instrumentation-aws-sdk';
11
11
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4DAA4D;AAC/C,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,YAAY,GAAG,wCAAwC,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const PACKAGE_VERSION = '0.74.0';\nexport const PACKAGE_NAME = '@opentelemetry/instrumentation-aws-sdk';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4DAA4D;AAC/C,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,YAAY,GAAG,wCAAwC,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const PACKAGE_VERSION = '0.76.0';\nexport const PACKAGE_NAME = '@opentelemetry/instrumentation-aws-sdk';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opentelemetry/instrumentation-aws-sdk",
3
- "version": "0.74.0",
3
+ "version": "0.76.0",
4
4
  "description": "OpenTelemetry instrumentation for `aws-sdk` and `@aws-sdk/client-*` clients for various AWS services",
5
5
  "keywords": [
6
6
  "aws",
@@ -47,7 +47,7 @@
47
47
  },
48
48
  "dependencies": {
49
49
  "@opentelemetry/core": "^2.0.0",
50
- "@opentelemetry/instrumentation": "^0.219.0",
50
+ "@opentelemetry/instrumentation": "^0.221.0",
51
51
  "@opentelemetry/semantic-conventions": "^1.34.0"
52
52
  },
53
53
  "devDependencies": {
@@ -62,12 +62,12 @@
62
62
  "@aws-sdk/client-sqs": "^3.85.0",
63
63
  "@aws-sdk/types": "^3.370.0",
64
64
  "@opentelemetry/api": "^1.3.0",
65
- "@opentelemetry/contrib-test-utils": "^0.66.0",
66
- "@opentelemetry/sdk-trace-base": "^2.0.0",
65
+ "@opentelemetry/contrib-test-utils": "^0.68.0",
66
+ "@opentelemetry/sdk-trace": "^2.9.0",
67
67
  "@smithy/node-http-handler": "4.4.14"
68
68
  },
69
69
  "engines": {
70
70
  "node": "^18.19.0 || >=20.6.0"
71
71
  },
72
- "gitHead": "4e52a9053029304f271b7dbe1b07e7fb2b987e30"
72
+ "gitHead": "27e172a9e0d549559056ccd58f27d13467454156"
73
73
  }