Files
tasq/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/dynamodb.js
T
2026-04-09 19:01:53 +08:00

178 lines
10 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DynamodbServiceExtension = void 0;
/*
* Copyright The OpenTelemetry Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const api_1 = require("@opentelemetry/api");
const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
class DynamodbServiceExtension {
toArray(values) {
return Array.isArray(values) ? values : [values];
}
requestPreSpanHook(normalizedRequest, config, diag) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
const spanKind = api_1.SpanKind.CLIENT;
let spanName;
const isIncoming = false;
const operation = normalizedRequest.commandName;
const spanAttributes = {
[semantic_conventions_1.SEMATTRS_DB_SYSTEM]: semantic_conventions_1.DBSYSTEMVALUES_DYNAMODB,
[semantic_conventions_1.SEMATTRS_DB_NAME]: (_a = normalizedRequest.commandInput) === null || _a === void 0 ? void 0 : _a.TableName,
[semantic_conventions_1.SEMATTRS_DB_OPERATION]: operation,
};
if (config.dynamoDBStatementSerializer) {
try {
const sanitizedStatement = config.dynamoDBStatementSerializer(operation, normalizedRequest.commandInput);
if (typeof sanitizedStatement === 'string') {
spanAttributes[semantic_conventions_1.SEMATTRS_DB_STATEMENT] = sanitizedStatement;
}
}
catch (err) {
diag.error('failed to sanitize DynamoDB statement', err);
}
}
// normalizedRequest.commandInput.RequestItems) is undefined when no table names are returned
// keys in this object are the table names
if ((_b = normalizedRequest.commandInput) === null || _b === void 0 ? void 0 : _b.TableName) {
// Necessary for commands with only 1 table name (example: CreateTable). Attribute is TableName not keys of RequestItems
// single table name returned for operations like CreateTable
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_TABLE_NAMES] = [
normalizedRequest.commandInput.TableName,
];
}
else if ((_c = normalizedRequest.commandInput) === null || _c === void 0 ? void 0 : _c.RequestItems) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_TABLE_NAMES] = Object.keys(normalizedRequest.commandInput.RequestItems);
}
if (operation === 'CreateTable' || operation === 'UpdateTable') {
// only check for ProvisionedThroughput since ReadCapacityUnits and WriteCapacity units are required attributes
if ((_d = normalizedRequest.commandInput) === null || _d === void 0 ? void 0 : _d.ProvisionedThroughput) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY] =
normalizedRequest.commandInput.ProvisionedThroughput.ReadCapacityUnits;
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY] =
normalizedRequest.commandInput.ProvisionedThroughput.WriteCapacityUnits;
}
}
if (operation === 'GetItem' ||
operation === 'Scan' ||
operation === 'Query') {
if ((_e = normalizedRequest.commandInput) === null || _e === void 0 ? void 0 : _e.ConsistentRead) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_CONSISTENT_READ] =
normalizedRequest.commandInput.ConsistentRead;
}
}
if (operation === 'Query' || operation === 'Scan') {
if ((_f = normalizedRequest.commandInput) === null || _f === void 0 ? void 0 : _f.ProjectionExpression) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_PROJECTION] =
normalizedRequest.commandInput.ProjectionExpression;
}
}
if (operation === 'CreateTable') {
if ((_g = normalizedRequest.commandInput) === null || _g === void 0 ? void 0 : _g.GlobalSecondaryIndexes) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES] =
this.toArray(normalizedRequest.commandInput.GlobalSecondaryIndexes).map((x) => JSON.stringify(x));
}
if ((_h = normalizedRequest.commandInput) === null || _h === void 0 ? void 0 : _h.LocalSecondaryIndexes) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES] =
this.toArray(normalizedRequest.commandInput.LocalSecondaryIndexes).map((x) => JSON.stringify(x));
}
}
if (operation === 'ListTables' ||
operation === 'Query' ||
operation === 'Scan') {
if ((_j = normalizedRequest.commandInput) === null || _j === void 0 ? void 0 : _j.Limit) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_LIMIT] =
normalizedRequest.commandInput.Limit;
}
}
if (operation === 'ListTables') {
if ((_k = normalizedRequest.commandInput) === null || _k === void 0 ? void 0 : _k.ExclusiveStartTableName) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_EXCLUSIVE_START_TABLE] =
normalizedRequest.commandInput.ExclusiveStartTableName;
}
}
if (operation === 'Query') {
if ((_l = normalizedRequest.commandInput) === null || _l === void 0 ? void 0 : _l.ScanIndexForward) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_SCAN_FORWARD] =
normalizedRequest.commandInput.ScanIndexForward;
}
if ((_m = normalizedRequest.commandInput) === null || _m === void 0 ? void 0 : _m.IndexName) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_INDEX_NAME] =
normalizedRequest.commandInput.IndexName;
}
if ((_o = normalizedRequest.commandInput) === null || _o === void 0 ? void 0 : _o.Select) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_SELECT] =
normalizedRequest.commandInput.Select;
}
}
if (operation === 'Scan') {
if ((_p = normalizedRequest.commandInput) === null || _p === void 0 ? void 0 : _p.Segment) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_SEGMENT] =
(_q = normalizedRequest.commandInput) === null || _q === void 0 ? void 0 : _q.Segment;
}
if ((_r = normalizedRequest.commandInput) === null || _r === void 0 ? void 0 : _r.TotalSegments) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_TOTAL_SEGMENTS] =
(_s = normalizedRequest.commandInput) === null || _s === void 0 ? void 0 : _s.TotalSegments;
}
if ((_t = normalizedRequest.commandInput) === null || _t === void 0 ? void 0 : _t.IndexName) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_INDEX_NAME] =
normalizedRequest.commandInput.IndexName;
}
if ((_u = normalizedRequest.commandInput) === null || _u === void 0 ? void 0 : _u.Select) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_SELECT] =
normalizedRequest.commandInput.Select;
}
}
if (operation === 'UpdateTable') {
if ((_v = normalizedRequest.commandInput) === null || _v === void 0 ? void 0 : _v.AttributeDefinitions) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS] =
this.toArray(normalizedRequest.commandInput.AttributeDefinitions).map((x) => JSON.stringify(x));
}
if ((_w = normalizedRequest.commandInput) === null || _w === void 0 ? void 0 : _w.GlobalSecondaryIndexUpdates) {
spanAttributes[semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES] =
this.toArray(normalizedRequest.commandInput.GlobalSecondaryIndexUpdates).map((x) => JSON.stringify(x));
}
}
return {
isIncoming,
spanAttributes,
spanKind,
spanName,
};
}
responseHook(response, span, _tracer, _config) {
var _a, _b, _c, _d, _e, _f, _g, _h;
if ((_a = response.data) === null || _a === void 0 ? void 0 : _a.ConsumedCapacity) {
span.setAttribute(semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_CONSUMED_CAPACITY, toArray(response.data.ConsumedCapacity).map((x) => JSON.stringify(x)));
}
if ((_b = response.data) === null || _b === void 0 ? void 0 : _b.ItemCollectionMetrics) {
span.setAttribute(semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_ITEM_COLLECTION_METRICS, this.toArray(response.data.ItemCollectionMetrics).map((x) => JSON.stringify(x)));
}
if ((_c = response.data) === null || _c === void 0 ? void 0 : _c.TableNames) {
span.setAttribute(semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_TABLE_COUNT, (_d = response.data) === null || _d === void 0 ? void 0 : _d.TableNames.length);
}
if ((_e = response.data) === null || _e === void 0 ? void 0 : _e.Count) {
span.setAttribute(semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_COUNT, (_f = response.data) === null || _f === void 0 ? void 0 : _f.Count);
}
if ((_g = response.data) === null || _g === void 0 ? void 0 : _g.ScannedCount) {
span.setAttribute(semantic_conventions_1.SEMATTRS_AWS_DYNAMODB_SCANNED_COUNT, (_h = response.data) === null || _h === void 0 ? void 0 : _h.ScannedCount);
}
}
}
exports.DynamodbServiceExtension = DynamodbServiceExtension;
function toArray(values) {
return Array.isArray(values) ? values : [values];
}
//# sourceMappingURL=dynamodb.js.map