Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemathinc
GitHub Repository: sagemathinc/cocalc
Path: blob/master/src/packages/backend/process-stats.worker.ts
6569 views
1
/*
2
* This file is part of CoCalc: Copyright © 2020–2026 Sagemath, Inc.
3
* License: MS-RSL – see LICENSE.md for details
4
*/
5
6
import { parentPort } from "node:worker_threads";
7
8
import { scanProcessesSync } from "./process-stats-scan";
9
import type {
10
WorkerScanError,
11
WorkerScanRequest,
12
WorkerScanStarted,
13
WorkerScanResult,
14
} from "./process-stats-worker-types";
15
16
const port = parentPort;
17
if (port == null) {
18
throw Error("process-stats.worker must run as a worker thread");
19
}
20
21
port.on("message", (request: WorkerScanRequest) => {
22
if (request?.type !== "scan") {
23
return;
24
}
25
try {
26
const startedAtMs = Date.now();
27
const started: WorkerScanStarted = {
28
type: "scanStarted",
29
requestId: request.requestId,
30
startedAtMs,
31
};
32
port.postMessage(started);
33
34
const result = scanProcessesSync({
35
timestamp: startedAtMs,
36
sampleKey: request.sampleKey,
37
procLimit: request.procLimit,
38
ticks: request.ticks,
39
pagesize: request.pagesize,
40
});
41
const response: WorkerScanResult = {
42
type: "scanResult",
43
requestId: request.requestId,
44
...result,
45
};
46
port.postMessage(response);
47
} catch (err) {
48
const response: WorkerScanError = {
49
type: "scanError",
50
requestId: request.requestId,
51
error: err instanceof Error ? (err.stack ?? err.message) : String(err),
52
};
53
port.postMessage(response);
54
}
55
});
56
57