appdynamics 24.4.1 → 24.9.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/LICENSE.txt +8 -354
- package/README.md +1 -0
- package/appdynamics_version.json +2 -2
- package/lib/core/agent.js +46 -11
- package/lib/core/context.js +130 -20
- package/lib/core/exception-handlers.js +2 -2
- package/lib/libagent/libagent-connector.js +27 -2
- package/lib/probes/http-entry-probe.js +25 -6
- package/lib/probes/http-probe.js +1 -7
- package/lib/probes/mssql-probe.js +5 -2
- package/lib/probes/redis-probe.js +75 -14
- package/lib/probes/tedious-probe.js +68 -0
- package/lib/probes/winston-probe.js +111 -15
- package/lib/secure_app/secure_app.js +10 -2
- package/package.json +6 -5
- package/packageBck.json +6 -5
|
@@ -11,31 +11,127 @@ WinstonProbe.prototype.attach = function (obj) {
|
|
|
11
11
|
if(obj.__appdynamicsProbeAttached__) return;
|
|
12
12
|
obj.__appdynamicsProbeAttached__ = true;
|
|
13
13
|
let self = this;
|
|
14
|
+
self.agent.on('destroy', function() {
|
|
15
|
+
if(obj.__appdynamicsProbeAttached__) {
|
|
16
|
+
delete obj.__appdynamicsProbeAttached__;
|
|
17
|
+
self.agent.proxy.release(obj.Logger.prototype.write);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
14
21
|
self.agent.proxy.before(
|
|
15
22
|
obj.Logger.prototype,
|
|
16
23
|
"write",
|
|
17
|
-
(obj, args) => this.
|
|
24
|
+
(obj, args) => this.handleLogWrite(obj, args)
|
|
18
25
|
);
|
|
19
26
|
};
|
|
20
27
|
|
|
21
|
-
WinstonProbe.prototype.
|
|
28
|
+
WinstonProbe.prototype.handleLogWrite = function (obj, args) {
|
|
22
29
|
let self = this;
|
|
23
30
|
|
|
24
|
-
if(!self.agent.libagentConnector.getNodeProperty("opentelemetry-logs-push-enabled")
|
|
25
|
-
|| !self.agent.OtelLogger) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
31
|
const threadId = self.agent.profiler.time().threadId;
|
|
30
32
|
const txn = self.agent.profiler.getTransaction(threadId);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
|
|
34
|
+
let txnBtId = txn && txn.btGuid && self.agent.libagentConnector.getBusinessTransactionId(txn.btGuid) > 0
|
|
35
|
+
? self.agent.libagentConnector.getBusinessTransactionId(txn.btGuid) : '';
|
|
36
|
+
|
|
37
|
+
if(self.agent.libagentConnector.getNodeProperty("opentelemetry-logs-push-enabled")
|
|
38
|
+
&& !self.agent.OtelLogger) {
|
|
39
|
+
self.emitToOtel(args, txn, txnBtId);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if(!txn) {
|
|
33
43
|
return;
|
|
34
44
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
45
|
+
|
|
46
|
+
if(process.env.appdynamics_log_metadata_enrichment || self.agent.libagentConnector.getNodeProperty("enable-log-metadata-enrichment")) {
|
|
47
|
+
return self.decorateMessage(args, txn, txnBtId);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
WinstonProbe.prototype.decorateMessage = function (args, txn, btId) {
|
|
52
|
+
let self = this;
|
|
53
|
+
|
|
54
|
+
for(let i = 0; i < args.length; i++) {
|
|
55
|
+
let logMessage = args[i];
|
|
56
|
+
|
|
57
|
+
let txnGuid = txn && txn.guid ? txn.guid : '';
|
|
58
|
+
if(self.hasMetadataDefined(logMessage)) {
|
|
59
|
+
self.updateMetadata(logMessage, txnGuid, btId);
|
|
60
|
+
} else {
|
|
61
|
+
var decorator = self.createDecorator(txnGuid, btId);
|
|
62
|
+
if(decorator) {
|
|
63
|
+
logMessage.message = decorator + ' ' + logMessage.message;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return args;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
WinstonProbe.prototype.hasMetadataDefined = function (logMessage) {
|
|
71
|
+
return logMessage.hasOwnProperty('appd_app_name')|| logMessage.hasOwnProperty('appd_tier_name')|| logMessage.hasOwnProperty('appd_node_name')
|
|
72
|
+
|| logMessage.hasOwnProperty('appd_request_guid') || logMessage.hasOwnProperty('appd_bt_id');
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
WinstonProbe.prototype.updateMetadata = function (logMessage, txnGuid, btId) {
|
|
76
|
+
let self = this;
|
|
77
|
+
let nodeId = self.agent.libagentConnector.getNodeId();
|
|
78
|
+
if(logMessage.hasOwnProperty('appd_app_name')) {
|
|
79
|
+
logMessage.appd_app_name = self.agent.opts.applicationName;
|
|
80
|
+
}
|
|
81
|
+
if(logMessage.hasOwnProperty('appd_tier_name')) {
|
|
82
|
+
logMessage.appd_tier_name = self.agent.opts.tierName;
|
|
83
|
+
}
|
|
84
|
+
if(logMessage.hasOwnProperty('appd_node_id')) {
|
|
85
|
+
logMessage.appd_node_id = nodeId;
|
|
86
|
+
}
|
|
87
|
+
if(logMessage.hasOwnProperty('appd_request_guid')) {
|
|
88
|
+
logMessage.appd_request_guid = txnGuid;
|
|
89
|
+
}
|
|
90
|
+
if(logMessage.hasOwnProperty('appd_bt_id')) {
|
|
91
|
+
logMessage.appd_bt_id = btId;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
WinstonProbe.prototype.createDecorator = function (txnGuid, btId) {
|
|
96
|
+
let self = this;
|
|
97
|
+
let decorator = '';
|
|
98
|
+
let decoratorFields = process.env.appdynamics_log_metadata_fields;
|
|
99
|
+
let opts = self.agent.opts;
|
|
100
|
+
let nodeId = self.agent.libagentConnector.getNodeId();
|
|
101
|
+
if(decoratorFields.includes('appd_app_name')) {
|
|
102
|
+
decorator = self.addDecoratorField('appd_app_name', opts.applicationName, decorator);
|
|
103
|
+
}
|
|
104
|
+
if(decoratorFields.includes('appd_tier_name')) {
|
|
105
|
+
decorator = self.addDecoratorField('appd_tier_name', opts.tierName, decorator);
|
|
106
|
+
}
|
|
107
|
+
if(decoratorFields.includes('appd_node_id')) {
|
|
108
|
+
decorator = self.addDecoratorField('appd_node_id', nodeId, decorator);
|
|
109
|
+
}
|
|
110
|
+
if(decoratorFields.includes('appd_request_guid')) {
|
|
111
|
+
decorator = self.addDecoratorField('appd_request_guid', txnGuid, decorator);
|
|
112
|
+
}
|
|
113
|
+
if(decoratorFields.includes('appd_bt_id')) {
|
|
114
|
+
decorator = self.addDecoratorField('appd_bt_id', btId, decorator);
|
|
115
|
+
}
|
|
116
|
+
// strip leading space
|
|
117
|
+
return decorator.slice(1);
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
WinstonProbe.prototype.addDecoratorField = function (name, value, decorator) {
|
|
121
|
+
decorator += ' ' + name + '=' + value;
|
|
122
|
+
return decorator;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
WinstonProbe.prototype.emitToOtel = function (args, txn, btId) {
|
|
126
|
+
var self = this;
|
|
127
|
+
|
|
128
|
+
for(let i = 0; i < args.length; i++) {
|
|
129
|
+
let logMessage = args[i];
|
|
130
|
+
|
|
131
|
+
this.agent.OtelLogger.emit(txn,
|
|
132
|
+
btId,
|
|
133
|
+
logMessage,
|
|
134
|
+
self.agent.libagentConnector.filterLogMessage(logMessage.message),
|
|
135
|
+
self.agent.libagentConnector.getNodeProperty("opentelemetry-allowed-log-level"));
|
|
136
|
+
}
|
|
41
137
|
};
|
|
@@ -21,6 +21,14 @@ function SecureApp() {
|
|
|
21
21
|
|
|
22
22
|
SecureApp.prototype.init = function(agent) {
|
|
23
23
|
var self = this;
|
|
24
|
+
|
|
25
|
+
if(agent.opts.certificateFile) {
|
|
26
|
+
try {
|
|
27
|
+
self.certificateFile = require('fs').readFileSync(agent.opts.certificateFile);
|
|
28
|
+
} catch (e) {
|
|
29
|
+
self.agent.logger.WARN('Secure App could not read certificate file');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
24
32
|
self.agent = agent;
|
|
25
33
|
self.libraryMetadata = new LibraryMetadata(agent);
|
|
26
34
|
if(!process.env.SKIP_AUTH_FOR_TESTS) {
|
|
@@ -115,8 +123,8 @@ SecureApp.prototype._requestOptions = function(path, length, type) {
|
|
|
115
123
|
'Content-Type': type
|
|
116
124
|
};
|
|
117
125
|
|
|
118
|
-
if (self.
|
|
119
|
-
requestOptions['ca'] = self.
|
|
126
|
+
if (self.certificateFile) {
|
|
127
|
+
requestOptions['ca'] = self.certificateFile;
|
|
120
128
|
}
|
|
121
129
|
|
|
122
130
|
if(process.env.CONTROLLER_HOST_TEST) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appdynamics",
|
|
3
|
-
"version": "24.
|
|
3
|
+
"version": "24.9.0",
|
|
4
4
|
"description": "Performance Profiler and Monitor",
|
|
5
5
|
"author": "AppDynamics, Inc.",
|
|
6
6
|
"homepage": "https://www.appdynamics.com",
|
|
@@ -46,19 +46,20 @@
|
|
|
46
46
|
"@opentelemetry/sdk-trace-base": "~1.10.1",
|
|
47
47
|
"@opentelemetry/semantic-conventions": "~1.10.1",
|
|
48
48
|
"@yarnpkg/lockfile": "^1.1.0",
|
|
49
|
+
"body-parser": "^1.20.3",
|
|
49
50
|
"cls-hooked": "4.2.2",
|
|
50
51
|
"https-proxy-agent": "^5.0.1",
|
|
51
52
|
"uuid": "^8.3.2",
|
|
52
53
|
"y18n": "^5.0.8",
|
|
53
|
-
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
54
|
-
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
55
|
-
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
54
|
+
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/24.9.0.0/appdynamics-libagent-napi-node.tgz",
|
|
55
|
+
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/24.9.0.0/appdynamics-native-node.tgz",
|
|
56
|
+
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/24.9.0.0/appdynamics-protobuf-node.tgz"
|
|
56
57
|
},
|
|
57
58
|
"overrides": {
|
|
58
59
|
"semver": "7.5.4"
|
|
59
60
|
},
|
|
60
61
|
"engines": {
|
|
61
|
-
"node": ">=12 <=
|
|
62
|
+
"node": ">=12 <=v22.*"
|
|
62
63
|
},
|
|
63
64
|
"engine-strict": true
|
|
64
65
|
}
|
package/packageBck.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appdynamics",
|
|
3
|
-
"version": "24.
|
|
3
|
+
"version": "24.9.0",
|
|
4
4
|
"description": "Performance Profiler and Monitor",
|
|
5
5
|
"author": "AppDynamics, Inc.",
|
|
6
6
|
"homepage": "https://www.appdynamics.com",
|
|
@@ -46,19 +46,20 @@
|
|
|
46
46
|
"@opentelemetry/sdk-trace-base": "~1.10.1",
|
|
47
47
|
"@opentelemetry/semantic-conventions": "~1.10.1",
|
|
48
48
|
"@yarnpkg/lockfile": "^1.1.0",
|
|
49
|
+
"body-parser": "^1.20.3",
|
|
49
50
|
"cls-hooked": "4.2.2",
|
|
50
51
|
"https-proxy-agent": "^5.0.1",
|
|
51
52
|
"uuid": "^8.3.2",
|
|
52
53
|
"y18n": "^5.0.8",
|
|
53
|
-
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
54
|
-
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
55
|
-
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
54
|
+
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/24.9.0.0/appdynamics-libagent-napi-node.tgz",
|
|
55
|
+
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/24.9.0.0/appdynamics-native-node.tgz",
|
|
56
|
+
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/24.9.0.0/appdynamics-protobuf-node.tgz"
|
|
56
57
|
},
|
|
57
58
|
"overrides": {
|
|
58
59
|
"semver": "7.5.4"
|
|
59
60
|
},
|
|
60
61
|
"engines": {
|
|
61
|
-
"node": ">=12 <=
|
|
62
|
+
"node": ">=12 <=v22.*"
|
|
62
63
|
},
|
|
63
64
|
"engine-strict": true
|
|
64
65
|
}
|