appdynamics 22.11.0 → 23.5.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 +1 -1
- package/appdynamics_version.json +2 -2
- package/lib/probes/http-entry-probe.js +3 -2
- package/lib/probes/http-exit-probe.js +2 -9
- package/lib/probes/mysql-probe.js +6 -1
- package/lib/probes/socket.io-probe.js +34 -11
- package/lib/secure_app/library_metadata.js +16 -1
- package/package.json +14 -14
- package/packageBck.json +14 -14
package/README.md
CHANGED
|
@@ -69,7 +69,7 @@ Developer Guide
|
|
|
69
69
|
|
|
70
70
|
### How to setup project locally
|
|
71
71
|
|
|
72
|
-
 Make sure you have stable node version installed ** 12 <= node <=
|
|
72
|
+
 Make sure you have stable node version installed ** 12 <= node <= 19 **
|
|
73
73
|
 are current supported versions.
|
|
74
74
|
|
|
75
75
|
 We recommend using 16 or above.
|
package/appdynamics_version.json
CHANGED
|
@@ -96,12 +96,13 @@ HttpEntryProbe.prototype.__createRequestHandler = function (callback, isHTTPs) {
|
|
|
96
96
|
|
|
97
97
|
var threadId = transaction.threadId;
|
|
98
98
|
self.agent.context.run(() => {
|
|
99
|
-
|
|
99
|
+
|
|
100
100
|
var oldThreadId = self.agent.thread.current();
|
|
101
101
|
self.agent.thread.resume(threadId);
|
|
102
102
|
|
|
103
103
|
try {
|
|
104
|
-
|
|
104
|
+
let threadProxyWrappedCb = self.agent.proxy.wrapWithThreadProxyIfEnabled(callback);
|
|
105
|
+
return invokeOriginal(threadProxyWrappedCb, this, arguments, self.ot_api, span, otContext, req, res);
|
|
105
106
|
} catch (e) {
|
|
106
107
|
HttpCommon.finalizeTransaction(e, profiler, time, transaction, req, res, span);
|
|
107
108
|
transaction = null;
|
|
@@ -7,7 +7,6 @@ All Rights Reserved
|
|
|
7
7
|
var HttpCommon = require('./http-common');
|
|
8
8
|
var HttpOTUtils = require('./http-ot-utils.js');
|
|
9
9
|
var url = require('url');
|
|
10
|
-
var HTTPParser = process.binding('http_parser').HTTPParser;
|
|
11
10
|
|
|
12
11
|
function HttpExitProbe(agent) {
|
|
13
12
|
this.agent = agent;
|
|
@@ -201,8 +200,7 @@ HttpExitProbe.prototype.attach = function (obj, moduleName) {
|
|
|
201
200
|
}, function () {
|
|
202
201
|
if (dataConsumption) return;
|
|
203
202
|
var httpParser = res.socket.parser,
|
|
204
|
-
|
|
205
|
-
httpParserMethod = kOnHeadersComplete ? kOnHeadersComplete : 'onHeadersComplete';
|
|
203
|
+
httpParserMethod = httpParser.__proto__.constructor.kOnHeadersComplete;
|
|
206
204
|
proxy.release(httpParser[httpParserMethod]);
|
|
207
205
|
locals.res = res;
|
|
208
206
|
clientCallback(locals);
|
|
@@ -263,13 +261,8 @@ HttpExitProbe.prototype.attach = function (obj, moduleName) {
|
|
|
263
261
|
}, false, false, threadId);
|
|
264
262
|
|
|
265
263
|
ret.on('socket', function (socket) {
|
|
266
|
-
// For v0.10.0 and below the httpParser has method named onHeadersComplete.
|
|
267
|
-
// For v0.12.0 and above the httpParser has a constant int value for kOnHeadersComplete. The
|
|
268
|
-
// callback for onHeaderComplete is attached as integer property on the parser and the
|
|
269
|
-
// property is defined by the constant value of kOnHeadersComplete.
|
|
270
264
|
httpParser = socket.parser;
|
|
271
|
-
|
|
272
|
-
httpParserMethod = kOnHeadersComplete ? kOnHeadersComplete : 'onHeadersComplete';
|
|
265
|
+
httpParserMethod = httpParser.__proto__.constructor.kOnHeadersComplete;
|
|
273
266
|
var socketCloseHandler = function () {
|
|
274
267
|
socket.removeListener('close', socketCloseHandler);
|
|
275
268
|
if (socket.__appdynamicsCleanup) {
|
|
@@ -138,7 +138,11 @@ MysqlProbe.prototype.attach = function(obj, name) {
|
|
|
138
138
|
proxy.after(obj, createCmd, function(obj, args, ret) {
|
|
139
139
|
if (createCmd === 'createPool') {
|
|
140
140
|
proxy.around(ret, 'getConnection', function(obj, args, locals) {
|
|
141
|
-
|
|
141
|
+
if (!args) return;
|
|
142
|
+
var cbIndex = args.length -1;
|
|
143
|
+
if (!(typeof args[cbIndex] === 'function')) return;
|
|
144
|
+
args[cbIndex] = self.agent.context.bind(args[cbIndex]);
|
|
145
|
+
var callback = self.agent.context.bind(function(obj, args) {
|
|
142
146
|
if (args[0]) return;
|
|
143
147
|
if (args[1]) {
|
|
144
148
|
mysqlConnection = args[1];
|
|
@@ -146,6 +150,7 @@ MysqlProbe.prototype.attach = function(obj, name) {
|
|
|
146
150
|
prepareExitCall(config, mysqlConnection, self.agent);
|
|
147
151
|
}
|
|
148
152
|
});
|
|
153
|
+
locals.methodHasCb = proxy.callback(args, -1, callback);
|
|
149
154
|
}, function(obj, args, ret, locals) {
|
|
150
155
|
if (locals.methodHasCb) return;
|
|
151
156
|
if (!ret || !ret.__appdynamicsIsPromiseResult__) return;
|
|
@@ -25,12 +25,24 @@ SocketioProbe.prototype.attach = function(obj) {
|
|
|
25
25
|
self.agent.on('destroy', function() {
|
|
26
26
|
if(obj.__appdynamicsProbeAttached__) {
|
|
27
27
|
delete obj.__appdynamicsProbeAttached__;
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
var socketIoObj = obj.prototype || obj.Server.prototype;
|
|
29
|
+
if(socketIoObj) {
|
|
30
|
+
proxy.release(socketIoObj.listen);
|
|
31
|
+
proxy.release(socketIoObj.attach);
|
|
32
|
+
}
|
|
33
|
+
|
|
30
34
|
if (socketIOServer) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
var nsps = socketIOServer.nsps || socketIOServer._nsps;
|
|
36
|
+
if(nsps instanceof Map) {
|
|
37
|
+
nsps.forEach(function(value, key) {
|
|
38
|
+
var namespace = nsps.get(key);
|
|
39
|
+
delete namespace.__appdynamicsProbeAttached__;
|
|
40
|
+
});
|
|
41
|
+
} else {
|
|
42
|
+
Object.keys(nsps).forEach(function(nameSpace) {
|
|
43
|
+
delete nsps[nameSpace].__appdynamicsProbeAttached__;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
34
46
|
}
|
|
35
47
|
}
|
|
36
48
|
});
|
|
@@ -58,7 +70,8 @@ SocketioProbe.prototype.attach = function(obj) {
|
|
|
58
70
|
var sentSizeMetric = metricsManager.createMetric(metricsManager.SOCKETIO_SENT_MESSAGES_SIZE);
|
|
59
71
|
var receivedSizeMetric = metricsManager.createMetric(metricsManager.SOCKETIO_RECEIVED_MESSAGES_SIZE);
|
|
60
72
|
|
|
61
|
-
|
|
73
|
+
var socketIoObj = obj.prototype || obj.Server.prototype;
|
|
74
|
+
proxy.after(socketIoObj, ['listen','attach'], function(obj, args, ret) {
|
|
62
75
|
if(!ret.sockets) return;
|
|
63
76
|
socketIOServer = ret;
|
|
64
77
|
|
|
@@ -72,11 +85,21 @@ SocketioProbe.prototype.attach = function(obj) {
|
|
|
72
85
|
ret.__appdynamicsProbeAttached__ = true;
|
|
73
86
|
});
|
|
74
87
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
88
|
+
var nsps = ret.nsps || ret._nsps;
|
|
89
|
+
if(nsps instanceof Map) {
|
|
90
|
+
ret._nsps.forEach(function(value, key) {
|
|
91
|
+
var namespace = ret._nsps.get(key);
|
|
92
|
+
if (namespace.__appdynamicsProbeAttached__) return;
|
|
93
|
+
attachProbeToNameSpace(namespace);
|
|
94
|
+
namespace.__appdynamicsProbeAttached__ = true;
|
|
95
|
+
});
|
|
96
|
+
} else {
|
|
97
|
+
Object.keys(ret.nsps).forEach(function(nameSpace) {
|
|
98
|
+
if (ret.nsps[nameSpace].__appdynamicsProbeAttached__) return;
|
|
99
|
+
attachProbeToNameSpace(ret.nsps[nameSpace]);
|
|
100
|
+
ret.nsps[nameSpace].__appdynamicsProbeAttached__ = true;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
80
103
|
|
|
81
104
|
function attachProbeToNameSpace(nameSpaceObj) {
|
|
82
105
|
proxy.before(nameSpaceObj, ['on', 'addListener'], function(obj, args) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
var path = require('path');
|
|
2
|
+
const fs = require('fs');
|
|
2
3
|
|
|
3
4
|
const MAX_ITEMS_PER_GROUP = 1024;
|
|
4
5
|
|
|
@@ -22,7 +23,21 @@ LibraryMetadata.prototype.getMetadata = function() {
|
|
|
22
23
|
LibraryMetadata.prototype._getJson = function()
|
|
23
24
|
{
|
|
24
25
|
var rootPath = require('path').resolve('./');
|
|
25
|
-
|
|
26
|
+
if(fs.existsSync(path.join(rootPath, './package-lock.json'))) {
|
|
27
|
+
return require(path.join(rootPath, './package-lock.json'));
|
|
28
|
+
} else if(fs.existsSync(path.join(rootPath, './yarn.lock'))) {
|
|
29
|
+
const lockfile = require('@yarnpkg/lockfile');
|
|
30
|
+
let file = fs.readFileSync(path.join(rootPath, './yarn.lock'), 'utf8');
|
|
31
|
+
let json = lockfile.parse(file);
|
|
32
|
+
let updatedDependencyJson = {};
|
|
33
|
+
for(let [key, val] of Object.entries(json.object)) {
|
|
34
|
+
let newkey = key.split("@")[0];
|
|
35
|
+
updatedDependencyJson[newkey] = val;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
let dependencies = { dependencies: updatedDependencyJson };
|
|
39
|
+
return dependencies;
|
|
40
|
+
}
|
|
26
41
|
};
|
|
27
42
|
|
|
28
43
|
LibraryMetadata.prototype._getMetadata = function() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appdynamics",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "23.5.0",
|
|
4
4
|
"description": "Performance Profiler and Monitor",
|
|
5
5
|
"author": "AppDynamics, Inc.",
|
|
6
6
|
"homepage": "https://www.appdynamics.com",
|
|
@@ -34,24 +34,24 @@
|
|
|
34
34
|
"n": "^6.7.0"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@opentelemetry/api": "~1.
|
|
38
|
-
"@opentelemetry/context-async-hooks": "~1.
|
|
39
|
-
"@opentelemetry/core": "~1.
|
|
40
|
-
"@opentelemetry/exporter-trace-otlp-proto": "~0.
|
|
41
|
-
"@opentelemetry/resources": "~1.
|
|
42
|
-
"@opentelemetry/sdk-trace-base": "~1.
|
|
43
|
-
"@opentelemetry/semantic-conventions": "~1.
|
|
37
|
+
"@opentelemetry/api": "~1.4.1",
|
|
38
|
+
"@opentelemetry/context-async-hooks": "~1.10.1",
|
|
39
|
+
"@opentelemetry/core": "~1.10.1",
|
|
40
|
+
"@opentelemetry/exporter-trace-otlp-proto": "~0.36.1",
|
|
41
|
+
"@opentelemetry/resources": "~1.10.1",
|
|
42
|
+
"@opentelemetry/sdk-trace-base": "~1.10.1",
|
|
43
|
+
"@opentelemetry/semantic-conventions": "~1.10.1",
|
|
44
|
+
"@yarnpkg/lockfile": "^1.1.0",
|
|
44
45
|
"cls-hooked": "4.2.2",
|
|
45
46
|
"https-proxy-agent": "^5.0.0",
|
|
46
47
|
"uuid": "^8.3.2",
|
|
47
48
|
"y18n": "^5.0.8",
|
|
48
|
-
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/
|
|
49
|
-
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/
|
|
50
|
-
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/
|
|
49
|
+
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/23.5.0.0/appdynamics-libagent-napi-node.tgz",
|
|
50
|
+
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/23.5.0.0/appdynamics-native-node.tgz",
|
|
51
|
+
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/23.5.0.0/appdynamics-protobuf-node.tgz"
|
|
51
52
|
},
|
|
52
53
|
"engines": {
|
|
53
|
-
"node": ">=12 <=
|
|
54
|
+
"node": ">=12 <=v19.*"
|
|
54
55
|
},
|
|
55
|
-
"engine-strict": true
|
|
56
|
-
"bundleDependencies": []
|
|
56
|
+
"engine-strict": true
|
|
57
57
|
}
|
package/packageBck.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appdynamics",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "23.5.0",
|
|
4
4
|
"description": "Performance Profiler and Monitor",
|
|
5
5
|
"author": "AppDynamics, Inc.",
|
|
6
6
|
"homepage": "https://www.appdynamics.com",
|
|
@@ -34,24 +34,24 @@
|
|
|
34
34
|
"n": "^6.7.0"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@opentelemetry/api": "~1.
|
|
38
|
-
"@opentelemetry/context-async-hooks": "~1.
|
|
39
|
-
"@opentelemetry/core": "~1.
|
|
40
|
-
"@opentelemetry/exporter-trace-otlp-proto": "~0.
|
|
41
|
-
"@opentelemetry/resources": "~1.
|
|
42
|
-
"@opentelemetry/sdk-trace-base": "~1.
|
|
43
|
-
"@opentelemetry/semantic-conventions": "~1.
|
|
37
|
+
"@opentelemetry/api": "~1.4.1",
|
|
38
|
+
"@opentelemetry/context-async-hooks": "~1.10.1",
|
|
39
|
+
"@opentelemetry/core": "~1.10.1",
|
|
40
|
+
"@opentelemetry/exporter-trace-otlp-proto": "~0.36.1",
|
|
41
|
+
"@opentelemetry/resources": "~1.10.1",
|
|
42
|
+
"@opentelemetry/sdk-trace-base": "~1.10.1",
|
|
43
|
+
"@opentelemetry/semantic-conventions": "~1.10.1",
|
|
44
|
+
"@yarnpkg/lockfile": "^1.1.0",
|
|
44
45
|
"cls-hooked": "4.2.2",
|
|
45
46
|
"https-proxy-agent": "^5.0.0",
|
|
46
47
|
"uuid": "^8.3.2",
|
|
47
48
|
"y18n": "^5.0.8",
|
|
48
|
-
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/
|
|
49
|
-
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/
|
|
50
|
-
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/
|
|
49
|
+
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/23.5.0.0/appdynamics-libagent-napi-node.tgz",
|
|
50
|
+
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/23.5.0.0/appdynamics-native-node.tgz",
|
|
51
|
+
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/23.5.0.0/appdynamics-protobuf-node.tgz"
|
|
51
52
|
},
|
|
52
53
|
"engines": {
|
|
53
|
-
"node": ">=12 <=
|
|
54
|
+
"node": ">=12 <=v19.*"
|
|
54
55
|
},
|
|
55
|
-
"engine-strict": true
|
|
56
|
-
"bundleDependencies": []
|
|
56
|
+
"engine-strict": true
|
|
57
57
|
}
|