appdynamics 24.8.2 → 24.10.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/appdynamics_version.json +3 -3
- package/lib/core/agent.js +33 -10
- package/lib/core/opentelemetry-tracer.js +17 -6
- package/lib/libagent/libagent-connector.js +21 -2
- package/lib/probes/apollo-entry-probe.js +95 -41
- package/lib/probes/http-probe.js +14 -2
- package/lib/secure_app/secure_app.js +10 -2
- package/package.json +6 -6
- package/packageBck.json +6 -6
package/appdynamics_version.json
CHANGED
package/lib/core/agent.js
CHANGED
|
@@ -184,10 +184,35 @@ Agent.prototype.setKubernetesConfig = function() {
|
|
|
184
184
|
}
|
|
185
185
|
};
|
|
186
186
|
|
|
187
|
+
Agent.prototype.isMainThread = function () {
|
|
188
|
+
const { isMainThread } = require('worker_threads');
|
|
189
|
+
return isMainThread;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
function setMetadataFile(agent, instrumentedStatus) {
|
|
193
|
+
const filePath = process.env.APPDYNAMICS_AGENT_DIR || '/tmp/appd';
|
|
194
|
+
const fileName = path.join(filePath, 'app-metadata.json');
|
|
195
|
+
|
|
196
|
+
try {
|
|
197
|
+
fs.accessSync(filePath, fs.constants.W_OK);
|
|
198
|
+
const content = JSON.stringify({ instrumented: instrumentedStatus });
|
|
199
|
+
fs.writeFileSync(fileName, content);
|
|
200
|
+
} catch (err) {
|
|
201
|
+
agent.logger.error(
|
|
202
|
+
`Unable to write the file app-metadata.json to path ${filePath} \n`,
|
|
203
|
+
err
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
187
208
|
/* istanbul ignore next -- requires too much stubbing and mocking to unit test */
|
|
188
209
|
Agent.prototype.init = function (opts) {
|
|
189
210
|
var self = this;
|
|
190
211
|
|
|
212
|
+
if(!self.isMainThread()) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
191
216
|
try {
|
|
192
217
|
if (self.initialized)
|
|
193
218
|
return;
|
|
@@ -214,6 +239,9 @@ Agent.prototype.init = function (opts) {
|
|
|
214
239
|
self.tracer = self.TracerProvider.getTracer('appdynamics-tracer');
|
|
215
240
|
}
|
|
216
241
|
|
|
242
|
+
|
|
243
|
+
self.libagentConnector.subscribeToIsEnabled((isEnabled) => setMetadataFile(self, isEnabled));
|
|
244
|
+
|
|
217
245
|
self.precompiled = opts.precompiled === undefined || opts.precompiled;
|
|
218
246
|
|
|
219
247
|
if (self.opts.excludeAgentFromCallGraph === undefined) {
|
|
@@ -261,15 +289,6 @@ Agent.prototype.init = function (opts) {
|
|
|
261
289
|
const filePath = path.join(require.resolve('appdynamics'), '..');
|
|
262
290
|
process.env.APPDYNAMICS_AGENT_DIR = filePath;
|
|
263
291
|
|
|
264
|
-
try {
|
|
265
|
-
fs.accessSync(filePath, fs.constants.W_OK);
|
|
266
|
-
const fileName = `${filePath}/app-metadata.json`;
|
|
267
|
-
const content = JSON.stringify({ "nodeName": nodeName });
|
|
268
|
-
fs.writeFileSync(fileName, content);
|
|
269
|
-
} catch (err) {
|
|
270
|
-
self.logger.error(`unable to write the file app-metadata.json file to path ${filePath} \n`, err);
|
|
271
|
-
}
|
|
272
|
-
|
|
273
292
|
self.tmpDir = Agent.computeTmpDir(self.rootTmpDir,
|
|
274
293
|
self.opts.controllerHostName,
|
|
275
294
|
self.opts.controllerPort,
|
|
@@ -321,7 +340,7 @@ Agent.prototype.init = function (opts) {
|
|
|
321
340
|
self.cpuProfiler.init();
|
|
322
341
|
self.heapProfiler.init();
|
|
323
342
|
|
|
324
|
-
if(self.opts.secureAppEnabled) {
|
|
343
|
+
if(self.opts.secureAppEnabled || process.env.APPDYNAMICS_SECURE_APP_ENABLED) {
|
|
325
344
|
self.secureApp.init(this);
|
|
326
345
|
}
|
|
327
346
|
|
|
@@ -712,3 +731,7 @@ var AppDynamics = function () {
|
|
|
712
731
|
AppDynamics.Agent = Agent;
|
|
713
732
|
|
|
714
733
|
exports = module.exports = new AppDynamics();
|
|
734
|
+
|
|
735
|
+
// export for testing
|
|
736
|
+
exports._setMetadataFile = setMetadataFile;
|
|
737
|
+
|
|
@@ -6,7 +6,7 @@ const { BatchSpanProcessor, BasicTracerProvider } = require('@opentelemetry/sdk-
|
|
|
6
6
|
const { OTLPTraceExporter } = require("@opentelemetry/exporter-trace-otlp-proto");
|
|
7
7
|
const { AsyncHooksContextManager, AsyncLocalStorageContextManager } = require("@opentelemetry/context-async-hooks");
|
|
8
8
|
const { ParentBasedSampler, AlwaysOnSampler, TraceIdRatioBasedSampler } = require("@opentelemetry/core");
|
|
9
|
-
const { Resource } = require('@opentelemetry/resources');
|
|
9
|
+
const { Resource, envDetectorSync, processDetectorSync, hostDetectorSync } = require('@opentelemetry/resources');
|
|
10
10
|
const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
|
|
11
11
|
const AppdynamicsSpanExporter = require('./appdynamics_span_exporter').AppdynamicsSpanExporter;
|
|
12
12
|
const url = require('url');
|
|
@@ -33,15 +33,26 @@ function getSamplerFromConfig(config) {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
TracerProvider.prototype.register = function(config) {
|
|
36
|
+
const envResource = envDetectorSync.detect();
|
|
37
|
+
const processResource = processDetectorSync.detect();
|
|
38
|
+
const hostResource = hostDetectorSync.detect();
|
|
39
|
+
|
|
40
|
+
const configResourceAttributes = {
|
|
41
|
+
[SemanticResourceAttributes.SERVICE_NAME]: config.tierName,
|
|
42
|
+
[SemanticResourceAttributes.SERVICE_NAMESPACE]: config.applicationName,
|
|
43
|
+
[SemanticResourceAttributes.CONTAINER_ID]: ""
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const mergedResource = new Resource(configResourceAttributes)
|
|
47
|
+
.merge(envResource)
|
|
48
|
+
.merge(processResource)
|
|
49
|
+
.merge(hostResource);
|
|
50
|
+
|
|
36
51
|
const provider = new BasicTracerProvider({
|
|
37
52
|
sampler: new ParentBasedSampler({
|
|
38
53
|
root: getSamplerFromConfig(config.openTelemetry)
|
|
39
54
|
}),
|
|
40
|
-
resource:
|
|
41
|
-
[SemanticResourceAttributes.SERVICE_NAME]: config.tierName,
|
|
42
|
-
[SemanticResourceAttributes.SERVICE_NAMESPACE]: config.applicationName,
|
|
43
|
-
[SemanticResourceAttributes.CONTAINER_ID]: ""
|
|
44
|
-
}),
|
|
55
|
+
resource: mergedResource,
|
|
45
56
|
});
|
|
46
57
|
|
|
47
58
|
// default collector configuration, can be overridden from agent config
|
|
@@ -98,6 +98,18 @@ LibagentConnector.prototype.initLogger = function () {
|
|
|
98
98
|
self.libagent = new LibAgent(self.agent);
|
|
99
99
|
};
|
|
100
100
|
|
|
101
|
+
LibagentConnector.prototype.setIsEnabled = function (value) {
|
|
102
|
+
if (this.isEnabled !== value) {
|
|
103
|
+
this.isEnabled = value;
|
|
104
|
+
this.emit('isEnabledChanged', value);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
LibagentConnector.prototype.getIsEnabled = function () {
|
|
110
|
+
return this.isEnabled;
|
|
111
|
+
};
|
|
112
|
+
|
|
101
113
|
LibagentConnector.prototype.init = function () {
|
|
102
114
|
var self = this;
|
|
103
115
|
// initialize protobuf
|
|
@@ -132,13 +144,16 @@ LibagentConnector.prototype.init = function () {
|
|
|
132
144
|
function () {
|
|
133
145
|
// exception handler: libagent needs no teardown
|
|
134
146
|
});
|
|
147
|
+
|
|
135
148
|
self.libagent.delegate.on('initialConfigUpdateDone', function () {
|
|
136
|
-
self.
|
|
149
|
+
self.setIsEnabled(true);
|
|
137
150
|
self.initializeTimers();
|
|
138
151
|
});
|
|
152
|
+
|
|
139
153
|
self.libagent.delegate.on('agentDisabled', function () {
|
|
140
|
-
self.
|
|
154
|
+
self.setIsEnabled(false);
|
|
141
155
|
});
|
|
156
|
+
|
|
142
157
|
self.libagent.delegate.on('agentReset', function () {
|
|
143
158
|
self.agent.metricsManager.init();
|
|
144
159
|
self.agent.processStats.init();
|
|
@@ -641,3 +656,7 @@ LibagentConnector.prototype.getContainerId = function () {
|
|
|
641
656
|
var self = this;
|
|
642
657
|
return self.libagent.getContainerId();
|
|
643
658
|
};
|
|
659
|
+
|
|
660
|
+
LibagentConnector.prototype.subscribeToIsEnabled = function (callback) {
|
|
661
|
+
this.on('isEnabledChanged', callback);
|
|
662
|
+
};
|
|
@@ -22,7 +22,22 @@ ApolloEntryProbe.prototype.attach = function (obj, moduleName) {
|
|
|
22
22
|
"createServerInfo",
|
|
23
23
|
(args) => this.addLifeCycleHooks(args)
|
|
24
24
|
);
|
|
25
|
-
} else {
|
|
25
|
+
} else if (moduleName === '@apollo/server') {
|
|
26
|
+
|
|
27
|
+
const originalObject = obj;
|
|
28
|
+
const overriddenObject = {};
|
|
29
|
+
|
|
30
|
+
overriddenObject.ApolloServer = proxyApolloServer(self, originalObject);
|
|
31
|
+
return overriddenObject;
|
|
32
|
+
|
|
33
|
+
} else if(moduleName === '@apollo/server/express4') {
|
|
34
|
+
const originalObject = obj;
|
|
35
|
+
const overriddenObject = {};
|
|
36
|
+
|
|
37
|
+
overriddenObject.expressMiddleware = proxyExpressMiddleware(self, originalObject);
|
|
38
|
+
overriddenObject.__proto__ = originalObject;
|
|
39
|
+
return overriddenObject;
|
|
40
|
+
} else if(moduleName === '@apollo/server/standalone'){
|
|
26
41
|
const originalObject = obj;
|
|
27
42
|
const overriddenObject = {};
|
|
28
43
|
|
|
@@ -80,48 +95,87 @@ ApolloEntryProbe.prototype.addLifeCycleHooks = function (obj) {
|
|
|
80
95
|
];
|
|
81
96
|
};
|
|
82
97
|
|
|
83
|
-
function
|
|
98
|
+
function appDynamicsApolloServerPlugin(self) {
|
|
99
|
+
const plugin = {
|
|
100
|
+
async requestDidStart() {
|
|
101
|
+
return {
|
|
102
|
+
didResolveOperation(requestContext) {
|
|
103
|
+
if(!requestContext.contextValue.gqlReq) {
|
|
104
|
+
requestContext.contextValue.gqlReq = {};
|
|
105
|
+
requestContext.contextValue.gqlRes = {};
|
|
106
|
+
}
|
|
107
|
+
requestContext.contextValue.gqlReq.graphqlop = requestContext.operationName;
|
|
108
|
+
requestContext.contextValue.gqlReq.transactionStarted = true;
|
|
109
|
+
|
|
110
|
+
HttpCommon.startTransactionHandler(
|
|
111
|
+
requestContext.contextValue.gqlReq,
|
|
112
|
+
requestContext.contextValue.gqlRes,
|
|
113
|
+
self.agent
|
|
114
|
+
);
|
|
115
|
+
},
|
|
116
|
+
didEncounterErrors(requestContext) {
|
|
117
|
+
if(!requestContext.contextValue.gqlReq) {
|
|
118
|
+
requestContext.contextValue.gqlReq = {};
|
|
119
|
+
requestContext.contextValue.gqlRes = {};
|
|
120
|
+
}
|
|
121
|
+
requestContext.contextValue.gqlRes.error = requestContext.errors[0];
|
|
122
|
+
if(requestContext.contextValue.gqlReq.transactionStarted) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
HttpCommon.startTransactionHandler(
|
|
126
|
+
requestContext.contextValue.gqlReq,
|
|
127
|
+
requestContext.contextValue.gqlRes,
|
|
128
|
+
self.agent
|
|
129
|
+
);
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
return plugin;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function appDymanicsApolloServerOverriddenOptions(options) {
|
|
138
|
+
const overriddenOptions = options || {};
|
|
139
|
+
|
|
140
|
+
const context = options ? options.context : undefined;
|
|
141
|
+
const overriddenContext = async function (contextParam) {
|
|
142
|
+
const contextValue = context ? await context(contextParam) : {};
|
|
143
|
+
contextParam.req.url = contextParam.req.baseUrl; // For Apollo Server 4
|
|
144
|
+
contextValue.gqlReq = contextParam.req;
|
|
145
|
+
contextValue.gqlRes = contextParam.res;
|
|
146
|
+
return contextValue;
|
|
147
|
+
};
|
|
148
|
+
overriddenOptions.context = overriddenContext;
|
|
149
|
+
return overriddenOptions;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function proxyApolloServer(self, originalObject) {
|
|
153
|
+
const ApolloServer = originalObject.ApolloServer;
|
|
84
154
|
|
|
155
|
+
// Define ApolloServerProxy class
|
|
156
|
+
class ApolloServerProxy extends ApolloServer {
|
|
157
|
+
constructor(config) {
|
|
158
|
+
// Call the ApolloServer constructor
|
|
159
|
+
super(config);
|
|
160
|
+
|
|
161
|
+
// Add the plugin to the plugins array
|
|
162
|
+
this.addPlugin(appDynamicsApolloServerPlugin(self));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return ApolloServerProxy;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function proxyStartStandaloneServer(self, originalObject) {
|
|
85
170
|
return async function startStandaloneServerProxy(server, options) {
|
|
86
|
-
const overriddenOptions = options
|
|
87
|
-
|
|
88
|
-
const context = options ? options.context : undefined;
|
|
89
|
-
const overriddenContext = async function (contextParam) {
|
|
90
|
-
const contextValue = context ? await context(contextParam) : {};
|
|
91
|
-
contextValue.gqlReq = contextParam.req;
|
|
92
|
-
contextValue.gqlRes = contextParam.res;
|
|
93
|
-
return contextValue;
|
|
94
|
-
};
|
|
95
|
-
overriddenOptions.context = overriddenContext;
|
|
96
|
-
|
|
97
|
-
const plugin = {
|
|
98
|
-
async requestDidStart() {
|
|
99
|
-
return {
|
|
100
|
-
didResolveOperation(requestContext) {
|
|
101
|
-
requestContext.contextValue.gqlReq.graphqlop = requestContext.operationName;
|
|
102
|
-
requestContext.contextValue.gqlReq.transactionStarted = true;
|
|
103
|
-
|
|
104
|
-
HttpCommon.startTransactionHandler(
|
|
105
|
-
requestContext.contextValue.gqlReq,
|
|
106
|
-
requestContext.contextValue.gqlRes,
|
|
107
|
-
self.agent
|
|
108
|
-
);
|
|
109
|
-
},
|
|
110
|
-
didEncounterErrors(requestContext) {
|
|
111
|
-
requestContext.contextValue.gqlRes.error = requestContext.errors[0];
|
|
112
|
-
if(requestContext.contextValue.gqlReq.transactionStarted) {
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
HttpCommon.startTransactionHandler(
|
|
116
|
-
requestContext.contextValue.gqlReq,
|
|
117
|
-
requestContext.contextValue.gqlRes,
|
|
118
|
-
self.agent
|
|
119
|
-
);
|
|
120
|
-
},
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
server.addPlugin(plugin);
|
|
171
|
+
const overriddenOptions = appDymanicsApolloServerOverriddenOptions(options);
|
|
125
172
|
return await originalObject.startStandaloneServer(server, overriddenOptions);
|
|
126
173
|
};
|
|
127
174
|
}
|
|
175
|
+
|
|
176
|
+
function proxyExpressMiddleware(self, originalObject) {
|
|
177
|
+
return function expressMiddlewareProxy(server, options) {
|
|
178
|
+
const overriddenOptions = appDymanicsApolloServerOverriddenOptions(options);
|
|
179
|
+
return originalObject.expressMiddleware(server, overriddenOptions);
|
|
180
|
+
};
|
|
181
|
+
}
|
package/lib/probes/http-probe.js
CHANGED
|
@@ -9,7 +9,7 @@ var HttpEntryProbe = require('./http-entry-probe').HttpEntryProbe;
|
|
|
9
9
|
var HttpExitProbe = require('./http-exit-probe').HttpExitProbe;
|
|
10
10
|
var ApolloEntryProbe = require('./apollo-entry-probe').ApolloEntryProbe;
|
|
11
11
|
|
|
12
|
-
const apolloPackages = ['apollo-server', '@apollo/server/standalone'];
|
|
12
|
+
const apolloPackages = ['apollo-server', '@apollo/server/standalone', '@apollo/server/express4', '@apollo/server'];
|
|
13
13
|
|
|
14
14
|
function HttpProbe(agent) {
|
|
15
15
|
this.agent = agent;
|
|
@@ -58,9 +58,21 @@ HttpProbe.prototype.attach = function (obj, moduleName) {
|
|
|
58
58
|
}
|
|
59
59
|
} else if (moduleName === '@apollo/server/standalone') {
|
|
60
60
|
if(self.agent.opts.enableGraphQL) {
|
|
61
|
+
obj.__appdynamicsProbeAttached__ = false;
|
|
61
62
|
return this.apolloEntryProbe.attach(obj, moduleName);
|
|
62
63
|
}
|
|
63
|
-
} else if
|
|
64
|
+
} else if(moduleName === '@apollo/server/express4') {
|
|
65
|
+
if(self.agent.opts.enableGraphQL) {
|
|
66
|
+
obj.__appdynamicsProbeAttached__ = false;
|
|
67
|
+
return this.apolloEntryProbe.attach(obj, moduleName);
|
|
68
|
+
}
|
|
69
|
+
} else if(moduleName === '@apollo/server') {
|
|
70
|
+
if(self.agent.opts.enableGraphQL) {
|
|
71
|
+
obj.__appdynamicsProbeAttached__ = false;
|
|
72
|
+
return this.apolloEntryProbe.attach(obj, moduleName);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else if (moduleName.includes('graphql-http')) {
|
|
64
76
|
if(self.agent.opts.enableGraphQL) {
|
|
65
77
|
this.entryProbe.enableGraphQLHttp(obj);
|
|
66
78
|
}
|
|
@@ -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.10.0",
|
|
4
4
|
"description": "Performance Profiler and Monitor",
|
|
5
5
|
"author": "AppDynamics, Inc.",
|
|
6
6
|
"homepage": "https://www.appdynamics.com",
|
|
@@ -46,20 +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.
|
|
49
|
+
"body-parser": "^1.20.3",
|
|
50
50
|
"cls-hooked": "4.2.2",
|
|
51
51
|
"https-proxy-agent": "^5.0.1",
|
|
52
52
|
"uuid": "^8.3.2",
|
|
53
53
|
"y18n": "^5.0.8",
|
|
54
|
-
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
55
|
-
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
56
|
-
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
54
|
+
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/24.10.0.0/appdynamics-libagent-napi-node.tgz",
|
|
55
|
+
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/24.10.0.0/appdynamics-native-node.tgz",
|
|
56
|
+
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/24.10.0.0/appdynamics-protobuf-node.tgz"
|
|
57
57
|
},
|
|
58
58
|
"overrides": {
|
|
59
59
|
"semver": "7.5.4"
|
|
60
60
|
},
|
|
61
61
|
"engines": {
|
|
62
|
-
"node": ">=12 <=
|
|
62
|
+
"node": ">=12 <=v22.*"
|
|
63
63
|
},
|
|
64
64
|
"engine-strict": true
|
|
65
65
|
}
|
package/packageBck.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appdynamics",
|
|
3
|
-
"version": "24.
|
|
3
|
+
"version": "24.10.0",
|
|
4
4
|
"description": "Performance Profiler and Monitor",
|
|
5
5
|
"author": "AppDynamics, Inc.",
|
|
6
6
|
"homepage": "https://www.appdynamics.com",
|
|
@@ -46,20 +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.
|
|
49
|
+
"body-parser": "^1.20.3",
|
|
50
50
|
"cls-hooked": "4.2.2",
|
|
51
51
|
"https-proxy-agent": "^5.0.1",
|
|
52
52
|
"uuid": "^8.3.2",
|
|
53
53
|
"y18n": "^5.0.8",
|
|
54
|
-
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
55
|
-
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
56
|
-
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/24.
|
|
54
|
+
"appdynamics-libagent-napi": "https://cdn.appdynamics.com/packages/nodejs/24.10.0.0/appdynamics-libagent-napi-node.tgz",
|
|
55
|
+
"appdynamics-native": "https://cdn.appdynamics.com/packages/nodejs/24.10.0.0/appdynamics-native-node.tgz",
|
|
56
|
+
"appdynamics-protobuf": "https://cdn.appdynamics.com/packages/nodejs/24.10.0.0/appdynamics-protobuf-node.tgz"
|
|
57
57
|
},
|
|
58
58
|
"overrides": {
|
|
59
59
|
"semver": "7.5.4"
|
|
60
60
|
},
|
|
61
61
|
"engines": {
|
|
62
|
-
"node": ">=12 <=
|
|
62
|
+
"node": ">=12 <=v22.*"
|
|
63
63
|
},
|
|
64
64
|
"engine-strict": true
|
|
65
65
|
}
|