@opentelemetry/instrumentation-mongodb 0.34.3 → 0.36.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/build/src/index.js +3 -12
- package/build/src/index.js.map +1 -1
- package/build/src/instrumentation.d.ts +12 -2
- package/build/src/instrumentation.js +171 -31
- package/build/src/instrumentation.js.map +1 -1
- package/build/src/internal-types.d.ts +13 -0
- package/build/src/internal-types.js.map +1 -1
- package/build/src/types.d.ts +11 -0
- package/build/src/types.js +9 -0
- package/build/src/types.js.map +1 -1
- package/build/src/version.d.ts +1 -1
- package/build/src/version.js +1 -1
- package/build/src/version.js.map +1 -1
- package/package.json +11 -7
package/build/src/index.js
CHANGED
|
@@ -14,17 +14,8 @@
|
|
|
14
14
|
* See the License for the specific language governing permissions and
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
-
if (k2 === undefined) k2 = k;
|
|
19
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
20
|
-
}) : (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
o[k2] = m[k];
|
|
23
|
-
}));
|
|
24
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
25
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
26
|
-
};
|
|
27
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
|
|
29
|
-
__exportStar(require("./
|
|
18
|
+
const tslib_1 = require("tslib");
|
|
19
|
+
(0, tslib_1.__exportStar)(require("./instrumentation"), exports);
|
|
20
|
+
(0, tslib_1.__exportStar)(require("./types"), exports);
|
|
30
21
|
//# sourceMappingURL=index.js.map
|
package/build/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,iEAAkC;AAClC,uDAAwB","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './instrumentation';\nexport * from './types';\n"]}
|
|
@@ -3,10 +3,18 @@ import { MongoDBInstrumentationConfig } from './types';
|
|
|
3
3
|
/** mongodb instrumentation plugin for OpenTelemetry */
|
|
4
4
|
export declare class MongoDBInstrumentation extends InstrumentationBase {
|
|
5
5
|
protected _config: MongoDBInstrumentationConfig;
|
|
6
|
+
private _connectionsUsage;
|
|
7
|
+
private _poolName;
|
|
6
8
|
constructor(_config?: MongoDBInstrumentationConfig);
|
|
9
|
+
_updateMetricInstruments(): void;
|
|
7
10
|
init(): InstrumentationNodeModuleDefinition<any>[];
|
|
8
|
-
private
|
|
9
|
-
private
|
|
11
|
+
private _getV3ConnectionPatches;
|
|
12
|
+
private _getV4SessionsPatches;
|
|
13
|
+
private _getV4AcquireCommand;
|
|
14
|
+
private _getV4ReleaseCommand;
|
|
15
|
+
private _getV4ConnectPatches;
|
|
16
|
+
private _getV4ConnectCommand;
|
|
17
|
+
private _getV4ConnectionPatches;
|
|
10
18
|
/** Creates spans for common operations */
|
|
11
19
|
private _getV3PatchOperation;
|
|
12
20
|
/** Creates spans for command operation */
|
|
@@ -50,7 +58,9 @@ export declare class MongoDBInstrumentation extends InstrumentationBase {
|
|
|
50
58
|
* Ends a created span.
|
|
51
59
|
* @param span The created span to end.
|
|
52
60
|
* @param resultHandler A callback function.
|
|
61
|
+
* @param connectionId: The connection ID of the Command response.
|
|
53
62
|
*/
|
|
54
63
|
private _patchEnd;
|
|
64
|
+
private setPoolName;
|
|
55
65
|
}
|
|
56
66
|
//# sourceMappingURL=instrumentation.d.ts.map
|
|
@@ -27,21 +27,31 @@ class MongoDBInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
27
27
|
super('@opentelemetry/instrumentation-mongodb', version_1.VERSION, _config);
|
|
28
28
|
this._config = _config;
|
|
29
29
|
}
|
|
30
|
+
_updateMetricInstruments() {
|
|
31
|
+
this._connectionsUsage = this.meter.createUpDownCounter('db.client.connections.usage', {
|
|
32
|
+
description: 'The number of connections that are currently in state described by the state attribute.',
|
|
33
|
+
unit: '{connection}',
|
|
34
|
+
});
|
|
35
|
+
}
|
|
30
36
|
init() {
|
|
31
|
-
const {
|
|
32
|
-
const {
|
|
37
|
+
const { v3PatchConnection: v3PatchConnection, v3UnpatchConnection: v3UnpatchConnection, } = this._getV3ConnectionPatches();
|
|
38
|
+
const { v4PatchConnect, v4UnpatchConnect } = this._getV4ConnectPatches();
|
|
39
|
+
const { v4PatchConnection, v4UnpatchConnection } = this._getV4ConnectionPatches();
|
|
40
|
+
const { v4PatchSessions, v4UnpatchSessions } = this._getV4SessionsPatches();
|
|
33
41
|
return [
|
|
34
42
|
new instrumentation_1.InstrumentationNodeModuleDefinition('mongodb', ['>=3.3 <4'], undefined, undefined, [
|
|
35
|
-
new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/core/wireprotocol/index.js', ['>=3.3 <4'],
|
|
43
|
+
new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/core/wireprotocol/index.js', ['>=3.3 <4'], v3PatchConnection, v3UnpatchConnection),
|
|
36
44
|
]),
|
|
37
|
-
new instrumentation_1.InstrumentationNodeModuleDefinition('mongodb', ['4.*'], undefined, undefined, [
|
|
38
|
-
new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/cmap/connection.js', ['4.*'],
|
|
45
|
+
new instrumentation_1.InstrumentationNodeModuleDefinition('mongodb', ['4.*', '5.*'], undefined, undefined, [
|
|
46
|
+
new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/cmap/connection.js', ['4.*', '5.*'], v4PatchConnection, v4UnpatchConnection),
|
|
47
|
+
new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/cmap/connect.js', ['4.*', '5.*'], v4PatchConnect, v4UnpatchConnect),
|
|
48
|
+
new instrumentation_1.InstrumentationNodeModuleFile('mongodb/lib/sessions.js', ['4.*', '5.*'], v4PatchSessions, v4UnpatchSessions),
|
|
39
49
|
]),
|
|
40
50
|
];
|
|
41
51
|
}
|
|
42
|
-
|
|
52
|
+
_getV3ConnectionPatches() {
|
|
43
53
|
return {
|
|
44
|
-
|
|
54
|
+
v3PatchConnection: (moduleExports, moduleVersion) => {
|
|
45
55
|
api_1.diag.debug(`Applying patch for mongodb@${moduleVersion}`);
|
|
46
56
|
// patch insert operation
|
|
47
57
|
if ((0, instrumentation_1.isWrapped)(moduleExports.insert)) {
|
|
@@ -75,7 +85,7 @@ class MongoDBInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
75
85
|
this._wrap(moduleExports, 'getMore', this._getV3PatchCursor());
|
|
76
86
|
return moduleExports;
|
|
77
87
|
},
|
|
78
|
-
|
|
88
|
+
v3UnpatchConnection: (moduleExports, moduleVersion) => {
|
|
79
89
|
if (moduleExports === undefined)
|
|
80
90
|
return;
|
|
81
91
|
api_1.diag.debug(`Removing internal patch for mongodb@${moduleVersion}`);
|
|
@@ -88,10 +98,117 @@ class MongoDBInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
88
98
|
},
|
|
89
99
|
};
|
|
90
100
|
}
|
|
101
|
+
_getV4SessionsPatches() {
|
|
102
|
+
return {
|
|
103
|
+
v4PatchSessions: (moduleExports, moduleVersion) => {
|
|
104
|
+
api_1.diag.debug(`Applying patch for mongodb@${moduleVersion}`);
|
|
105
|
+
if ((0, instrumentation_1.isWrapped)(moduleExports.acquire)) {
|
|
106
|
+
this._unwrap(moduleExports, 'acquire');
|
|
107
|
+
}
|
|
108
|
+
this._wrap(moduleExports.ServerSessionPool.prototype, 'acquire', this._getV4AcquireCommand());
|
|
109
|
+
if ((0, instrumentation_1.isWrapped)(moduleExports.release)) {
|
|
110
|
+
this._unwrap(moduleExports, 'release');
|
|
111
|
+
}
|
|
112
|
+
this._wrap(moduleExports.ServerSessionPool.prototype, 'release', this._getV4ReleaseCommand());
|
|
113
|
+
return moduleExports;
|
|
114
|
+
},
|
|
115
|
+
v4UnpatchSessions: (moduleExports, moduleVersion) => {
|
|
116
|
+
api_1.diag.debug(`Removing internal patch for mongodb@${moduleVersion}`);
|
|
117
|
+
if (moduleExports === undefined)
|
|
118
|
+
return;
|
|
119
|
+
if ((0, instrumentation_1.isWrapped)(moduleExports.acquire)) {
|
|
120
|
+
this._unwrap(moduleExports, 'acquire');
|
|
121
|
+
}
|
|
122
|
+
if ((0, instrumentation_1.isWrapped)(moduleExports.release)) {
|
|
123
|
+
this._unwrap(moduleExports, 'release');
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
_getV4AcquireCommand() {
|
|
129
|
+
const instrumentation = this;
|
|
130
|
+
return (original) => {
|
|
131
|
+
return function patchAcquire() {
|
|
132
|
+
const nSessionsBeforeAcquire = this.sessions.length;
|
|
133
|
+
const session = original.call(this);
|
|
134
|
+
const nSessionsAfterAcquire = this.sessions.length;
|
|
135
|
+
if (nSessionsBeforeAcquire === nSessionsAfterAcquire) {
|
|
136
|
+
//no session in the pool. a new session was created and used
|
|
137
|
+
instrumentation._connectionsUsage.add(1, {
|
|
138
|
+
state: 'used',
|
|
139
|
+
'pool.name': instrumentation._poolName,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else if (nSessionsBeforeAcquire - 1 === nSessionsAfterAcquire) {
|
|
143
|
+
//a session was already in the pool. remove it from the pool and use it.
|
|
144
|
+
instrumentation._connectionsUsage.add(-1, {
|
|
145
|
+
state: 'idle',
|
|
146
|
+
'pool.name': instrumentation._poolName,
|
|
147
|
+
});
|
|
148
|
+
instrumentation._connectionsUsage.add(1, {
|
|
149
|
+
state: 'used',
|
|
150
|
+
'pool.name': instrumentation._poolName,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return session;
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
_getV4ReleaseCommand() {
|
|
158
|
+
const instrumentation = this;
|
|
159
|
+
return (original) => {
|
|
160
|
+
return function patchRelease(session) {
|
|
161
|
+
const cmdPromise = original.call(this, session);
|
|
162
|
+
instrumentation._connectionsUsage.add(-1, {
|
|
163
|
+
state: 'used',
|
|
164
|
+
'pool.name': instrumentation._poolName,
|
|
165
|
+
});
|
|
166
|
+
instrumentation._connectionsUsage.add(1, {
|
|
167
|
+
state: 'idle',
|
|
168
|
+
'pool.name': instrumentation._poolName,
|
|
169
|
+
});
|
|
170
|
+
return cmdPromise;
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
_getV4ConnectPatches() {
|
|
175
|
+
return {
|
|
176
|
+
v4PatchConnect: (moduleExports, moduleVersion) => {
|
|
177
|
+
api_1.diag.debug(`Applying patch for mongodb@${moduleVersion}`);
|
|
178
|
+
if ((0, instrumentation_1.isWrapped)(moduleExports.connect)) {
|
|
179
|
+
this._unwrap(moduleExports, 'connect');
|
|
180
|
+
}
|
|
181
|
+
this._wrap(moduleExports, 'connect', this._getV4ConnectCommand());
|
|
182
|
+
return moduleExports;
|
|
183
|
+
},
|
|
184
|
+
v4UnpatchConnect: (moduleExports, moduleVersion) => {
|
|
185
|
+
api_1.diag.debug(`Removing internal patch for mongodb@${moduleVersion}`);
|
|
186
|
+
if (moduleExports === undefined)
|
|
187
|
+
return;
|
|
188
|
+
this._unwrap(moduleExports, 'connect');
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
_getV4ConnectCommand() {
|
|
193
|
+
const instrumentation = this;
|
|
194
|
+
return (original) => {
|
|
195
|
+
return function patchedConnect(options, callback) {
|
|
196
|
+
const patchedCallback = function (err, conn) {
|
|
197
|
+
if (err || !conn) {
|
|
198
|
+
callback(err, conn);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
instrumentation.setPoolName(options);
|
|
202
|
+
callback(err, conn);
|
|
203
|
+
};
|
|
204
|
+
return original.call(this, options, patchedCallback);
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
}
|
|
91
208
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
92
|
-
|
|
209
|
+
_getV4ConnectionPatches() {
|
|
93
210
|
return {
|
|
94
|
-
|
|
211
|
+
v4PatchConnection: (moduleExports, moduleVersion) => {
|
|
95
212
|
api_1.diag.debug(`Applying patch for mongodb@${moduleVersion}`);
|
|
96
213
|
// patch insert operation
|
|
97
214
|
if ((0, instrumentation_1.isWrapped)(moduleExports.Connection.prototype.command)) {
|
|
@@ -100,7 +217,7 @@ class MongoDBInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
100
217
|
this._wrap(moduleExports.Connection.prototype, 'command', this._getV4PatchCommand());
|
|
101
218
|
return moduleExports;
|
|
102
219
|
},
|
|
103
|
-
|
|
220
|
+
v4UnpatchConnection: (moduleExports, moduleVersion) => {
|
|
104
221
|
if (moduleExports === undefined)
|
|
105
222
|
return;
|
|
106
223
|
api_1.diag.debug(`Removing internal patch for mongodb@${moduleVersion}`);
|
|
@@ -184,20 +301,25 @@ class MongoDBInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
184
301
|
return function patchedV4ServerCommand(ns, cmd, options, callback) {
|
|
185
302
|
const currentSpan = api_1.trace.getSpan(api_1.context.active());
|
|
186
303
|
const resultHandler = callback;
|
|
187
|
-
|
|
188
|
-
|
|
304
|
+
const commandType = Object.keys(cmd)[0];
|
|
305
|
+
if (typeof resultHandler !== 'function' ||
|
|
189
306
|
typeof cmd !== 'object' ||
|
|
190
307
|
cmd.ismaster ||
|
|
191
308
|
cmd.hello) {
|
|
192
309
|
return original.call(this, ns, cmd, options, callback);
|
|
193
310
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
311
|
+
if (!currentSpan) {
|
|
312
|
+
const patchedCallback = instrumentation._patchEnd(undefined, resultHandler, this.id, commandType);
|
|
313
|
+
return original.call(this, ns, cmd, options, patchedCallback);
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
const span = instrumentation.tracer.startSpan(`mongodb.${commandType}`, {
|
|
317
|
+
kind: api_1.SpanKind.CLIENT,
|
|
318
|
+
});
|
|
319
|
+
instrumentation._populateV4Attributes(span, this, ns, cmd, commandType);
|
|
320
|
+
const patchedCallback = instrumentation._patchEnd(span, resultHandler, this.id, commandType);
|
|
321
|
+
return original.call(this, ns, cmd, options, patchedCallback);
|
|
322
|
+
}
|
|
201
323
|
};
|
|
202
324
|
};
|
|
203
325
|
}
|
|
@@ -355,6 +477,7 @@ class MongoDBInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
355
477
|
[semantic_conventions_1.SemanticAttributes.DB_NAME]: dbName,
|
|
356
478
|
[semantic_conventions_1.SemanticAttributes.DB_MONGODB_COLLECTION]: dbCollection,
|
|
357
479
|
[semantic_conventions_1.SemanticAttributes.DB_OPERATION]: operation,
|
|
480
|
+
[semantic_conventions_1.SemanticAttributes.DB_CONNECTION_STRING]: `mongodb://${host}:${port}/${dbName}`,
|
|
358
481
|
});
|
|
359
482
|
if (host && port) {
|
|
360
483
|
span.setAttributes({
|
|
@@ -408,30 +531,47 @@ class MongoDBInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
|
408
531
|
* Ends a created span.
|
|
409
532
|
* @param span The created span to end.
|
|
410
533
|
* @param resultHandler A callback function.
|
|
534
|
+
* @param connectionId: The connection ID of the Command response.
|
|
411
535
|
*/
|
|
412
|
-
_patchEnd(span, resultHandler) {
|
|
536
|
+
_patchEnd(span, resultHandler, connectionId, commandType) {
|
|
413
537
|
// mongodb is using "tick" when calling a callback, this way the context
|
|
414
538
|
// in final callback (resultHandler) is lost
|
|
415
539
|
const activeContext = api_1.context.active();
|
|
416
540
|
const instrumentation = this;
|
|
417
541
|
return function patchedEnd(...args) {
|
|
418
542
|
const error = args[0];
|
|
419
|
-
if (
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
543
|
+
if (span) {
|
|
544
|
+
if (error instanceof Error) {
|
|
545
|
+
span === null || span === void 0 ? void 0 : span.setStatus({
|
|
546
|
+
code: api_1.SpanStatusCode.ERROR,
|
|
547
|
+
message: error.message,
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
const result = args[1];
|
|
552
|
+
instrumentation._handleExecutionResult(span, result);
|
|
553
|
+
}
|
|
554
|
+
span.end();
|
|
428
555
|
}
|
|
429
|
-
span.end();
|
|
430
556
|
return api_1.context.with(activeContext, () => {
|
|
557
|
+
if (commandType === 'endSessions') {
|
|
558
|
+
instrumentation._connectionsUsage.add(-1, {
|
|
559
|
+
state: 'idle',
|
|
560
|
+
'pool.name': instrumentation._poolName,
|
|
561
|
+
});
|
|
562
|
+
}
|
|
431
563
|
return resultHandler.apply(this, args);
|
|
432
564
|
});
|
|
433
565
|
};
|
|
434
566
|
}
|
|
567
|
+
setPoolName(options) {
|
|
568
|
+
var _a, _b;
|
|
569
|
+
const host = (_a = options.hostAddress) === null || _a === void 0 ? void 0 : _a.host;
|
|
570
|
+
const port = (_b = options.hostAddress) === null || _b === void 0 ? void 0 : _b.port;
|
|
571
|
+
const database = options.dbName;
|
|
572
|
+
const poolName = `mongodb://${host}:${port}/${database}`;
|
|
573
|
+
this._poolName = poolName;
|
|
574
|
+
}
|
|
435
575
|
}
|
|
436
576
|
exports.MongoDBInstrumentation = MongoDBInstrumentation;
|
|
437
577
|
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,4CAO4B;AAC5B,oEAMwC;AACxC,8EAG6C;AAE7C,qDAQ0B;AAE1B,uCAAoC;AAGpC,uDAAuD;AACvD,MAAa,sBAAuB,SAAQ,qCAAmB;IAI7D,YAA+B,UAAwC,EAAE;QACvE,KAAK,CAAC,wCAAwC,EAAE,iBAAO,EAAE,OAAO,CAAC,CAAC;QADrC,YAAO,GAAP,OAAO,CAAmC;IAEzE,CAAC;IAEQ,wBAAwB;QAC/B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CACrD,6BAA6B,EAC7B;YACE,WAAW,EACT,yFAAyF;YAC3F,IAAI,EAAE,cAAc;SACrB,CACF,CAAC;IACJ,CAAC;IAED,IAAI;QACF,MAAM,EACJ,iBAAiB,EAAE,iBAAiB,EACpC,mBAAmB,EAAE,mBAAmB,GACzC,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAEnC,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACzE,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,GAC9C,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACjC,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE5E,OAAO;YACL,IAAI,qDAAmC,CACrC,SAAS,EACT,CAAC,UAAU,CAAC,EACZ,SAAS,EACT,SAAS,EACT;gBACE,IAAI,+CAA6B,CAC/B,wCAAwC,EACxC,CAAC,UAAU,CAAC,EACZ,iBAAiB,EACjB,mBAAmB,CACpB;aACF,CACF;YACD,IAAI,qDAAmC,CACrC,SAAS,EACT,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,SAAS,EACT,SAAS,EACT;gBACE,IAAI,+CAA6B,CAC/B,gCAAgC,EAChC,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,iBAAiB,EACjB,mBAAmB,CACpB;gBACD,IAAI,+CAA6B,CAC/B,6BAA6B,EAC7B,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,cAAc,EACd,gBAAgB,CACjB;gBACD,IAAI,+CAA6B,CAC/B,yBAAyB,EACzB,CAAC,KAAK,EAAE,KAAK,CAAC,EACd,eAAe,EACf,iBAAiB,CAClB;aACF,CACF;SACF,CAAC;IACJ,CAAC;IAEO,uBAAuB;QAC7B,OAAO;YACL,iBAAiB,EAAE,CAAC,aAAgB,EAAE,aAAsB,EAAE,EAAE;gBAC9D,UAAI,CAAC,KAAK,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;gBAC1D,yBAAyB;gBACzB,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,MAAM,CAAC,EAAE;oBACnC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;iBACvC;gBACD,IAAI,CAAC,KAAK,CACR,aAAa,EACb,QAAQ,EACR,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CACpC,CAAC;gBACF,yBAAyB;gBACzB,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,MAAM,CAAC,EAAE;oBACnC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;iBACvC;gBACD,IAAI,CAAC,KAAK,CACR,aAAa,EACb,QAAQ,EACR,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CACpC,CAAC;gBACF,yBAAyB;gBACzB,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,MAAM,CAAC,EAAE;oBACnC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;iBACvC;gBACD,IAAI,CAAC,KAAK,CACR,aAAa,EACb,QAAQ,EACR,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CACpC,CAAC;gBACF,sBAAsB;gBACtB,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,OAAO,CAAC,EAAE;oBACpC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;iBACxC;gBACD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;gBAChE,cAAc;gBACd,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,KAAK,CAAC,EAAE;oBAClC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;iBACtC;gBACD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;gBAC3D,qCAAqC;gBACrC,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,OAAO,CAAC,EAAE;oBACpC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;iBACxC;gBACD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBAC/D,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,mBAAmB,EAAE,CAAC,aAAiB,EAAE,aAAsB,EAAE,EAAE;gBACjE,IAAI,aAAa,KAAK,SAAS;oBAAE,OAAO;gBACxC,UAAI,CAAC,KAAK,CAAC,uCAAuC,aAAa,EAAE,CAAC,CAAC;gBACnE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YACzC,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,qBAAqB;QAC3B,OAAO;YACL,eAAe,EAAE,CAAC,aAAkB,EAAE,aAAsB,EAAE,EAAE;gBAC9D,UAAI,CAAC,KAAK,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;gBAC1D,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,OAAO,CAAC,EAAE;oBACpC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;iBACxC;gBACD,IAAI,CAAC,KAAK,CACR,aAAa,CAAC,iBAAiB,CAAC,SAAS,EACzC,SAAS,EACT,IAAI,CAAC,oBAAoB,EAAE,CAC5B,CAAC;gBAEF,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,OAAO,CAAC,EAAE;oBACpC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;iBACxC;gBACD,IAAI,CAAC,KAAK,CACR,aAAa,CAAC,iBAAiB,CAAC,SAAS,EACzC,SAAS,EACT,IAAI,CAAC,oBAAoB,EAAE,CAC5B,CAAC;gBACF,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,iBAAiB,EAAE,CAAC,aAAiB,EAAE,aAAsB,EAAE,EAAE;gBAC/D,UAAI,CAAC,KAAK,CAAC,uCAAuC,aAAa,EAAE,CAAC,CAAC;gBACnE,IAAI,aAAa,KAAK,SAAS;oBAAE,OAAO;gBACxC,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,OAAO,CAAC,EAAE;oBACpC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;iBACxC;gBACD,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,OAAO,CAAC,EAAE;oBACpC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;iBACxC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,oBAAoB;QAC1B,MAAM,eAAe,GAAG,IAAI,CAAC;QAC7B,OAAO,CAAC,QAA8B,EAAE,EAAE;YACxC,OAAO,SAAS,YAAY;gBAC1B,MAAM,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAEnD,IAAI,sBAAsB,KAAK,qBAAqB,EAAE;oBACpD,4DAA4D;oBAC5D,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;wBACvC,KAAK,EAAE,MAAM;wBACb,WAAW,EAAE,eAAe,CAAC,SAAS;qBACvC,CAAC,CAAC;iBACJ;qBAAM,IAAI,sBAAsB,GAAG,CAAC,KAAK,qBAAqB,EAAE;oBAC/D,wEAAwE;oBACxE,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;wBACxC,KAAK,EAAE,MAAM;wBACb,WAAW,EAAE,eAAe,CAAC,SAAS;qBACvC,CAAC,CAAC;oBACH,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;wBACvC,KAAK,EAAE,MAAM;wBACb,WAAW,EAAE,eAAe,CAAC,SAAS;qBACvC,CAAC,CAAC;iBACJ;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAEO,oBAAoB;QAC1B,MAAM,eAAe,GAAG,IAAI,CAAC;QAC7B,OAAO,CAAC,QAA8B,EAAE,EAAE;YACxC,OAAO,SAAS,YAAY,CAAY,OAAsB;gBAC5D,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAEhD,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBACxC,KAAK,EAAE,MAAM;oBACb,WAAW,EAAE,eAAe,CAAC,SAAS;iBACvC,CAAC,CAAC;gBACH,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;oBACvC,KAAK,EAAE,MAAM;oBACb,WAAW,EAAE,eAAe,CAAC,SAAS;iBACvC,CAAC,CAAC;gBACH,OAAO,UAAU,CAAC;YACpB,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAEO,oBAAoB;QAC1B,OAAO;YACL,cAAc,EAAE,CAAC,aAAkB,EAAE,aAAsB,EAAE,EAAE;gBAC7D,UAAI,CAAC,KAAK,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;gBAC1D,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,OAAO,CAAC,EAAE;oBACpC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;iBACxC;gBAED,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;gBAClE,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,gBAAgB,EAAE,CAAC,aAAiB,EAAE,aAAsB,EAAE,EAAE;gBAC9D,UAAI,CAAC,KAAK,CAAC,uCAAuC,aAAa,EAAE,CAAC,CAAC;gBACnE,IAAI,aAAa,KAAK,SAAS;oBAAE,OAAO;gBAExC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YACzC,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,oBAAoB;QAC1B,MAAM,eAAe,GAAG,IAAI,CAAC;QAE7B,OAAO,CAAC,QAA8B,EAAE,EAAE;YACxC,OAAO,SAAS,cAAc,CAE5B,OAAY,EACZ,QAAa;gBAEb,MAAM,eAAe,GAAG,UAAU,GAAQ,EAAE,IAAS;oBACnD,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;wBAChB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;wBACpB,OAAO;qBACR;oBACD,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBACrC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YACvD,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,6DAA6D;IACrD,uBAAuB;QAC7B,OAAO;YACL,iBAAiB,EAAE,CAAC,aAAkB,EAAE,aAAsB,EAAE,EAAE;gBAChE,UAAI,CAAC,KAAK,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;gBAC1D,yBAAyB;gBACzB,IAAI,IAAA,2BAAS,EAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;oBACzD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;iBAC7D;gBAED,IAAI,CAAC,KAAK,CACR,aAAa,CAAC,UAAU,CAAC,SAAS,EAClC,SAAS,EACT,IAAI,CAAC,kBAAkB,EAAE,CAC1B,CAAC;gBACF,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,mBAAmB,EAAE,CAAC,aAAmB,EAAE,aAAsB,EAAE,EAAE;gBACnE,IAAI,aAAa,KAAK,SAAS;oBAAE,OAAO;gBACxC,UAAI,CAAC,KAAK,CAAC,uCAAuC,aAAa,EAAE,CAAC,CAAC;gBACnE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9D,CAAC;SACF,CAAC;IACJ,CAAC;IAED,0CAA0C;IAClC,oBAAoB,CAAC,aAA6C;QACxE,MAAM,eAAe,GAAG,IAAI,CAAC;QAC7B,OAAO,CAAC,QAAoD,EAAE,EAAE;YAC9D,OAAO,SAAS,oBAAoB,CAElC,MAA6B,EAC7B,EAAU,EACV,GAAc,EACd,OAA2B,EAC3B,QAAmB;gBAEnB,MAAM,WAAW,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpD,MAAM,aAAa,GACjB,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACrD,IACE,CAAC,WAAW;oBACZ,OAAO,aAAa,KAAK,UAAU;oBACnC,OAAO,GAAG,KAAK,QAAQ,EACvB;oBACA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;wBACjC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;qBACtD;yBAAM;wBACL,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;qBAChE;iBACF;gBACD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAC3C,WAAW,aAAa,EAAE,EAC1B;oBACE,IAAI,EAAE,cAAQ,CAAC,MAAM;iBACtB,CACF,CAAC;gBAEF,eAAe,CAAC,qBAAqB,CACnC,IAAI,EACJ,EAAE,EACF,MAAM;gBACN,8DAA8D;gBAC9D,GAAG,CAAC,CAAC,CAAQ,EACb,aAAa,CACd,CAAC;gBACF,MAAM,eAAe,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBACvE,yEAAyE;gBACzE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;oBACjC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;iBAC9D;qBAAM;oBACL,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;iBACvE;YACH,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,0CAA0C;IAClC,kBAAkB;QACxB,MAAM,eAAe,GAAG,IAAI,CAAC;QAC7B,OAAO,CAAC,QAAyC,EAAE,EAAE;YACnD,OAAO,SAAS,oBAAoB,CAElC,MAA6B,EAC7B,EAAU,EACV,GAAyB,EACzB,OAA2B,EAC3B,QAAmB;gBAEnB,MAAM,WAAW,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpD,MAAM,aAAa,GACjB,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACrD,IACE,CAAC,WAAW;oBACZ,OAAO,aAAa,KAAK,UAAU;oBACnC,OAAO,GAAG,KAAK,QAAQ,EACvB;oBACA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;wBACjC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;qBACtD;yBAAM;wBACL,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;qBAChE;iBACF;gBACD,MAAM,WAAW,GAAG,sBAAsB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBAChE,MAAM,IAAI,GACR,WAAW,KAAK,mCAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;gBACvE,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,EAAE;oBAC/D,IAAI,EAAE,cAAQ,CAAC,MAAM;iBACtB,CAAC,CAAC;gBACH,MAAM,SAAS,GACb,WAAW,KAAK,mCAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;gBACvE,eAAe,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBACxE,MAAM,eAAe,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBACvE,yEAAyE;gBACzE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;oBACjC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;iBAC9D;qBAAM;oBACL,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;iBACvE;YACH,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,0CAA0C;IAClC,kBAAkB;QACxB,MAAM,eAAe,GAAG,IAAI,CAAC;QAC7B,OAAO,CAAC,QAAiC,EAAE,EAAE;YAC3C,OAAO,SAAS,sBAAsB,CAEpC,EAAO,EACP,GAAQ,EACR,OAA4B,EAC5B,QAAa;gBAEb,MAAM,WAAW,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpD,MAAM,aAAa,GAAG,QAAQ,CAAC;gBAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAExC,IACE,OAAO,aAAa,KAAK,UAAU;oBACnC,OAAO,GAAG,KAAK,QAAQ;oBACvB,GAAG,CAAC,QAAQ;oBACZ,GAAG,CAAC,KAAK,EACT;oBACA,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;iBACxD;gBACD,IAAI,CAAC,WAAW,EAAE;oBAChB,MAAM,eAAe,GAAG,eAAe,CAAC,SAAS,CAC/C,SAAS,EACT,aAAa,EACb,IAAI,CAAC,EAAE,EACP,WAAW,CACZ,CAAC;oBAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;iBAC/D;qBAAM;oBACL,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAC3C,WAAW,WAAW,EAAE,EACxB;wBACE,IAAI,EAAE,cAAQ,CAAC,MAAM;qBACtB,CACF,CAAC;oBACF,eAAe,CAAC,qBAAqB,CACnC,IAAI,EACJ,IAAI,EACJ,EAAE,EACF,GAAG,EACH,WAAW,CACZ,CAAC;oBACF,MAAM,eAAe,GAAG,eAAe,CAAC,SAAS,CAC/C,IAAI,EACJ,aAAa,EACb,IAAI,CAAC,EAAE,EACP,WAAW,CACZ,CAAC;oBAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;iBAC/D;YACH,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,uCAAuC;IAC/B,eAAe;QACrB,MAAM,eAAe,GAAG,IAAI,CAAC;QAC7B,OAAO,CAAC,QAAuC,EAAE,EAAE;YACjD,OAAO,SAAS,oBAAoB,CAElC,MAA6B,EAC7B,EAAU,EACV,GAAyB,EACzB,WAAwB,EACxB,OAA2B,EAC3B,QAAmB;gBAEnB,MAAM,WAAW,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpD,MAAM,aAAa,GACjB,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACrD,IACE,CAAC,WAAW;oBACZ,OAAO,aAAa,KAAK,UAAU;oBACnC,OAAO,GAAG,KAAK,QAAQ,EACvB;oBACA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;wBACjC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;qBACnE;yBAAM;wBACL,OAAO,QAAQ,CAAC,IAAI,CAClB,IAAI,EACJ,MAAM,EACN,EAAE,EACF,GAAG,EACH,WAAW,EACX,OAAO,EACP,QAAQ,CACT,CAAC;qBACH;iBACF;gBACD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE;oBAC5D,IAAI,EAAE,cAAQ,CAAC,MAAM;iBACtB,CAAC,CAAC;gBACH,eAAe,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM,eAAe,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBACvE,yEAAyE;gBACzE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;oBACjC,OAAO,QAAQ,CAAC,IAAI,CAClB,IAAI,EACJ,MAAM,EACN,EAAE,EACF,GAAG,EACH,WAAW,EACX,eAAe,CAChB,CAAC;iBACH;qBAAM;oBACL,OAAO,QAAQ,CAAC,IAAI,CAClB,IAAI,EACJ,MAAM,EACN,EAAE,EACF,GAAG,EACH,WAAW,EACX,OAAO,EACP,eAAe,CAChB,CAAC;iBACH;YACH,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,uCAAuC;IAC/B,iBAAiB;QACvB,MAAM,eAAe,GAAG,IAAI,CAAC;QAC7B,OAAO,CAAC,QAAyC,EAAE,EAAE;YACnD,OAAO,SAAS,oBAAoB,CAElC,MAA6B,EAC7B,EAAU,EACV,WAAwB,EACxB,SAAiB,EACjB,OAA2B,EAC3B,QAAmB;gBAEnB,MAAM,WAAW,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpD,MAAM,aAAa,GACjB,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACrD,IAAI,CAAC,WAAW,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE;oBACvD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;wBACjC,OAAO,QAAQ,CAAC,IAAI,CAClB,IAAI,EACJ,MAAM,EACN,EAAE,EACF,WAAW,EACX,SAAS,EACT,OAAO,CACR,CAAC;qBACH;yBAAM;wBACL,OAAO,QAAQ,CAAC,IAAI,CAClB,IAAI,EACJ,MAAM,EACN,EAAE,EACF,WAAW,EACX,SAAS,EACT,OAAO,EACP,QAAQ,CACT,CAAC;qBACH;iBACF;gBACD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,EAAE;oBAC/D,IAAI,EAAE,cAAQ,CAAC,MAAM;iBACtB,CAAC,CAAC;gBACH,eAAe,CAAC,qBAAqB,CACnC,IAAI,EACJ,EAAE,EACF,MAAM,EACN,WAAW,CAAC,GAAG,EACf,SAAS,CACV,CAAC;gBACF,MAAM,eAAe,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBACvE,yEAAyE;gBACzE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;oBACjC,OAAO,QAAQ,CAAC,IAAI,CAClB,IAAI,EACJ,MAAM,EACN,EAAE,EACF,WAAW,EACX,SAAS,EACT,eAAe,CAChB,CAAC;iBACH;qBAAM;oBACL,OAAO,QAAQ,CAAC,IAAI,CAClB,IAAI,EACJ,MAAM,EACN,EAAE,EACF,WAAW,EACX,SAAS,EACT,OAAO,EACP,eAAe,CAChB,CAAC;iBACH;YACH,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,eAAe,CAC5B,OAA6B;QAE7B,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE;YACvC,OAAO,mCAAkB,CAAC,cAAc,CAAC;SAC1C;aAAM,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE;YAC9C,OAAO,mCAAkB,CAAC,eAAe,CAAC;SAC3C;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;YACzC,OAAO,mCAAkB,CAAC,SAAS,CAAC;SACrC;aAAM,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;YACtC,OAAO,mCAAkB,CAAC,KAAK,CAAC;SACjC;aAAM;YACL,OAAO,mCAAkB,CAAC,OAAO,CAAC;SACnC;IACH,CAAC;IAED;;;;;;OAMG;IACK,qBAAqB,CAC3B,IAAU,EACV,aAAkB,EAClB,EAAO,EACP,OAAa,EACb,SAAkB;QAElB,IAAI,IAAI,EAAE,IAAwB,CAAC;QACnC,IAAI,aAAa,EAAE;YACjB,MAAM,SAAS,GACb,OAAO,aAAa,CAAC,OAAO,KAAK,QAAQ;gBACvC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;gBAClC,CAAC,CAAC,EAAE,CAAC;YACT,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;aACrB;SACF;QACD,uFAAuF;QACvF,IAAI,UAAmC,CAAC;QACxC,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,KAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YAC9C,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACnC;aAAM,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,EAAE;YAC3B,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;SAC9B;aAAM;YACL,UAAU,GAAG,OAAO,CAAC;SACtB;QAED,IAAI,CAAC,qBAAqB,CACxB,IAAI,EACJ,EAAE,CAAC,EAAE,EACL,EAAE,CAAC,UAAU,EACb,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,CACV,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACK,qBAAqB,CAC3B,IAAU,EACV,EAAU,EACV,QAA+B,EAC/B,OAA8B,EAC9B,SAA8B;;QAE9B,wDAAwD;QACxD,IAAI,IAAwB,CAAC;QAC7B,IAAI,IAAwB,CAAC;QAC7B,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,EAAE;YAC1B,IAAI,GAAG,MAAA,MAAA,QAAQ,CAAC,CAAC,CAAC,OAAO,0CAAE,IAAI,mCAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACnD,IAAI,GAAG,MAAA,CAAC,MAAA,MAAA,QAAQ,CAAC,CAAC,CAAC,OAAO,0CAAE,IAAI,mCAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,0CAAE,QAAQ,EAAE,CAAC;YACjE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChC,MAAM,OAAO,GAAG,MAAA,QAAQ,CAAC,WAAW,0CAAE,OAAO,CAAC;gBAC9C,IAAI,OAAO,EAAE;oBACX,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC3C,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;iBAC3B;aACF;SACF;QAED,0EAA0E;QAC1E,4EAA4E;QAC5E,sEAAsE;QACtE,0DAA0D;QAC1D,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxD,uFAAuF;QACvF,MAAM,UAAU,GAAG,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,mCAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,CAAC,mCAAI,OAAO,CAAC;QAE3D,IAAI,CAAC,qBAAqB,CACxB,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,CACV,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAC3B,IAAU,EACV,MAAe,EACf,YAAqB,EACrB,IAAyB,EACzB,IAAyB,EACzB,UAAgB,EAChB,SAA8B;QAE9B,kCAAkC;QAClC,IAAI,CAAC,aAAa,CAAC;YACjB,CAAC,yCAAkB,CAAC,SAAS,CAAC,EAAE,qCAAc,CAAC,OAAO;YACtD,CAAC,yCAAkB,CAAC,OAAO,CAAC,EAAE,MAAM;YACpC,CAAC,yCAAkB,CAAC,qBAAqB,CAAC,EAAE,YAAY;YACxD,CAAC,yCAAkB,CAAC,YAAY,CAAC,EAAE,SAAS;YAC5C,CAAC,yCAAkB,CAAC,oBAAoB,CAAC,EAAE,aAAa,IAAI,IAAI,IAAI,IAAI,MAAM,EAAE;SACjF,CAAC,CAAC;QAEH,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,IAAI,CAAC,aAAa,CAAC;gBACjB,CAAC,yCAAkB,CAAC,aAAa,CAAC,EAAE,IAAI;gBACxC,CAAC,yCAAkB,CAAC,aAAa,CAAC,EAAE,IAAI;aACzC,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,qBAAqB,GACzB,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,UAAU;YACtD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB;YACpC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpD,IAAA,wCAAsB,EACpB,GAAG,EAAE;YACH,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,yCAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC,EACD,GAAG,CAAC,EAAE;YACJ,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAC;aACnE;QACH,CAAC,EACD,IAAI,CACL,CAAC;IACJ,CAAC;IAEO,6BAA6B,CAAC,UAAmC;;QACvE,MAAM,mBAAmB,GAAG,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,yBAAyB,CAAA,CAAC;QACtE,MAAM,SAAS,GAAG,mBAAmB;YACnC,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBACf,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAgC,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACK,sBAAsB,CAAC,IAAU,EAAE,MAAqB;QAC9D,MAAM,MAAM,GAAiC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9D,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,UAAU,EAAE;YAC7C,IAAA,wCAAsB,EACpB,GAAG,EAAE;gBACH,MAAM,CAAC,YAAa,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/C,CAAC,EACD,GAAG,CAAC,EAAE;gBACJ,IAAI,GAAG,EAAE;oBACP,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;iBACtD;YACH,CAAC,EACD,IAAI,CACL,CAAC;SACH;IACH,CAAC;IAED;;;;;OAKG;IACK,SAAS,CACf,IAAsB,EACtB,aAAuB,EACvB,YAAqB,EACrB,WAAoB;QAEpB,wEAAwE;QACxE,4CAA4C;QAC5C,MAAM,aAAa,GAAG,aAAO,CAAC,MAAM,EAAE,CAAC;QACvC,MAAM,eAAe,GAAG,IAAI,CAAC;QAC7B,OAAO,SAAS,UAAU,CAAW,GAAG,IAAe;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,EAAE;gBACR,IAAI,KAAK,YAAY,KAAK,EAAE;oBAC1B,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAC;wBACd,IAAI,EAAE,oBAAc,CAAC,KAAK;wBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;qBACvB,CAAC,CAAC;iBACJ;qBAAM;oBACL,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAkB,CAAC;oBACxC,eAAe,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;iBACtD;gBACD,IAAI,CAAC,GAAG,EAAE,CAAC;aACZ;YAED,OAAO,aAAO,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE;gBACtC,IAAI,WAAW,KAAK,aAAa,EAAE;oBACjC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;wBACxC,KAAK,EAAE,MAAM;wBACb,WAAW,EAAE,eAAe,CAAC,SAAS;qBACvC,CAAC,CAAC;iBACJ;gBACD,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;IACO,WAAW,CAAC,OAAY;;QAC9B,MAAM,IAAI,GAAG,MAAA,OAAO,CAAC,WAAW,0CAAE,IAAI,CAAC;QACvC,MAAM,IAAI,GAAG,MAAA,OAAO,CAAC,WAAW,0CAAE,IAAI,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;QAChC,MAAM,QAAQ,GAAG,aAAa,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;CACF;AAxzBD,wDAwzBC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n context,\n diag,\n trace,\n Span,\n SpanKind,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n isWrapped,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport {\n DbSystemValues,\n SemanticAttributes,\n} from '@opentelemetry/semantic-conventions';\nimport { MongoDBInstrumentationConfig, CommandResult } from './types';\nimport {\n CursorState,\n ServerSession,\n MongodbCommandType,\n MongoInternalCommand,\n MongoInternalTopology,\n WireProtocolInternal,\n V4Connection,\n} from './internal-types';\nimport { V4Connect, V4Session } from './internal-types';\nimport { VERSION } from './version';\nimport { UpDownCounter } from '@opentelemetry/api';\n\n/** mongodb instrumentation plugin for OpenTelemetry */\nexport class MongoDBInstrumentation extends InstrumentationBase {\n private _connectionsUsage!: UpDownCounter;\n private _poolName!: string;\n\n constructor(protected override _config: MongoDBInstrumentationConfig = {}) {\n super('@opentelemetry/instrumentation-mongodb', VERSION, _config);\n }\n\n override _updateMetricInstruments() {\n this._connectionsUsage = this.meter.createUpDownCounter(\n 'db.client.connections.usage',\n {\n description:\n 'The number of connections that are currently in state described by the state attribute.',\n unit: '{connection}',\n }\n );\n }\n\n init() {\n const {\n v3PatchConnection: v3PatchConnection,\n v3UnpatchConnection: v3UnpatchConnection,\n } = this._getV3ConnectionPatches();\n\n const { v4PatchConnect, v4UnpatchConnect } = this._getV4ConnectPatches();\n const { v4PatchConnection, v4UnpatchConnection } =\n this._getV4ConnectionPatches();\n const { v4PatchSessions, v4UnpatchSessions } = this._getV4SessionsPatches();\n\n return [\n new InstrumentationNodeModuleDefinition<any>(\n 'mongodb',\n ['>=3.3 <4'],\n undefined,\n undefined,\n [\n new InstrumentationNodeModuleFile<WireProtocolInternal>(\n 'mongodb/lib/core/wireprotocol/index.js',\n ['>=3.3 <4'],\n v3PatchConnection,\n v3UnpatchConnection\n ),\n ]\n ),\n new InstrumentationNodeModuleDefinition<any>(\n 'mongodb',\n ['4.*', '5.*'],\n undefined,\n undefined,\n [\n new InstrumentationNodeModuleFile<V4Connection>(\n 'mongodb/lib/cmap/connection.js',\n ['4.*', '5.*'],\n v4PatchConnection,\n v4UnpatchConnection\n ),\n new InstrumentationNodeModuleFile<V4Connect>(\n 'mongodb/lib/cmap/connect.js',\n ['4.*', '5.*'],\n v4PatchConnect,\n v4UnpatchConnect\n ),\n new InstrumentationNodeModuleFile<V4Session>(\n 'mongodb/lib/sessions.js',\n ['4.*', '5.*'],\n v4PatchSessions,\n v4UnpatchSessions\n ),\n ]\n ),\n ];\n }\n\n private _getV3ConnectionPatches<T extends WireProtocolInternal>() {\n return {\n v3PatchConnection: (moduleExports: T, moduleVersion?: string) => {\n diag.debug(`Applying patch for mongodb@${moduleVersion}`);\n // patch insert operation\n if (isWrapped(moduleExports.insert)) {\n this._unwrap(moduleExports, 'insert');\n }\n this._wrap(\n moduleExports,\n 'insert',\n this._getV3PatchOperation('insert')\n );\n // patch remove operation\n if (isWrapped(moduleExports.remove)) {\n this._unwrap(moduleExports, 'remove');\n }\n this._wrap(\n moduleExports,\n 'remove',\n this._getV3PatchOperation('remove')\n );\n // patch update operation\n if (isWrapped(moduleExports.update)) {\n this._unwrap(moduleExports, 'update');\n }\n this._wrap(\n moduleExports,\n 'update',\n this._getV3PatchOperation('update')\n );\n // patch other command\n if (isWrapped(moduleExports.command)) {\n this._unwrap(moduleExports, 'command');\n }\n this._wrap(moduleExports, 'command', this._getV3PatchCommand());\n // patch query\n if (isWrapped(moduleExports.query)) {\n this._unwrap(moduleExports, 'query');\n }\n this._wrap(moduleExports, 'query', this._getV3PatchFind());\n // patch get more operation on cursor\n if (isWrapped(moduleExports.getMore)) {\n this._unwrap(moduleExports, 'getMore');\n }\n this._wrap(moduleExports, 'getMore', this._getV3PatchCursor());\n return moduleExports;\n },\n v3UnpatchConnection: (moduleExports?: T, moduleVersion?: string) => {\n if (moduleExports === undefined) return;\n diag.debug(`Removing internal patch for mongodb@${moduleVersion}`);\n this._unwrap(moduleExports, 'insert');\n this._unwrap(moduleExports, 'remove');\n this._unwrap(moduleExports, 'update');\n this._unwrap(moduleExports, 'command');\n this._unwrap(moduleExports, 'query');\n this._unwrap(moduleExports, 'getMore');\n },\n };\n }\n\n private _getV4SessionsPatches<T extends V4Session>() {\n return {\n v4PatchSessions: (moduleExports: any, moduleVersion?: string) => {\n diag.debug(`Applying patch for mongodb@${moduleVersion}`);\n if (isWrapped(moduleExports.acquire)) {\n this._unwrap(moduleExports, 'acquire');\n }\n this._wrap(\n moduleExports.ServerSessionPool.prototype,\n 'acquire',\n this._getV4AcquireCommand()\n );\n\n if (isWrapped(moduleExports.release)) {\n this._unwrap(moduleExports, 'release');\n }\n this._wrap(\n moduleExports.ServerSessionPool.prototype,\n 'release',\n this._getV4ReleaseCommand()\n );\n return moduleExports;\n },\n v4UnpatchSessions: (moduleExports?: T, moduleVersion?: string) => {\n diag.debug(`Removing internal patch for mongodb@${moduleVersion}`);\n if (moduleExports === undefined) return;\n if (isWrapped(moduleExports.acquire)) {\n this._unwrap(moduleExports, 'acquire');\n }\n if (isWrapped(moduleExports.release)) {\n this._unwrap(moduleExports, 'release');\n }\n },\n };\n }\n\n private _getV4AcquireCommand() {\n const instrumentation = this;\n return (original: V4Session['acquire']) => {\n return function patchAcquire(this: any) {\n const nSessionsBeforeAcquire = this.sessions.length;\n const session = original.call(this);\n const nSessionsAfterAcquire = this.sessions.length;\n\n if (nSessionsBeforeAcquire === nSessionsAfterAcquire) {\n //no session in the pool. a new session was created and used\n instrumentation._connectionsUsage.add(1, {\n state: 'used',\n 'pool.name': instrumentation._poolName,\n });\n } else if (nSessionsBeforeAcquire - 1 === nSessionsAfterAcquire) {\n //a session was already in the pool. remove it from the pool and use it.\n instrumentation._connectionsUsage.add(-1, {\n state: 'idle',\n 'pool.name': instrumentation._poolName,\n });\n instrumentation._connectionsUsage.add(1, {\n state: 'used',\n 'pool.name': instrumentation._poolName,\n });\n }\n return session;\n };\n };\n }\n\n private _getV4ReleaseCommand() {\n const instrumentation = this;\n return (original: V4Session['release']) => {\n return function patchRelease(this: any, session: ServerSession) {\n const cmdPromise = original.call(this, session);\n\n instrumentation._connectionsUsage.add(-1, {\n state: 'used',\n 'pool.name': instrumentation._poolName,\n });\n instrumentation._connectionsUsage.add(1, {\n state: 'idle',\n 'pool.name': instrumentation._poolName,\n });\n return cmdPromise;\n };\n };\n }\n\n private _getV4ConnectPatches<T extends V4Connect>() {\n return {\n v4PatchConnect: (moduleExports: any, moduleVersion?: string) => {\n diag.debug(`Applying patch for mongodb@${moduleVersion}`);\n if (isWrapped(moduleExports.connect)) {\n this._unwrap(moduleExports, 'connect');\n }\n\n this._wrap(moduleExports, 'connect', this._getV4ConnectCommand());\n return moduleExports;\n },\n v4UnpatchConnect: (moduleExports?: T, moduleVersion?: string) => {\n diag.debug(`Removing internal patch for mongodb@${moduleVersion}`);\n if (moduleExports === undefined) return;\n\n this._unwrap(moduleExports, 'connect');\n },\n };\n }\n\n private _getV4ConnectCommand() {\n const instrumentation = this;\n\n return (original: V4Connect['connect']) => {\n return function patchedConnect(\n this: unknown,\n options: any,\n callback: any\n ) {\n const patchedCallback = function (err: any, conn: any) {\n if (err || !conn) {\n callback(err, conn);\n return;\n }\n instrumentation.setPoolName(options);\n callback(err, conn);\n };\n return original.call(this, options, patchedCallback);\n };\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private _getV4ConnectionPatches<T extends V4Connection>() {\n return {\n v4PatchConnection: (moduleExports: any, moduleVersion?: string) => {\n diag.debug(`Applying patch for mongodb@${moduleVersion}`);\n // patch insert operation\n if (isWrapped(moduleExports.Connection.prototype.command)) {\n this._unwrap(moduleExports.Connection.prototype, 'command');\n }\n\n this._wrap(\n moduleExports.Connection.prototype,\n 'command',\n this._getV4PatchCommand()\n );\n return moduleExports;\n },\n v4UnpatchConnection: (moduleExports?: any, moduleVersion?: string) => {\n if (moduleExports === undefined) return;\n diag.debug(`Removing internal patch for mongodb@${moduleVersion}`);\n this._unwrap(moduleExports.Connection.prototype, 'command');\n },\n };\n }\n\n /** Creates spans for common operations */\n private _getV3PatchOperation(operationName: 'insert' | 'update' | 'remove') {\n const instrumentation = this;\n return (original: WireProtocolInternal[typeof operationName]) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n ops: unknown[],\n options: unknown | Function,\n callback?: Function\n ) {\n const currentSpan = trace.getSpan(context.active());\n const resultHandler =\n typeof options === 'function' ? options : callback;\n if (\n !currentSpan ||\n typeof resultHandler !== 'function' ||\n typeof ops !== 'object'\n ) {\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, options);\n } else {\n return original.call(this, server, ns, ops, options, callback);\n }\n }\n const span = instrumentation.tracer.startSpan(\n `mongodb.${operationName}`,\n {\n kind: SpanKind.CLIENT,\n }\n );\n\n instrumentation._populateV3Attributes(\n span,\n ns,\n server,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ops[0] as any,\n operationName\n );\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, patchedCallback);\n } else {\n return original.call(this, server, ns, ops, options, patchedCallback);\n }\n };\n };\n }\n\n /** Creates spans for command operation */\n private _getV3PatchCommand() {\n const instrumentation = this;\n return (original: WireProtocolInternal['command']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n options: unknown | Function,\n callback?: Function\n ) {\n const currentSpan = trace.getSpan(context.active());\n const resultHandler =\n typeof options === 'function' ? options : callback;\n if (\n !currentSpan ||\n typeof resultHandler !== 'function' ||\n typeof cmd !== 'object'\n ) {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, options);\n } else {\n return original.call(this, server, ns, cmd, options, callback);\n }\n }\n const commandType = MongoDBInstrumentation._getCommandType(cmd);\n const type =\n commandType === MongodbCommandType.UNKNOWN ? 'command' : commandType;\n const span = instrumentation.tracer.startSpan(`mongodb.${type}`, {\n kind: SpanKind.CLIENT,\n });\n const operation =\n commandType === MongodbCommandType.UNKNOWN ? undefined : commandType;\n instrumentation._populateV3Attributes(span, ns, server, cmd, operation);\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, patchedCallback);\n } else {\n return original.call(this, server, ns, cmd, options, patchedCallback);\n }\n };\n };\n }\n\n /** Creates spans for command operation */\n private _getV4PatchCommand() {\n const instrumentation = this;\n return (original: V4Connection['command']) => {\n return function patchedV4ServerCommand(\n this: any,\n ns: any,\n cmd: any,\n options: undefined | unknown,\n callback: any\n ) {\n const currentSpan = trace.getSpan(context.active());\n const resultHandler = callback;\n const commandType = Object.keys(cmd)[0];\n\n if (\n typeof resultHandler !== 'function' ||\n typeof cmd !== 'object' ||\n cmd.ismaster ||\n cmd.hello\n ) {\n return original.call(this, ns, cmd, options, callback);\n }\n if (!currentSpan) {\n const patchedCallback = instrumentation._patchEnd(\n undefined,\n resultHandler,\n this.id,\n commandType\n );\n\n return original.call(this, ns, cmd, options, patchedCallback);\n } else {\n const span = instrumentation.tracer.startSpan(\n `mongodb.${commandType}`,\n {\n kind: SpanKind.CLIENT,\n }\n );\n instrumentation._populateV4Attributes(\n span,\n this,\n ns,\n cmd,\n commandType\n );\n const patchedCallback = instrumentation._patchEnd(\n span,\n resultHandler,\n this.id,\n commandType\n );\n\n return original.call(this, ns, cmd, options, patchedCallback);\n }\n };\n };\n }\n\n /** Creates spans for find operation */\n private _getV3PatchFind() {\n const instrumentation = this;\n return (original: WireProtocolInternal['query']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n cursorState: CursorState,\n options: unknown | Function,\n callback?: Function\n ) {\n const currentSpan = trace.getSpan(context.active());\n const resultHandler =\n typeof options === 'function' ? options : callback;\n if (\n !currentSpan ||\n typeof resultHandler !== 'function' ||\n typeof cmd !== 'object'\n ) {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, options);\n } else {\n return original.call(\n this,\n server,\n ns,\n cmd,\n cursorState,\n options,\n callback\n );\n }\n }\n const span = instrumentation.tracer.startSpan('mongodb.find', {\n kind: SpanKind.CLIENT,\n });\n instrumentation._populateV3Attributes(span, ns, server, cmd, 'find');\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(\n this,\n server,\n ns,\n cmd,\n cursorState,\n patchedCallback\n );\n } else {\n return original.call(\n this,\n server,\n ns,\n cmd,\n cursorState,\n options,\n patchedCallback\n );\n }\n };\n };\n }\n\n /** Creates spans for find operation */\n private _getV3PatchCursor() {\n const instrumentation = this;\n return (original: WireProtocolInternal['getMore']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cursorState: CursorState,\n batchSize: number,\n options: unknown | Function,\n callback?: Function\n ) {\n const currentSpan = trace.getSpan(context.active());\n const resultHandler =\n typeof options === 'function' ? options : callback;\n if (!currentSpan || typeof resultHandler !== 'function') {\n if (typeof options === 'function') {\n return original.call(\n this,\n server,\n ns,\n cursorState,\n batchSize,\n options\n );\n } else {\n return original.call(\n this,\n server,\n ns,\n cursorState,\n batchSize,\n options,\n callback\n );\n }\n }\n const span = instrumentation.tracer.startSpan('mongodb.getMore', {\n kind: SpanKind.CLIENT,\n });\n instrumentation._populateV3Attributes(\n span,\n ns,\n server,\n cursorState.cmd,\n 'getMore'\n );\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(\n this,\n server,\n ns,\n cursorState,\n batchSize,\n patchedCallback\n );\n } else {\n return original.call(\n this,\n server,\n ns,\n cursorState,\n batchSize,\n options,\n patchedCallback\n );\n }\n };\n };\n }\n\n /**\n * Get the mongodb command type from the object.\n * @param command Internal mongodb command object\n */\n private static _getCommandType(\n command: MongoInternalCommand\n ): MongodbCommandType {\n if (command.createIndexes !== undefined) {\n return MongodbCommandType.CREATE_INDEXES;\n } else if (command.findandmodify !== undefined) {\n return MongodbCommandType.FIND_AND_MODIFY;\n } else if (command.ismaster !== undefined) {\n return MongodbCommandType.IS_MASTER;\n } else if (command.count !== undefined) {\n return MongodbCommandType.COUNT;\n } else {\n return MongodbCommandType.UNKNOWN;\n }\n }\n\n /**\n * Populate span's attributes by fetching related metadata from the context\n * @param span span to add attributes to\n * @param connectionCtx mongodb internal connection context\n * @param ns mongodb namespace\n * @param command mongodb internal representation of a command\n */\n private _populateV4Attributes(\n span: Span,\n connectionCtx: any,\n ns: any,\n command?: any,\n operation?: string\n ) {\n let host, port: undefined | string;\n if (connectionCtx) {\n const hostParts =\n typeof connectionCtx.address === 'string'\n ? connectionCtx.address.split(':')\n : '';\n if (hostParts.length === 2) {\n host = hostParts[0];\n port = hostParts[1];\n }\n }\n // capture parameters within the query as well if enhancedDatabaseReporting is enabled.\n let commandObj: Record<string, unknown>;\n if (command?.documents && command.documents[0]) {\n commandObj = command.documents[0];\n } else if (command?.cursors) {\n commandObj = command.cursors;\n } else {\n commandObj = command;\n }\n\n this._addAllSpanAttributes(\n span,\n ns.db,\n ns.collection,\n host,\n port,\n commandObj,\n operation\n );\n }\n\n /**\n * Populate span's attributes by fetching related metadata from the context\n * @param span span to add attributes to\n * @param ns mongodb namespace\n * @param topology mongodb internal representation of the network topology\n * @param command mongodb internal representation of a command\n */\n private _populateV3Attributes(\n span: Span,\n ns: string,\n topology: MongoInternalTopology,\n command?: MongoInternalCommand,\n operation?: string | undefined\n ) {\n // add network attributes to determine the remote server\n let host: undefined | string;\n let port: undefined | string;\n if (topology && topology.s) {\n host = topology.s.options?.host ?? topology.s.host;\n port = (topology.s.options?.port ?? topology.s.port)?.toString();\n if (host == null || port == null) {\n const address = topology.description?.address;\n if (address) {\n const addressSegments = address.split(':');\n host = addressSegments[0];\n port = addressSegments[1];\n }\n }\n }\n\n // The namespace is a combination of the database name and the name of the\n // collection or index, like so: [database-name].[collection-or-index-name].\n // It could be a string or an instance of MongoDBNamespace, as such we\n // always coerce to a string to extract db and collection.\n const [dbName, dbCollection] = ns.toString().split('.');\n // capture parameters within the query as well if enhancedDatabaseReporting is enabled.\n const commandObj = command?.query ?? command?.q ?? command;\n\n this._addAllSpanAttributes(\n span,\n dbName,\n dbCollection,\n host,\n port,\n commandObj,\n operation\n );\n }\n\n private _addAllSpanAttributes(\n span: Span,\n dbName?: string,\n dbCollection?: string,\n host?: undefined | string,\n port?: undefined | string,\n commandObj?: any,\n operation?: string | undefined\n ) {\n // add database related attributes\n span.setAttributes({\n [SemanticAttributes.DB_SYSTEM]: DbSystemValues.MONGODB,\n [SemanticAttributes.DB_NAME]: dbName,\n [SemanticAttributes.DB_MONGODB_COLLECTION]: dbCollection,\n [SemanticAttributes.DB_OPERATION]: operation,\n [SemanticAttributes.DB_CONNECTION_STRING]: `mongodb://${host}:${port}/${dbName}`,\n });\n\n if (host && port) {\n span.setAttributes({\n [SemanticAttributes.NET_PEER_NAME]: host,\n [SemanticAttributes.NET_PEER_PORT]: port,\n });\n }\n if (!commandObj) return;\n const dbStatementSerializer =\n typeof this._config.dbStatementSerializer === 'function'\n ? this._config.dbStatementSerializer\n : this._defaultDbStatementSerializer.bind(this);\n\n safeExecuteInTheMiddle(\n () => {\n const query = dbStatementSerializer(commandObj);\n span.setAttribute(SemanticAttributes.DB_STATEMENT, query);\n },\n err => {\n if (err) {\n this._diag.error('Error running dbStatementSerializer hook', err);\n }\n },\n true\n );\n }\n\n private _defaultDbStatementSerializer(commandObj: Record<string, unknown>) {\n const enhancedDbReporting = !!this._config?.enhancedDatabaseReporting;\n const resultObj = enhancedDbReporting\n ? commandObj\n : Object.keys(commandObj).reduce((obj, key) => {\n obj[key] = '?';\n return obj;\n }, {} as { [key: string]: unknown });\n return JSON.stringify(resultObj);\n }\n\n /**\n * Triggers the response hook in case it is defined.\n * @param span The span to add the results to.\n * @param result The command result\n */\n private _handleExecutionResult(span: Span, result: CommandResult) {\n const config: MongoDBInstrumentationConfig = this.getConfig();\n if (typeof config.responseHook === 'function') {\n safeExecuteInTheMiddle(\n () => {\n config.responseHook!(span, { data: result });\n },\n err => {\n if (err) {\n this._diag.error('Error running response hook', err);\n }\n },\n true\n );\n }\n }\n\n /**\n * Ends a created span.\n * @param span The created span to end.\n * @param resultHandler A callback function.\n * @param connectionId: The connection ID of the Command response.\n */\n private _patchEnd(\n span: Span | undefined,\n resultHandler: Function,\n connectionId?: number,\n commandType?: string\n ): Function {\n // mongodb is using \"tick\" when calling a callback, this way the context\n // in final callback (resultHandler) is lost\n const activeContext = context.active();\n const instrumentation = this;\n return function patchedEnd(this: {}, ...args: unknown[]) {\n const error = args[0];\n if (span) {\n if (error instanceof Error) {\n span?.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n } else {\n const result = args[1] as CommandResult;\n instrumentation._handleExecutionResult(span, result);\n }\n span.end();\n }\n\n return context.with(activeContext, () => {\n if (commandType === 'endSessions') {\n instrumentation._connectionsUsage.add(-1, {\n state: 'idle',\n 'pool.name': instrumentation._poolName,\n });\n }\n return resultHandler.apply(this, args);\n });\n };\n }\n private setPoolName(options: any) {\n const host = options.hostAddress?.host;\n const port = options.hostAddress?.port;\n const database = options.dbName;\n const poolName = `mongodb://${host}:${port}/${database}`;\n this._poolName = poolName;\n }\n}\n"]}
|
|
@@ -41,6 +41,12 @@ export declare type MongoInternalCommand = {
|
|
|
41
41
|
q?: Record<string, unknown>;
|
|
42
42
|
u?: Record<string, unknown>;
|
|
43
43
|
};
|
|
44
|
+
export declare type ServerSession = {
|
|
45
|
+
id: any;
|
|
46
|
+
lastUse: number;
|
|
47
|
+
txnNumber: number;
|
|
48
|
+
isDirty: boolean;
|
|
49
|
+
};
|
|
44
50
|
export declare type CursorState = {
|
|
45
51
|
cmd: MongoInternalCommand;
|
|
46
52
|
} & Record<string, unknown>;
|
|
@@ -88,4 +94,11 @@ export declare type Document = {
|
|
|
88
94
|
export declare type V4Connection = {
|
|
89
95
|
command(ns: any, cmd: Document, options: undefined | unknown, callback: any): void;
|
|
90
96
|
};
|
|
97
|
+
export declare type V4Connect = {
|
|
98
|
+
connect: (options: any, callback: any) => void;
|
|
99
|
+
};
|
|
100
|
+
export declare type V4Session = {
|
|
101
|
+
acquire: () => ServerSession;
|
|
102
|
+
release: (session: ServerSession) => void;
|
|
103
|
+
};
|
|
91
104
|
//# sourceMappingURL=internal-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-types.js","sourceRoot":"","sources":["../../src/internal-types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;
|
|
1
|
+
{"version":3,"file":"internal-types.js","sourceRoot":"","sources":["../../src/internal-types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAqJH,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,sDAAgC,CAAA;IAChC,uDAAiC,CAAA;IACjC,4CAAsB,CAAA;IACtB,qCAAe,CAAA;IACf,yCAAmB,CAAA;AACrB,CAAC,EANW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAM7B","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { Span } from '@opentelemetry/api';\n\nexport interface MongoDBInstrumentationExecutionResponseHook {\n (span: Span, responseInfo: MongoResponseHookInformation): void;\n}\n\n/**\n * Function that can be used to serialize db.statement tag\n * @param cmd - MongoDB command object\n *\n * @returns serialized string that will be used as the db.statement attribute.\n */\nexport type DbStatementSerializer = (cmd: Record<string, unknown>) => string;\n\nexport interface MongoDBInstrumentationConfig extends InstrumentationConfig {\n /**\n * If true, additional information about query parameters and\n * results will be attached (as `attributes`) to spans representing\n * database operations.\n */\n enhancedDatabaseReporting?: boolean;\n\n /**\n * Hook that allows adding custom span attributes based on the data\n * returned from MongoDB actions.\n *\n * @default undefined\n */\n responseHook?: MongoDBInstrumentationExecutionResponseHook;\n\n /**\n * Custom serializer function for the db.statement tag\n */\n dbStatementSerializer?: DbStatementSerializer;\n}\n\nexport type Func<T> = (...args: unknown[]) => T;\nexport type MongoInternalCommand = {\n findandmodify: boolean;\n createIndexes: boolean;\n count: boolean;\n ismaster: boolean;\n indexes?: unknown[];\n query?: Record<string, unknown>;\n limit?: number;\n q?: Record<string, unknown>;\n u?: Record<string, unknown>;\n};\n\nexport type ServerSession = {\n id: any;\n lastUse: number;\n txnNumber: number;\n isDirty: boolean;\n};\n\nexport type CursorState = { cmd: MongoInternalCommand } & Record<\n string,\n unknown\n>;\n\nexport interface MongoResponseHookInformation {\n data: CommandResult;\n}\n\n// https://github.com/mongodb/node-mongodb-native/blob/3.6/lib/core/connection/command_result.js\nexport type CommandResult = {\n result?: unknown;\n connection?: unknown;\n message?: unknown;\n};\n\n// https://github.com/mongodb/node-mongodb-native/blob/3.6/lib/core/wireprotocol/index.js\nexport type WireProtocolInternal = {\n insert: (\n server: MongoInternalTopology,\n ns: string,\n ops: unknown[],\n options: unknown | Function,\n callback?: Function\n ) => unknown;\n update: (\n server: MongoInternalTopology,\n ns: string,\n ops: unknown[],\n options: unknown | Function,\n callback?: Function\n ) => unknown;\n remove: (\n server: MongoInternalTopology,\n ns: string,\n ops: unknown[],\n options: unknown | Function,\n callback?: Function\n ) => unknown;\n killCursors: (\n server: MongoInternalTopology,\n ns: string,\n cursorState: CursorState,\n callback: Function\n ) => unknown;\n getMore: (\n server: MongoInternalTopology,\n ns: string,\n cursorState: CursorState,\n batchSize: number,\n options: unknown | Function,\n callback?: Function\n ) => unknown;\n query: (\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n cursorState: CursorState,\n options: unknown | Function,\n callback?: Function\n ) => unknown;\n command: (\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n options: unknown | Function,\n callback?: Function\n ) => unknown;\n};\n\n// https://github.com/mongodb/node-mongodb-native/blob/3.6/lib/topologies/server.js#L172\n// https://github.com/mongodb/node-mongodb-native/blob/2.2/lib/server.js#L174\nexport type MongoInternalTopology = {\n s?: {\n // those are for mongodb@3\n options?: {\n host?: string;\n port?: number;\n servername?: string;\n };\n // those are for mongodb@2\n host?: string;\n port?: number;\n };\n // mongodb@3 with useUnifiedTopology option\n description?: {\n address?: string;\n };\n};\n\nexport enum MongodbCommandType {\n CREATE_INDEXES = 'createIndexes',\n FIND_AND_MODIFY = 'findAndModify',\n IS_MASTER = 'isMaster',\n COUNT = 'count',\n UNKNOWN = 'unknown',\n}\n\n// https://github.com/mongodb/js-bson/blob/main/src/bson.ts\nexport type Document = {\n [key: string]: any;\n};\n\n// https://github.com/mongodb/node-mongodb-native/blob/v4.2.2/src/cmap/connection.ts\nexport type V4Connection = {\n command(\n ns: any,\n cmd: Document,\n options: undefined | unknown,\n callback: any\n ): void;\n};\n\n// https://github.com/mongodb/node-mongodb-native/blob/v4.2.2/src/cmap/connect.ts\nexport type V4Connect = {\n connect: (options: any, callback: any) => void;\n};\n\n// https://github.com/mongodb/node-mongodb-native/blob/v4.2.2/src/sessions.ts\nexport type V4Session = {\n acquire: () => ServerSession;\n release: (session: ServerSession) => void;\n};\n"]}
|
package/build/src/types.d.ts
CHANGED
|
@@ -37,4 +37,15 @@ export declare type CommandResult = {
|
|
|
37
37
|
connection?: unknown;
|
|
38
38
|
message?: unknown;
|
|
39
39
|
};
|
|
40
|
+
export declare enum MongodbCommandType {
|
|
41
|
+
CREATE_INDEXES = "createIndexes",
|
|
42
|
+
FIND_AND_MODIFY = "findAndModify",
|
|
43
|
+
IS_MASTER = "isMaster",
|
|
44
|
+
COUNT = "count",
|
|
45
|
+
UNKNOWN = "unknown"
|
|
46
|
+
}
|
|
47
|
+
export declare type V4Connection = {
|
|
48
|
+
id: number | '<monitor>';
|
|
49
|
+
command(ns: any, cmd: Document, options: undefined | unknown, callback: any): void;
|
|
50
|
+
};
|
|
40
51
|
//# sourceMappingURL=types.d.ts.map
|
package/build/src/types.js
CHANGED
|
@@ -15,4 +15,13 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.MongodbCommandType = void 0;
|
|
19
|
+
var MongodbCommandType;
|
|
20
|
+
(function (MongodbCommandType) {
|
|
21
|
+
MongodbCommandType["CREATE_INDEXES"] = "createIndexes";
|
|
22
|
+
MongodbCommandType["FIND_AND_MODIFY"] = "findAndModify";
|
|
23
|
+
MongodbCommandType["IS_MASTER"] = "isMaster";
|
|
24
|
+
MongodbCommandType["COUNT"] = "count";
|
|
25
|
+
MongodbCommandType["UNKNOWN"] = "unknown";
|
|
26
|
+
})(MongodbCommandType = exports.MongodbCommandType || (exports.MongodbCommandType = {}));
|
|
18
27
|
//# sourceMappingURL=types.js.map
|
package/build/src/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAkDH,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,sDAAgC,CAAA;IAChC,uDAAiC,CAAA;IACjC,4CAAsB,CAAA;IACtB,qCAAe,CAAA;IACf,yCAAmB,CAAA;AACrB,CAAC,EANW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAM7B","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { Span } from '@opentelemetry/api';\n\nexport interface MongoDBInstrumentationExecutionResponseHook {\n (span: Span, responseInfo: MongoResponseHookInformation): void;\n}\n\n/**\n * Function that can be used to serialize db.statement tag\n * @param cmd - MongoDB command object\n *\n * @returns serialized string that will be used as the db.statement attribute.\n */\nexport type DbStatementSerializer = (cmd: Record<string, unknown>) => string;\n\nexport interface MongoDBInstrumentationConfig extends InstrumentationConfig {\n /**\n * If true, additional information about query parameters and\n * results will be attached (as `attributes`) to spans representing\n * database operations.\n */\n enhancedDatabaseReporting?: boolean;\n\n /**\n * Hook that allows adding custom span attributes based on the data\n * returned from MongoDB actions.\n *\n * @default undefined\n */\n responseHook?: MongoDBInstrumentationExecutionResponseHook;\n\n /**\n * Custom serializer function for the db.statement tag\n */\n dbStatementSerializer?: DbStatementSerializer;\n}\n\nexport interface MongoResponseHookInformation {\n data: CommandResult;\n}\n\n// https://github.com/mongodb/node-mongodb-native/blob/3.6/lib/core/connection/command_result.js\nexport type CommandResult = {\n result?: unknown;\n connection?: unknown;\n message?: unknown;\n};\n\nexport enum MongodbCommandType {\n CREATE_INDEXES = 'createIndexes',\n FIND_AND_MODIFY = 'findAndModify',\n IS_MASTER = 'isMaster',\n COUNT = 'count',\n UNKNOWN = 'unknown',\n}\n\n// https://github.com/mongodb/node-mongodb-native/blob/v4.2.2/src/cmap/connection.ts\nexport type V4Connection = {\n id: number | '<monitor>';\n command(\n ns: any,\n cmd: Document,\n options: undefined | unknown,\n callback: any\n ): void;\n};\n"]}
|
package/build/src/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.36.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/build/src/version.js
CHANGED
package/build/src/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,4DAA4D;AAC/C,QAAA,OAAO,GAAG,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,4DAA4D;AAC/C,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '0.36.0';\n"]}
|
package/package.json
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentelemetry/instrumentation-mongodb",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.36.0",
|
|
4
4
|
"description": "OpenTelemetry mongodb automatic instrumentation package.",
|
|
5
5
|
"main": "build/src/index.js",
|
|
6
6
|
"types": "build/src/index.d.ts",
|
|
7
7
|
"repository": "open-telemetry/opentelemetry-js-contrib",
|
|
8
8
|
"scripts": {
|
|
9
9
|
"docker:start": "docker run -e MONGODB_DB=opentelemetry-tests -e MONGODB_PORT=27017 -e MONGODB_HOST=127.0.0.1 -p 27017:27017 --rm mongo",
|
|
10
|
-
"test": "
|
|
11
|
-
"test-
|
|
10
|
+
"test": "npm run test-v3",
|
|
11
|
+
"test-v3": "nyc ts-mocha -p tsconfig.json --require '@opentelemetry/contrib-test-utils' 'test/**/mongodb-v3.test.ts'",
|
|
12
|
+
"test-v4": "nyc ts-mocha -p tsconfig.json --require '@opentelemetry/contrib-test-utils' 'test/mongodb-v4-v5.metrics.test.ts' 'test/**/mongodb-v4.test.ts'",
|
|
13
|
+
"test-v5": "nyc ts-mocha -p tsconfig.json --require '@opentelemetry/contrib-test-utils' 'test/mongodb-v4-v5.metrics.test.ts' 'test/**/mongodb-v5.test.ts'",
|
|
12
14
|
"test-all-versions": "tav",
|
|
13
15
|
"tdd": "npm run test -- --watch-extensions ts --watch",
|
|
14
16
|
"clean": "rimraf build/*",
|
|
@@ -52,7 +54,7 @@
|
|
|
52
54
|
"devDependencies": {
|
|
53
55
|
"@opentelemetry/api": "^1.3.0",
|
|
54
56
|
"@opentelemetry/context-async-hooks": "^1.8.0",
|
|
55
|
-
"@opentelemetry/contrib-test-utils": "^0.
|
|
57
|
+
"@opentelemetry/contrib-test-utils": "^0.34.0",
|
|
56
58
|
"@opentelemetry/sdk-trace-base": "^1.8.0",
|
|
57
59
|
"@opentelemetry/sdk-trace-node": "^1.8.0",
|
|
58
60
|
"@types/bson": "4.0.5",
|
|
@@ -68,9 +70,11 @@
|
|
|
68
70
|
"typescript": "4.4.4"
|
|
69
71
|
},
|
|
70
72
|
"dependencies": {
|
|
71
|
-
"@opentelemetry/instrumentation": "^0.
|
|
72
|
-
"@opentelemetry/
|
|
73
|
+
"@opentelemetry/instrumentation": "^0.41.0",
|
|
74
|
+
"@opentelemetry/sdk-metrics": "^1.9.1",
|
|
75
|
+
"@opentelemetry/semantic-conventions": "^1.0.0",
|
|
76
|
+
"tslib": "^2.3.1"
|
|
73
77
|
},
|
|
74
78
|
"homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-mongodb#readme",
|
|
75
|
-
"gitHead": "
|
|
79
|
+
"gitHead": "f81f8a76a8f0af2101c62dbc73cde442f875d833"
|
|
76
80
|
}
|