@prairielearn/node-metrics 2.0.10 → 2.0.11
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/CHANGELOG.md +6 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +1 -1
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ async function emit(options) {
|
|
|
13
13
|
const elapsedTime = process.hrtime.bigint() - time;
|
|
14
14
|
// This conversion should be safe, as `Number.MAX_SAFE_INTEGER` microseconds
|
|
15
15
|
// corresponds to about 258 years.
|
|
16
|
-
const elapsedMicroseconds = Number(elapsedTime /
|
|
16
|
+
const elapsedMicroseconds = Number(elapsedTime / 1000n);
|
|
17
17
|
const userCpuPercent = (100 * elapsedCpuUsage.user) / elapsedMicroseconds;
|
|
18
18
|
const systemCpuPercent = (100 * elapsedCpuUsage.system) / elapsedMicroseconds;
|
|
19
19
|
const totalCpuPercent = userCpuPercent + systemCpuPercent;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EACL,UAAU,GAGX,MAAM,4BAA4B,CAAC;AACpC,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,MAAM,iBAAiB,GAAG,SAAS,EAAE,CAAC;AAEtC,IAAI,eAAe,GAA2B,IAAI,CAAC;AACnD,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;AAClC,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AAUnC,KAAK,UAAU,IAAI,CAAC,OAA2B;IAC7C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAE1C,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnD,gCAAgC;QAChC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;QACnD,4EAA4E;QAC5E,kCAAkC;QAClC,MAAM,mBAAmB,GAAG,MAAM,CAAC,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { setTimeout } from 'node:timers/promises';\n\nimport {\n CloudWatch,\n type CloudWatchClientConfig,\n type Dimension,\n} from '@aws-sdk/client-cloudwatch';\nimport loopbench from 'loopbench';\n\nconst loopbenchInstance = loopbench();\n\nlet abortController: AbortController | null = null;\nlet cpuUsage = process.cpuUsage();\nlet time = process.hrtime.bigint();\n\ninterface NodeMetricsOptions {\n awsConfig: CloudWatchClientConfig;\n intervalSeconds: number;\n namespace: string;\n dimensions: Dimension[];\n onError: (err: Error) => void;\n}\n\nasync function emit(options: NodeMetricsOptions) {\n try {\n const memoryStats = process.memoryUsage();\n\n const elapsedCpuUsage = process.cpuUsage(cpuUsage);\n // This delta is in nanoseconds.\n const elapsedTime = process.hrtime.bigint() - time;\n // This conversion should be safe, as `Number.MAX_SAFE_INTEGER` microseconds\n // corresponds to about 258 years.\n const elapsedMicroseconds = Number(elapsedTime / 1000n);\n\n const userCpuPercent = (100 * elapsedCpuUsage.user) / elapsedMicroseconds;\n const systemCpuPercent = (100 * elapsedCpuUsage.system) / elapsedMicroseconds;\n const totalCpuPercent = userCpuPercent + systemCpuPercent;\n\n cpuUsage = process.cpuUsage();\n time = process.hrtime.bigint();\n\n const metrics = [\n {\n MetricName: 'NodeEventLoopDelay',\n Unit: 'Milliseconds',\n Value: loopbenchInstance.delay,\n },\n {\n MetricName: 'NodeMemoryRss',\n Unit: 'Bytes',\n Value: memoryStats.rss,\n },\n {\n MetricName: 'NodeMemoryHeapTotal',\n Unit: 'Bytes',\n Value: memoryStats.heapTotal,\n },\n {\n MetricName: 'NodeMemoryHeapUsed',\n Unit: 'Bytes',\n Value: memoryStats.heapUsed,\n },\n {\n MetricName: 'NodeMemoryExternal',\n Unit: 'Bytes',\n Value: memoryStats.external,\n },\n {\n MetricName: 'NodeCpuUser',\n Unit: 'Percent',\n Value: userCpuPercent,\n },\n {\n MetricName: 'NodeCpuSystem',\n Unit: 'Percent',\n Value: systemCpuPercent,\n },\n {\n MetricName: 'NodeCpuTotal',\n Unit: 'Percent',\n Value: totalCpuPercent,\n },\n ] as const;\n\n // We must use a config passed in from outside this package.\n // eslint-disable-next-line @prairielearn/aws-client-shared-config\n const cloudwatch = new CloudWatch(options.awsConfig);\n await cloudwatch.putMetricData({\n Namespace: options.namespace,\n MetricData: metrics.map((m) => ({\n ...m,\n StorageResolution: 1,\n Timestamp: new Date(),\n Dimensions: options.dimensions,\n })),\n });\n } catch (err: any) {\n options.onError(err);\n }\n}\n\nasync function emitLoop({\n signal,\n ...options\n}: NodeMetricsOptions & {\n signal: AbortSignal;\n}) {\n try {\n while (!signal.aborted) {\n await setTimeout(options.intervalSeconds * 1000, null, { signal, ref: false });\n await emit(options);\n }\n } catch (err: any) {\n if (err.name === 'AbortError') return;\n throw err;\n }\n}\n\nexport function start(options: NodeMetricsOptions) {\n abortController = new AbortController();\n\n // Initialize these so that we can compute a valid delta on the first run of `emit()`.\n cpuUsage = process.cpuUsage();\n time = process.hrtime.bigint();\n\n (() => emitLoop({ signal: abortController.signal, ...options }))();\n}\n\nexport function stop() {\n abortController?.abort();\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prairielearn/node-metrics",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.11",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
"dev": "tsc --watch --preserveWatchOutput"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@aws-sdk/client-cloudwatch": "^3.
|
|
16
|
+
"@aws-sdk/client-cloudwatch": "^3.922.0",
|
|
17
17
|
"loopbench": "^2.0.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@prairielearn/tsconfig": "^0.0.0",
|
|
21
21
|
"@types/loopbench": "^1.2.4",
|
|
22
|
-
"@types/node": "^22.18.
|
|
22
|
+
"@types/node": "^22.18.13",
|
|
23
23
|
"typescript": "^5.9.3"
|
|
24
24
|
}
|
|
25
25
|
}
|
package/src/index.ts
CHANGED
|
@@ -30,7 +30,7 @@ async function emit(options: NodeMetricsOptions) {
|
|
|
30
30
|
const elapsedTime = process.hrtime.bigint() - time;
|
|
31
31
|
// This conversion should be safe, as `Number.MAX_SAFE_INTEGER` microseconds
|
|
32
32
|
// corresponds to about 258 years.
|
|
33
|
-
const elapsedMicroseconds = Number(elapsedTime /
|
|
33
|
+
const elapsedMicroseconds = Number(elapsedTime / 1000n);
|
|
34
34
|
|
|
35
35
|
const userCpuPercent = (100 * elapsedCpuUsage.user) / elapsedMicroseconds;
|
|
36
36
|
const systemCpuPercent = (100 * elapsedCpuUsage.system) / elapsedMicroseconds;
|