rivetkit 2.3.0-rc.8 → 2.3.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/dist/browser/client.d.ts +481 -74
- package/dist/browser/client.js +174 -148
- package/dist/browser/client.js.map +1 -1
- package/dist/browser/inspector/client.js +47 -18
- package/dist/browser/inspector/client.js.map +1 -1
- package/dist/tsup/actor/errors.cjs +2 -2
- package/dist/tsup/actor/errors.d.cts +1 -1
- package/dist/tsup/actor/errors.d.ts +1 -1
- package/dist/tsup/actor/errors.js +1 -1
- package/dist/tsup/agent-os/index.cjs +2160 -2086
- package/dist/tsup/agent-os/index.cjs.map +1 -1
- package/dist/tsup/agent-os/index.d.cts +479 -73
- package/dist/tsup/agent-os/index.d.ts +479 -73
- package/dist/tsup/agent-os/index.js +2160 -2086
- package/dist/tsup/agent-os/index.js.map +1 -1
- package/dist/tsup/{chunk-KY3CERZR.js → chunk-2OTRTA3J.js} +7 -21
- package/dist/tsup/chunk-2OTRTA3J.js.map +1 -0
- package/dist/tsup/{chunk-HGW6PBWR.cjs → chunk-3677IIOV.cjs} +11 -25
- package/dist/tsup/chunk-3677IIOV.cjs.map +1 -0
- package/dist/tsup/{chunk-OT7FF6GB.cjs → chunk-47HHIEXH.cjs} +24 -9
- package/dist/tsup/chunk-47HHIEXH.cjs.map +1 -0
- package/dist/tsup/{chunk-EMFKMVJR.js → chunk-4JDSFJS5.js} +69 -58
- package/dist/tsup/chunk-4JDSFJS5.js.map +1 -0
- package/dist/tsup/{chunk-7HLFSAJP.cjs → chunk-7QKCIVAY.cjs} +225 -214
- package/dist/tsup/chunk-7QKCIVAY.cjs.map +1 -0
- package/dist/tsup/{chunk-AWTPTUQ7.cjs → chunk-B6VUNZUD.cjs} +10 -10
- package/dist/tsup/{chunk-AWTPTUQ7.cjs.map → chunk-B6VUNZUD.cjs.map} +1 -1
- package/dist/tsup/{chunk-D3T3ZBSY.js → chunk-BEI24WTI.js} +2 -2
- package/dist/tsup/{chunk-TMLOKTRB.js → chunk-BRP62GZC.js} +1 -1
- package/dist/tsup/chunk-BRP62GZC.js.map +1 -0
- package/dist/tsup/{chunk-D5G75T7J.js → chunk-DPIMKYNB.js} +61 -2
- package/dist/tsup/chunk-DPIMKYNB.js.map +1 -0
- package/dist/tsup/{chunk-BATTOVHF.cjs → chunk-DXXJPH55.cjs} +40 -13
- package/dist/tsup/chunk-DXXJPH55.cjs.map +1 -0
- package/dist/tsup/{chunk-3YY5S6TV.js → chunk-HXUEHHJF.js} +2 -2
- package/dist/tsup/chunk-HXUEHHJF.js.map +1 -0
- package/dist/tsup/{chunk-4BPKKZJO.cjs → chunk-I4LN3FNT.cjs} +10 -10
- package/dist/tsup/chunk-I4LN3FNT.cjs.map +1 -0
- package/dist/tsup/{chunk-PCBNKI2J.js → chunk-JZ7TWV65.js} +1 -1
- package/dist/tsup/chunk-JZ7TWV65.js.map +1 -0
- package/dist/tsup/{chunk-63WNTDRC.cjs → chunk-KORQB2IR.cjs} +1 -1
- package/dist/tsup/{chunk-63WNTDRC.cjs.map → chunk-KORQB2IR.cjs.map} +1 -1
- package/dist/tsup/{chunk-6TQSSJ4F.cjs → chunk-LVTBW2RE.cjs} +3 -3
- package/dist/tsup/{chunk-6TQSSJ4F.cjs.map → chunk-LVTBW2RE.cjs.map} +1 -1
- package/dist/tsup/{chunk-4JU3IPG2.js → chunk-MEHBWPLJ.js} +6 -6
- package/dist/tsup/chunk-MEHBWPLJ.js.map +1 -0
- package/dist/tsup/{chunk-SRNOPUC6.cjs → chunk-NIY3RSPX.cjs} +62 -3
- package/dist/tsup/chunk-NIY3RSPX.cjs.map +1 -0
- package/dist/tsup/{chunk-UZXQEGVJ.js → chunk-P2GNQ4RN.js} +4 -4
- package/dist/tsup/{chunk-UZXQEGVJ.js.map → chunk-P2GNQ4RN.js.map} +1 -1
- package/dist/tsup/{chunk-VUGENVIK.js → chunk-UMZVD6DQ.js} +22 -7
- package/dist/tsup/chunk-UMZVD6DQ.js.map +1 -0
- package/dist/tsup/{chunk-LD5YASJU.cjs → chunk-VE2X4KMG.cjs} +2 -2
- package/dist/tsup/{chunk-LD5YASJU.cjs.map → chunk-VE2X4KMG.cjs.map} +1 -1
- package/dist/tsup/{chunk-GBG63SUG.js → chunk-VTTFNQQI.js} +32 -5
- package/dist/tsup/chunk-VTTFNQQI.js.map +1 -0
- package/dist/tsup/{chunk-2NDZ7JCR.cjs → chunk-ZA7FLHKH.cjs} +1 -1
- package/dist/tsup/chunk-ZA7FLHKH.cjs.map +1 -0
- package/dist/tsup/client/mod.cjs +9 -9
- package/dist/tsup/client/mod.d.cts +5 -5
- package/dist/tsup/client/mod.d.ts +5 -5
- package/dist/tsup/client/mod.js +8 -8
- package/dist/tsup/common/log.cjs +3 -3
- package/dist/tsup/common/log.js +2 -2
- package/dist/tsup/common/websocket.cjs +4 -4
- package/dist/tsup/common/websocket.js +3 -3
- package/dist/tsup/{config-Ak1lv4gF.d.ts → config-BxWAw3iH.d.ts} +512 -27
- package/dist/tsup/{config-DU_xj4qZ.d.cts → config-CZQQ-mso.d.cts} +512 -27
- package/dist/tsup/{config-CxjGYf4K.d.ts → config-D49x8NpL.d.cts} +1 -2
- package/dist/tsup/{config-CxjGYf4K.d.cts → config-D49x8NpL.d.ts} +1 -2
- package/dist/tsup/{context-DAAp4Lpg.d.ts → context-Bw7xq8w3.d.cts} +8 -8
- package/dist/tsup/{context-Dt_L55q8.d.cts → context-D8QA76sV.d.ts} +8 -8
- package/dist/tsup/db/drizzle.cjs +3 -3
- package/dist/tsup/db/drizzle.d.cts +1 -1
- package/dist/tsup/db/drizzle.d.ts +1 -1
- package/dist/tsup/db/drizzle.js +1 -1
- package/dist/tsup/db/mod.cjs +2 -2
- package/dist/tsup/db/mod.d.cts +2 -2
- package/dist/tsup/db/mod.d.ts +2 -2
- package/dist/tsup/db/mod.js +1 -1
- package/dist/tsup/dynamic/mod.cjs +24 -0
- package/dist/tsup/dynamic/mod.cjs.map +1 -0
- package/dist/tsup/dynamic/mod.d.cts +37 -0
- package/dist/tsup/dynamic/mod.d.ts +37 -0
- package/dist/tsup/dynamic/mod.js +24 -0
- package/dist/tsup/dynamic/mod.js.map +1 -0
- package/dist/tsup/inspector/mod.cjs +6 -6
- package/dist/tsup/inspector/mod.js +5 -5
- package/dist/tsup/inspector-tab/mod.cjs +173 -0
- package/dist/tsup/inspector-tab/mod.cjs.map +1 -0
- package/dist/tsup/inspector-tab/mod.d.cts +250 -0
- package/dist/tsup/inspector-tab/mod.d.ts +250 -0
- package/dist/tsup/inspector-tab/mod.js +173 -0
- package/dist/tsup/inspector-tab/mod.js.map +1 -0
- package/dist/tsup/mod.cjs +615 -348
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +5 -5
- package/dist/tsup/mod.d.ts +5 -5
- package/dist/tsup/mod.js +511 -244
- package/dist/tsup/mod.js.map +1 -1
- package/dist/tsup/test/mod.cjs +21 -18
- package/dist/tsup/test/mod.cjs.map +1 -1
- package/dist/tsup/test/mod.d.cts +4 -4
- package/dist/tsup/test/mod.d.ts +4 -4
- package/dist/tsup/test/mod.js +18 -15
- package/dist/tsup/test/mod.js.map +1 -1
- package/dist/tsup/{utils-DVekpm4I.d.cts → utils-DQosb24I.d.cts} +1 -1
- package/dist/tsup/{utils-DVekpm4I.d.ts → utils-DQosb24I.d.ts} +1 -1
- package/dist/tsup/utils.cjs +3 -3
- package/dist/tsup/utils.d.cts +1 -1
- package/dist/tsup/utils.d.ts +1 -1
- package/dist/tsup/utils.js +2 -2
- package/dist/tsup/workflow/mod.cjs +279 -279
- package/dist/tsup/workflow/mod.cjs.map +1 -1
- package/dist/tsup/workflow/mod.d.cts +6 -6
- package/dist/tsup/workflow/mod.d.ts +6 -6
- package/dist/tsup/workflow/mod.js +380 -380
- package/dist/tsup/workflow/mod.js.map +1 -1
- package/package.json +29 -9
- package/src/actor/config.ts +156 -51
- package/src/actor/contexts/index.ts +7 -2
- package/src/actor/definition.ts +17 -19
- package/src/actor/driver.ts +3 -3
- package/src/actor/errors.ts +8 -2
- package/src/actor/instance/mod.ts +26 -34
- package/src/actor/keys.ts +1 -1
- package/src/actor/mod.ts +22 -20
- package/src/actor/schema.ts +2 -2
- package/src/agent-os/actor/index.ts +38 -18
- package/src/agent-os/actor/preview.ts +1 -2
- package/src/agent-os/config.ts +1 -1
- package/src/agent-os/fs/database-vfs.ts +1 -1
- package/src/agent-os/index.ts +16 -15
- package/src/client/actor-common.ts +87 -54
- package/src/client/actor-conn.ts +11 -11
- package/src/client/actor-handle.ts +69 -52
- package/src/client/actor-query.ts +5 -5
- package/src/client/errors.ts +1 -1
- package/src/client/lifecycle-errors.ts +2 -4
- package/src/client/query.ts +1 -1
- package/src/client/queue.ts +8 -4
- package/src/client/raw-utils.ts +8 -6
- package/src/client/resolve-gateway-target.ts +1 -1
- package/src/client/utils.ts +2 -6
- package/src/common/actor-websocket.ts +3 -1
- package/src/common/bare/actor-persist/v1.ts +205 -163
- package/src/common/bare/actor-persist/v2.ts +265 -213
- package/src/common/bare/actor-persist/v3.ts +176 -172
- package/src/common/bare/actor-persist/v4.ts +254 -253
- package/src/common/bare/transport/v1.ts +659 -543
- package/src/common/client-protocol-versioned.ts +66 -64
- package/src/common/database/config.ts +2 -8
- package/src/common/database/native-database.ts +1 -1
- package/src/common/database/shared.ts +1 -0
- package/src/common/encoding.ts +13 -17
- package/src/common/engine.ts +28 -1
- package/src/common/eventsource.ts +1 -1
- package/src/common/inline-websocket-adapter.ts +3 -2
- package/src/common/router.ts +13 -17
- package/src/common/utils.ts +1 -2
- package/src/common/websocket-interface.ts +1 -1
- package/src/db/mod.ts +1 -1
- package/src/devtools-loader/index.ts +4 -7
- package/src/devtools-loader/serve-devtools.ts +26 -0
- package/src/drivers/engine/actor-driver.ts +48 -46
- package/src/dynamic/instance.ts +32 -0
- package/src/dynamic/internal.ts +50 -0
- package/src/dynamic/isolate-runtime.ts +66 -0
- package/src/dynamic/mod.ts +32 -0
- package/src/engine-client/actor-http-client.ts +3 -3
- package/src/engine-client/actor-websocket-client.ts +5 -5
- package/src/engine-client/api-endpoints.ts +51 -2
- package/src/engine-client/api-utils.ts +2 -2
- package/src/engine-client/driver.ts +1 -1
- package/src/engine-client/mod.ts +5 -3
- package/src/engine-client/ws-proxy.ts +9 -4
- package/src/inspector/client.browser.ts +5 -11
- package/src/inspector/mod.ts +1 -3
- package/src/inspector-tab/mod.ts +315 -0
- package/src/registry/config/envoy.ts +1 -2
- package/src/registry/config/index.ts +40 -16
- package/src/registry/index.ts +226 -83
- package/src/registry/napi-runtime.ts +46 -12
- package/src/registry/native-validation.ts +10 -12
- package/src/registry/native.ts +307 -164
- package/src/registry/process-metrics.ts +90 -23
- package/src/registry/runtime.ts +53 -6
- package/src/registry/wasm-runtime.ts +30 -3
- package/src/serde.ts +1 -1
- package/src/serverless/configure.ts +18 -7
- package/src/test/mod.ts +11 -8
- package/src/utils/endpoint-parser.ts +1 -1
- package/src/utils/env-vars.ts +6 -0
- package/src/utils/router.ts +1 -1
- package/src/utils/serve.ts +4 -5
- package/src/utils.ts +1 -2
- package/src/workflow/context.ts +30 -29
- package/src/workflow/driver.ts +4 -6
- package/src/workflow/inspector.ts +2 -2
- package/src/workflow/mod.ts +15 -17
- package/dist/tsup/chunk-2NDZ7JCR.cjs.map +0 -1
- package/dist/tsup/chunk-3YY5S6TV.js.map +0 -1
- package/dist/tsup/chunk-4BPKKZJO.cjs.map +0 -1
- package/dist/tsup/chunk-4JU3IPG2.js.map +0 -1
- package/dist/tsup/chunk-7HLFSAJP.cjs.map +0 -1
- package/dist/tsup/chunk-BATTOVHF.cjs.map +0 -1
- package/dist/tsup/chunk-D5G75T7J.js.map +0 -1
- package/dist/tsup/chunk-EMFKMVJR.js.map +0 -1
- package/dist/tsup/chunk-GBG63SUG.js.map +0 -1
- package/dist/tsup/chunk-HGW6PBWR.cjs.map +0 -1
- package/dist/tsup/chunk-KY3CERZR.js.map +0 -1
- package/dist/tsup/chunk-OT7FF6GB.cjs.map +0 -1
- package/dist/tsup/chunk-PCBNKI2J.js.map +0 -1
- package/dist/tsup/chunk-SRNOPUC6.cjs.map +0 -1
- package/dist/tsup/chunk-TMLOKTRB.js.map +0 -1
- package/dist/tsup/chunk-VUGENVIK.js.map +0 -1
- package/dist/tsup/process-metrics-NW754INA.js +0 -118
- package/dist/tsup/process-metrics-NW754INA.js.map +0 -1
- package/dist/tsup/process-metrics-TYAGKCEJ.cjs +0 -118
- package/dist/tsup/process-metrics-TYAGKCEJ.cjs.map +0 -1
- /package/dist/tsup/{chunk-D3T3ZBSY.js.map → chunk-BEI24WTI.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common/bare/transport/v1.ts","../../src/common/inspector-transport.ts"],"sourcesContent":["// Vendored BARE codec. Keep the wire format compatible with the existing runtime.\nimport * as bare from \"@rivetkit/bare-ts\"\n\nconst config = /* @__PURE__ */ bare.Config({})\n\nexport type u32 = number\nexport type u64 = bigint\n\nexport type WorkflowCbor = ArrayBuffer\n\nexport function readWorkflowCbor(bc: bare.ByteCursor): WorkflowCbor {\n return bare.readData(bc)\n}\n\nexport function writeWorkflowCbor(bc: bare.ByteCursor, x: WorkflowCbor): void {\n bare.writeData(bc, x)\n}\n\nexport type WorkflowNameIndex = u32\n\nexport function readWorkflowNameIndex(bc: bare.ByteCursor): WorkflowNameIndex {\n return bare.readU32(bc)\n}\n\nexport function writeWorkflowNameIndex(bc: bare.ByteCursor, x: WorkflowNameIndex): void {\n bare.writeU32(bc, x)\n}\n\nexport type WorkflowLoopIterationMarker = {\n readonly loop: WorkflowNameIndex,\n readonly iteration: u32,\n}\n\nexport function readWorkflowLoopIterationMarker(bc: bare.ByteCursor): WorkflowLoopIterationMarker {\n return {\n loop: readWorkflowNameIndex(bc),\n iteration: bare.readU32(bc),\n }\n}\n\nexport function writeWorkflowLoopIterationMarker(bc: bare.ByteCursor, x: WorkflowLoopIterationMarker): void {\n writeWorkflowNameIndex(bc, x.loop)\n bare.writeU32(bc, x.iteration)\n}\n\nexport type WorkflowPathSegment =\n | { readonly tag: \"WorkflowNameIndex\", readonly val: WorkflowNameIndex }\n | { readonly tag: \"WorkflowLoopIterationMarker\", readonly val: WorkflowLoopIterationMarker }\n\nexport function readWorkflowPathSegment(bc: bare.ByteCursor): WorkflowPathSegment {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"WorkflowNameIndex\", val: readWorkflowNameIndex(bc) }\n case 1:\n return { tag: \"WorkflowLoopIterationMarker\", val: readWorkflowLoopIterationMarker(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeWorkflowPathSegment(bc: bare.ByteCursor, x: WorkflowPathSegment): void {\n switch (x.tag) {\n case \"WorkflowNameIndex\": {\n bare.writeU8(bc, 0)\n writeWorkflowNameIndex(bc, x.val)\n break\n }\n case \"WorkflowLoopIterationMarker\": {\n bare.writeU8(bc, 1)\n writeWorkflowLoopIterationMarker(bc, x.val)\n break\n }\n }\n}\n\nexport type WorkflowLocation = readonly WorkflowPathSegment[]\n\nexport function readWorkflowLocation(bc: bare.ByteCursor): WorkflowLocation {\n const len = bare.readUintSafe(bc)\n if (len === 0) { return [] }\n const result = [readWorkflowPathSegment(bc)]\n for (let i = 1; i < len; i++) {\n result[i] = readWorkflowPathSegment(bc)\n }\n return result\n}\n\nexport function writeWorkflowLocation(bc: bare.ByteCursor, x: WorkflowLocation): void {\n bare.writeUintSafe(bc, x.length)\n for (let i = 0; i < x.length; i++) {\n writeWorkflowPathSegment(bc, x[i])\n }\n}\n\nexport enum WorkflowEntryStatus {\n PENDING = \"PENDING\",\n RUNNING = \"RUNNING\",\n COMPLETED = \"COMPLETED\",\n FAILED = \"FAILED\",\n EXHAUSTED = \"EXHAUSTED\",\n}\n\nexport function readWorkflowEntryStatus(bc: bare.ByteCursor): WorkflowEntryStatus {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return WorkflowEntryStatus.PENDING\n case 1:\n return WorkflowEntryStatus.RUNNING\n case 2:\n return WorkflowEntryStatus.COMPLETED\n case 3:\n return WorkflowEntryStatus.FAILED\n case 4:\n return WorkflowEntryStatus.EXHAUSTED\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeWorkflowEntryStatus(bc: bare.ByteCursor, x: WorkflowEntryStatus): void {\n switch (x) {\n case WorkflowEntryStatus.PENDING: {\n bare.writeU8(bc, 0)\n break\n }\n case WorkflowEntryStatus.RUNNING: {\n bare.writeU8(bc, 1)\n break\n }\n case WorkflowEntryStatus.COMPLETED: {\n bare.writeU8(bc, 2)\n break\n }\n case WorkflowEntryStatus.FAILED: {\n bare.writeU8(bc, 3)\n break\n }\n case WorkflowEntryStatus.EXHAUSTED: {\n bare.writeU8(bc, 4)\n break\n }\n }\n}\n\nexport enum WorkflowSleepState {\n PENDING = \"PENDING\",\n COMPLETED = \"COMPLETED\",\n INTERRUPTED = \"INTERRUPTED\",\n}\n\nexport function readWorkflowSleepState(bc: bare.ByteCursor): WorkflowSleepState {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return WorkflowSleepState.PENDING\n case 1:\n return WorkflowSleepState.COMPLETED\n case 2:\n return WorkflowSleepState.INTERRUPTED\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeWorkflowSleepState(bc: bare.ByteCursor, x: WorkflowSleepState): void {\n switch (x) {\n case WorkflowSleepState.PENDING: {\n bare.writeU8(bc, 0)\n break\n }\n case WorkflowSleepState.COMPLETED: {\n bare.writeU8(bc, 1)\n break\n }\n case WorkflowSleepState.INTERRUPTED: {\n bare.writeU8(bc, 2)\n break\n }\n }\n}\n\nexport enum WorkflowBranchStatusType {\n PENDING = \"PENDING\",\n RUNNING = \"RUNNING\",\n COMPLETED = \"COMPLETED\",\n FAILED = \"FAILED\",\n CANCELLED = \"CANCELLED\",\n}\n\nexport function readWorkflowBranchStatusType(bc: bare.ByteCursor): WorkflowBranchStatusType {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return WorkflowBranchStatusType.PENDING\n case 1:\n return WorkflowBranchStatusType.RUNNING\n case 2:\n return WorkflowBranchStatusType.COMPLETED\n case 3:\n return WorkflowBranchStatusType.FAILED\n case 4:\n return WorkflowBranchStatusType.CANCELLED\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeWorkflowBranchStatusType(bc: bare.ByteCursor, x: WorkflowBranchStatusType): void {\n switch (x) {\n case WorkflowBranchStatusType.PENDING: {\n bare.writeU8(bc, 0)\n break\n }\n case WorkflowBranchStatusType.RUNNING: {\n bare.writeU8(bc, 1)\n break\n }\n case WorkflowBranchStatusType.COMPLETED: {\n bare.writeU8(bc, 2)\n break\n }\n case WorkflowBranchStatusType.FAILED: {\n bare.writeU8(bc, 3)\n break\n }\n case WorkflowBranchStatusType.CANCELLED: {\n bare.writeU8(bc, 4)\n break\n }\n }\n}\n\nfunction read0(bc: bare.ByteCursor): WorkflowCbor | null {\n return bare.readBool(bc)\n ? readWorkflowCbor(bc)\n : null\n}\n\nfunction write0(bc: bare.ByteCursor, x: WorkflowCbor | null): void {\n bare.writeBool(bc, x !== null)\n if (x !== null) {\n writeWorkflowCbor(bc, x)\n }\n}\n\nfunction read1(bc: bare.ByteCursor): string | null {\n return bare.readBool(bc)\n ? bare.readString(bc)\n : null\n}\n\nfunction write1(bc: bare.ByteCursor, x: string | null): void {\n bare.writeBool(bc, x !== null)\n if (x !== null) {\n bare.writeString(bc, x)\n }\n}\n\nexport type WorkflowStepEntry = {\n readonly output: WorkflowCbor | null,\n readonly error: string | null,\n}\n\nexport function readWorkflowStepEntry(bc: bare.ByteCursor): WorkflowStepEntry {\n return {\n output: read0(bc),\n error: read1(bc),\n }\n}\n\nexport function writeWorkflowStepEntry(bc: bare.ByteCursor, x: WorkflowStepEntry): void {\n write0(bc, x.output)\n write1(bc, x.error)\n}\n\nexport type WorkflowLoopEntry = {\n readonly state: WorkflowCbor,\n readonly iteration: u32,\n readonly output: WorkflowCbor | null,\n}\n\nexport function readWorkflowLoopEntry(bc: bare.ByteCursor): WorkflowLoopEntry {\n return {\n state: readWorkflowCbor(bc),\n iteration: bare.readU32(bc),\n output: read0(bc),\n }\n}\n\nexport function writeWorkflowLoopEntry(bc: bare.ByteCursor, x: WorkflowLoopEntry): void {\n writeWorkflowCbor(bc, x.state)\n bare.writeU32(bc, x.iteration)\n write0(bc, x.output)\n}\n\nexport type WorkflowSleepEntry = {\n readonly deadline: u64,\n readonly state: WorkflowSleepState,\n}\n\nexport function readWorkflowSleepEntry(bc: bare.ByteCursor): WorkflowSleepEntry {\n return {\n deadline: bare.readU64(bc),\n state: readWorkflowSleepState(bc),\n }\n}\n\nexport function writeWorkflowSleepEntry(bc: bare.ByteCursor, x: WorkflowSleepEntry): void {\n bare.writeU64(bc, x.deadline)\n writeWorkflowSleepState(bc, x.state)\n}\n\nexport type WorkflowMessageEntry = {\n readonly name: string,\n readonly messageData: WorkflowCbor,\n}\n\nexport function readWorkflowMessageEntry(bc: bare.ByteCursor): WorkflowMessageEntry {\n return {\n name: bare.readString(bc),\n messageData: readWorkflowCbor(bc),\n }\n}\n\nexport function writeWorkflowMessageEntry(bc: bare.ByteCursor, x: WorkflowMessageEntry): void {\n bare.writeString(bc, x.name)\n writeWorkflowCbor(bc, x.messageData)\n}\n\nexport type WorkflowRollbackCheckpointEntry = {\n readonly name: string,\n}\n\nexport function readWorkflowRollbackCheckpointEntry(bc: bare.ByteCursor): WorkflowRollbackCheckpointEntry {\n return {\n name: bare.readString(bc),\n }\n}\n\nexport function writeWorkflowRollbackCheckpointEntry(bc: bare.ByteCursor, x: WorkflowRollbackCheckpointEntry): void {\n bare.writeString(bc, x.name)\n}\n\nexport type WorkflowBranchStatus = {\n readonly status: WorkflowBranchStatusType,\n readonly output: WorkflowCbor | null,\n readonly error: string | null,\n}\n\nexport function readWorkflowBranchStatus(bc: bare.ByteCursor): WorkflowBranchStatus {\n return {\n status: readWorkflowBranchStatusType(bc),\n output: read0(bc),\n error: read1(bc),\n }\n}\n\nexport function writeWorkflowBranchStatus(bc: bare.ByteCursor, x: WorkflowBranchStatus): void {\n writeWorkflowBranchStatusType(bc, x.status)\n write0(bc, x.output)\n write1(bc, x.error)\n}\n\nfunction read2(bc: bare.ByteCursor): ReadonlyMap<string, WorkflowBranchStatus> {\n const len = bare.readUintSafe(bc)\n const result = new Map<string, WorkflowBranchStatus>()\n for (let i = 0; i < len; i++) {\n const offset = bc.offset\n const key = bare.readString(bc)\n if (result.has(key)) {\n bc.offset = offset\n throw new bare.BareError(offset, \"duplicated key\")\n }\n result.set(key, readWorkflowBranchStatus(bc))\n }\n return result\n}\n\nfunction write2(bc: bare.ByteCursor, x: ReadonlyMap<string, WorkflowBranchStatus>): void {\n bare.writeUintSafe(bc, x.size)\n for(const kv of x) {\n bare.writeString(bc, kv[0])\n writeWorkflowBranchStatus(bc, kv[1])\n }\n}\n\nexport type WorkflowJoinEntry = {\n readonly branches: ReadonlyMap<string, WorkflowBranchStatus>,\n}\n\nexport function readWorkflowJoinEntry(bc: bare.ByteCursor): WorkflowJoinEntry {\n return {\n branches: read2(bc),\n }\n}\n\nexport function writeWorkflowJoinEntry(bc: bare.ByteCursor, x: WorkflowJoinEntry): void {\n write2(bc, x.branches)\n}\n\nexport type WorkflowRaceEntry = {\n readonly winner: string | null,\n readonly branches: ReadonlyMap<string, WorkflowBranchStatus>,\n}\n\nexport function readWorkflowRaceEntry(bc: bare.ByteCursor): WorkflowRaceEntry {\n return {\n winner: read1(bc),\n branches: read2(bc),\n }\n}\n\nexport function writeWorkflowRaceEntry(bc: bare.ByteCursor, x: WorkflowRaceEntry): void {\n write1(bc, x.winner)\n write2(bc, x.branches)\n}\n\nexport type WorkflowRemovedEntry = {\n readonly originalType: string,\n readonly originalName: string | null,\n}\n\nexport function readWorkflowRemovedEntry(bc: bare.ByteCursor): WorkflowRemovedEntry {\n return {\n originalType: bare.readString(bc),\n originalName: read1(bc),\n }\n}\n\nexport function writeWorkflowRemovedEntry(bc: bare.ByteCursor, x: WorkflowRemovedEntry): void {\n bare.writeString(bc, x.originalType)\n write1(bc, x.originalName)\n}\n\nexport type WorkflowEntryKind =\n | { readonly tag: \"WorkflowStepEntry\", readonly val: WorkflowStepEntry }\n | { readonly tag: \"WorkflowLoopEntry\", readonly val: WorkflowLoopEntry }\n | { readonly tag: \"WorkflowSleepEntry\", readonly val: WorkflowSleepEntry }\n | { readonly tag: \"WorkflowMessageEntry\", readonly val: WorkflowMessageEntry }\n | { readonly tag: \"WorkflowRollbackCheckpointEntry\", readonly val: WorkflowRollbackCheckpointEntry }\n | { readonly tag: \"WorkflowJoinEntry\", readonly val: WorkflowJoinEntry }\n | { readonly tag: \"WorkflowRaceEntry\", readonly val: WorkflowRaceEntry }\n | { readonly tag: \"WorkflowRemovedEntry\", readonly val: WorkflowRemovedEntry }\n\nexport function readWorkflowEntryKind(bc: bare.ByteCursor): WorkflowEntryKind {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"WorkflowStepEntry\", val: readWorkflowStepEntry(bc) }\n case 1:\n return { tag: \"WorkflowLoopEntry\", val: readWorkflowLoopEntry(bc) }\n case 2:\n return { tag: \"WorkflowSleepEntry\", val: readWorkflowSleepEntry(bc) }\n case 3:\n return { tag: \"WorkflowMessageEntry\", val: readWorkflowMessageEntry(bc) }\n case 4:\n return { tag: \"WorkflowRollbackCheckpointEntry\", val: readWorkflowRollbackCheckpointEntry(bc) }\n case 5:\n return { tag: \"WorkflowJoinEntry\", val: readWorkflowJoinEntry(bc) }\n case 6:\n return { tag: \"WorkflowRaceEntry\", val: readWorkflowRaceEntry(bc) }\n case 7:\n return { tag: \"WorkflowRemovedEntry\", val: readWorkflowRemovedEntry(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeWorkflowEntryKind(bc: bare.ByteCursor, x: WorkflowEntryKind): void {\n switch (x.tag) {\n case \"WorkflowStepEntry\": {\n bare.writeU8(bc, 0)\n writeWorkflowStepEntry(bc, x.val)\n break\n }\n case \"WorkflowLoopEntry\": {\n bare.writeU8(bc, 1)\n writeWorkflowLoopEntry(bc, x.val)\n break\n }\n case \"WorkflowSleepEntry\": {\n bare.writeU8(bc, 2)\n writeWorkflowSleepEntry(bc, x.val)\n break\n }\n case \"WorkflowMessageEntry\": {\n bare.writeU8(bc, 3)\n writeWorkflowMessageEntry(bc, x.val)\n break\n }\n case \"WorkflowRollbackCheckpointEntry\": {\n bare.writeU8(bc, 4)\n writeWorkflowRollbackCheckpointEntry(bc, x.val)\n break\n }\n case \"WorkflowJoinEntry\": {\n bare.writeU8(bc, 5)\n writeWorkflowJoinEntry(bc, x.val)\n break\n }\n case \"WorkflowRaceEntry\": {\n bare.writeU8(bc, 6)\n writeWorkflowRaceEntry(bc, x.val)\n break\n }\n case \"WorkflowRemovedEntry\": {\n bare.writeU8(bc, 7)\n writeWorkflowRemovedEntry(bc, x.val)\n break\n }\n }\n}\n\nexport type WorkflowEntry = {\n readonly id: string,\n readonly location: WorkflowLocation,\n readonly kind: WorkflowEntryKind,\n}\n\nexport function readWorkflowEntry(bc: bare.ByteCursor): WorkflowEntry {\n return {\n id: bare.readString(bc),\n location: readWorkflowLocation(bc),\n kind: readWorkflowEntryKind(bc),\n }\n}\n\nexport function writeWorkflowEntry(bc: bare.ByteCursor, x: WorkflowEntry): void {\n bare.writeString(bc, x.id)\n writeWorkflowLocation(bc, x.location)\n writeWorkflowEntryKind(bc, x.kind)\n}\n\nfunction read3(bc: bare.ByteCursor): u64 | null {\n return bare.readBool(bc)\n ? bare.readU64(bc)\n : null\n}\n\nfunction write3(bc: bare.ByteCursor, x: u64 | null): void {\n bare.writeBool(bc, x !== null)\n if (x !== null) {\n bare.writeU64(bc, x)\n }\n}\n\nexport type WorkflowEntryMetadata = {\n readonly status: WorkflowEntryStatus,\n readonly error: string | null,\n readonly attempts: u32,\n readonly lastAttemptAt: u64,\n readonly createdAt: u64,\n readonly completedAt: u64 | null,\n readonly rollbackCompletedAt: u64 | null,\n readonly rollbackError: string | null,\n}\n\nexport function readWorkflowEntryMetadata(bc: bare.ByteCursor): WorkflowEntryMetadata {\n return {\n status: readWorkflowEntryStatus(bc),\n error: read1(bc),\n attempts: bare.readU32(bc),\n lastAttemptAt: bare.readU64(bc),\n createdAt: bare.readU64(bc),\n completedAt: read3(bc),\n rollbackCompletedAt: read3(bc),\n rollbackError: read1(bc),\n }\n}\n\nexport function writeWorkflowEntryMetadata(bc: bare.ByteCursor, x: WorkflowEntryMetadata): void {\n writeWorkflowEntryStatus(bc, x.status)\n write1(bc, x.error)\n bare.writeU32(bc, x.attempts)\n bare.writeU64(bc, x.lastAttemptAt)\n bare.writeU64(bc, x.createdAt)\n write3(bc, x.completedAt)\n write3(bc, x.rollbackCompletedAt)\n write1(bc, x.rollbackError)\n}\n\nfunction read4(bc: bare.ByteCursor): readonly string[] {\n const len = bare.readUintSafe(bc)\n if (len === 0) { return [] }\n const result = [bare.readString(bc)]\n for (let i = 1; i < len; i++) {\n result[i] = bare.readString(bc)\n }\n return result\n}\n\nfunction write4(bc: bare.ByteCursor, x: readonly string[]): void {\n bare.writeUintSafe(bc, x.length)\n for (let i = 0; i < x.length; i++) {\n bare.writeString(bc, x[i])\n }\n}\n\nfunction read5(bc: bare.ByteCursor): readonly WorkflowEntry[] {\n const len = bare.readUintSafe(bc)\n if (len === 0) { return [] }\n const result = [readWorkflowEntry(bc)]\n for (let i = 1; i < len; i++) {\n result[i] = readWorkflowEntry(bc)\n }\n return result\n}\n\nfunction write5(bc: bare.ByteCursor, x: readonly WorkflowEntry[]): void {\n bare.writeUintSafe(bc, x.length)\n for (let i = 0; i < x.length; i++) {\n writeWorkflowEntry(bc, x[i])\n }\n}\n\nfunction read6(bc: bare.ByteCursor): ReadonlyMap<string, WorkflowEntryMetadata> {\n const len = bare.readUintSafe(bc)\n const result = new Map<string, WorkflowEntryMetadata>()\n for (let i = 0; i < len; i++) {\n const offset = bc.offset\n const key = bare.readString(bc)\n if (result.has(key)) {\n bc.offset = offset\n throw new bare.BareError(offset, \"duplicated key\")\n }\n result.set(key, readWorkflowEntryMetadata(bc))\n }\n return result\n}\n\nfunction write6(bc: bare.ByteCursor, x: ReadonlyMap<string, WorkflowEntryMetadata>): void {\n bare.writeUintSafe(bc, x.size)\n for(const kv of x) {\n bare.writeString(bc, kv[0])\n writeWorkflowEntryMetadata(bc, kv[1])\n }\n}\n\nexport type WorkflowHistory = {\n readonly nameRegistry: readonly string[],\n readonly entries: readonly WorkflowEntry[],\n readonly entryMetadata: ReadonlyMap<string, WorkflowEntryMetadata>,\n}\n\nexport function readWorkflowHistory(bc: bare.ByteCursor): WorkflowHistory {\n return {\n nameRegistry: read4(bc),\n entries: read5(bc),\n entryMetadata: read6(bc),\n }\n}\n\nexport function writeWorkflowHistory(bc: bare.ByteCursor, x: WorkflowHistory): void {\n write4(bc, x.nameRegistry)\n write5(bc, x.entries)\n write6(bc, x.entryMetadata)\n}\n\nexport function encodeWorkflowHistory(x: WorkflowHistory): Uint8Array {\n const bc = new bare.ByteCursor(\n new Uint8Array(config.initialBufferLength),\n config\n )\n writeWorkflowHistory(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeWorkflowHistory(bytes: Uint8Array): WorkflowHistory {\n const bc = new bare.ByteCursor(bytes, config)\n const result = readWorkflowHistory(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\n\nfunction assert(condition: boolean, message?: string): asserts condition {\n if (!condition) throw new Error(message ?? \"Assertion failed\")\n}\n","import type { WorkflowHistory } from \"@/common/bare/transport/v1\";\nimport {\n\tdecodeWorkflowHistory,\n\tencodeWorkflowHistory,\n} from \"@/common/bare/transport/v1\";\nimport { bufferToArrayBuffer, toUint8Array } from \"@/utils\";\n\nexport function encodeWorkflowHistoryTransport(\n\thistory: WorkflowHistory,\n): ArrayBuffer {\n\treturn bufferToArrayBuffer(encodeWorkflowHistory(history));\n}\n\nexport function decodeWorkflowHistoryTransport(\n\tdata: ArrayBuffer | ArrayBufferView,\n): WorkflowHistory {\n\treturn decodeWorkflowHistory(toUint8Array(data));\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
// src/registry/process-metrics.ts
|
|
2
|
-
import { monitorEventLoopDelay, performance, PerformanceObserver } from "perf_hooks";
|
|
3
|
-
import { getHeapStatistics } from "v8";
|
|
4
|
-
import * as napi from "@rivetkit/rivetkit-napi";
|
|
5
|
-
function callIfFn(fn, ...args) {
|
|
6
|
-
if (typeof fn === "function") {
|
|
7
|
-
fn(...args);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
var SCRAPE_INTERVAL_MS = 5e3;
|
|
11
|
-
var HEARTBEAT_INTERVAL_MS = 100;
|
|
12
|
-
var EVENTLOOP_DELAY_RESOLUTION_MS = 20;
|
|
13
|
-
var NS_PER_SECOND = 1e9;
|
|
14
|
-
var US_PER_SECOND = 1e6;
|
|
15
|
-
var GC_KIND_NAMES = {
|
|
16
|
-
1: "minor",
|
|
17
|
-
2: "major",
|
|
18
|
-
4: "incremental",
|
|
19
|
-
8: "weakcb"
|
|
20
|
-
};
|
|
21
|
-
var state;
|
|
22
|
-
function startProcessMetrics() {
|
|
23
|
-
if (state) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
const eventLoopHistogram = monitorEventLoopDelay({
|
|
27
|
-
resolution: EVENTLOOP_DELAY_RESOLUTION_MS
|
|
28
|
-
});
|
|
29
|
-
eventLoopHistogram.enable();
|
|
30
|
-
const gcObserver = new PerformanceObserver((list) => {
|
|
31
|
-
var _a;
|
|
32
|
-
for (const entry of list.getEntries()) {
|
|
33
|
-
const kind = ((_a = entry.detail) == null ? void 0 : _a.kind) ?? entry.kind;
|
|
34
|
-
if (typeof kind !== "number") continue;
|
|
35
|
-
const kindName = GC_KIND_NAMES[kind];
|
|
36
|
-
if (!kindName) continue;
|
|
37
|
-
callIfFn(napi.jsObserveGcDuration, kindName, entry.duration / 1e3);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
gcObserver.observe({ entryTypes: ["gc"], buffered: false });
|
|
41
|
-
const lastCpuUsage = process.cpuUsage();
|
|
42
|
-
const lastEventLoopUtilization = performance.eventLoopUtilization();
|
|
43
|
-
const heartbeatInterval = setInterval(() => {
|
|
44
|
-
callIfFn(napi.jsSetEventloopHeartbeatTsMs, Date.now());
|
|
45
|
-
}, HEARTBEAT_INTERVAL_MS);
|
|
46
|
-
heartbeatInterval.unref();
|
|
47
|
-
const scrapeInterval = setInterval(() => {
|
|
48
|
-
try {
|
|
49
|
-
collectAndPush();
|
|
50
|
-
} catch {
|
|
51
|
-
}
|
|
52
|
-
}, SCRAPE_INTERVAL_MS);
|
|
53
|
-
scrapeInterval.unref();
|
|
54
|
-
state = {
|
|
55
|
-
scrapeInterval,
|
|
56
|
-
heartbeatInterval,
|
|
57
|
-
gcObserver,
|
|
58
|
-
eventLoopHistogram,
|
|
59
|
-
lastCpuUsage,
|
|
60
|
-
lastEventLoopUtilization
|
|
61
|
-
};
|
|
62
|
-
callIfFn(napi.jsSetEventloopHeartbeatTsMs, Date.now());
|
|
63
|
-
try {
|
|
64
|
-
collectAndPush();
|
|
65
|
-
} catch {
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
function stopProcessMetrics() {
|
|
69
|
-
if (!state) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
clearInterval(state.scrapeInterval);
|
|
73
|
-
clearInterval(state.heartbeatInterval);
|
|
74
|
-
state.gcObserver.disconnect();
|
|
75
|
-
state.eventLoopHistogram.disable();
|
|
76
|
-
state = void 0;
|
|
77
|
-
}
|
|
78
|
-
function collectAndPush() {
|
|
79
|
-
if (!state) return;
|
|
80
|
-
const hist = state.eventLoopHistogram;
|
|
81
|
-
callIfFn(napi.jsSetEventloopLagQuantile, "p50", hist.percentile(50) / NS_PER_SECOND);
|
|
82
|
-
callIfFn(napi.jsSetEventloopLagQuantile, "p90", hist.percentile(90) / NS_PER_SECOND);
|
|
83
|
-
callIfFn(napi.jsSetEventloopLagQuantile, "p99", hist.percentile(99) / NS_PER_SECOND);
|
|
84
|
-
callIfFn(napi.jsSetEventloopLagQuantile, "max", hist.max / NS_PER_SECOND);
|
|
85
|
-
hist.reset();
|
|
86
|
-
const nextElu = performance.eventLoopUtilization();
|
|
87
|
-
const eluDelta = performance.eventLoopUtilization(nextElu, state.lastEventLoopUtilization);
|
|
88
|
-
state.lastEventLoopUtilization = nextElu;
|
|
89
|
-
callIfFn(napi.jsSetEventloopUtilization, eluDelta.utilization);
|
|
90
|
-
const nextCpu = process.cpuUsage();
|
|
91
|
-
const userDeltaUs = nextCpu.user - state.lastCpuUsage.user;
|
|
92
|
-
const systemDeltaUs = nextCpu.system - state.lastCpuUsage.system;
|
|
93
|
-
state.lastCpuUsage = nextCpu;
|
|
94
|
-
if (userDeltaUs > 0) {
|
|
95
|
-
callIfFn(napi.jsAddProcessCpuSeconds, "user", userDeltaUs / US_PER_SECOND);
|
|
96
|
-
}
|
|
97
|
-
if (systemDeltaUs > 0) {
|
|
98
|
-
callIfFn(napi.jsAddProcessCpuSeconds, "system", systemDeltaUs / US_PER_SECOND);
|
|
99
|
-
}
|
|
100
|
-
const mem = process.memoryUsage();
|
|
101
|
-
callIfFn(napi.jsSetProcessResidentMemoryBytes, mem.rss);
|
|
102
|
-
callIfFn(napi.jsSetHeapBytes, "used", mem.heapUsed);
|
|
103
|
-
callIfFn(napi.jsSetHeapBytes, "total", mem.heapTotal);
|
|
104
|
-
const heapLimit = getHeapStatistics().heap_size_limit;
|
|
105
|
-
callIfFn(napi.jsSetHeapBytes, "limit", heapLimit);
|
|
106
|
-
const proc = process;
|
|
107
|
-
if (typeof proc._getActiveHandles === "function") {
|
|
108
|
-
callIfFn(napi.jsSetActiveHandles, proc._getActiveHandles().length);
|
|
109
|
-
}
|
|
110
|
-
if (typeof proc._getActiveRequests === "function") {
|
|
111
|
-
callIfFn(napi.jsSetActiveRequests, proc._getActiveRequests().length);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
export {
|
|
115
|
-
startProcessMetrics,
|
|
116
|
-
stopProcessMetrics
|
|
117
|
-
};
|
|
118
|
-
//# sourceMappingURL=process-metrics-NW754INA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/registry/process-metrics.ts"],"sourcesContent":["/**\n * Node.js runtime health metrics.\n *\n * Collects JS-internal data (event loop lag, GC, heap, libuv handles,\n * event loop utilization, CPU) using Node built-ins (`node:perf_hooks`,\n * `process`, `node:v8`, `PerformanceObserver`) and pushes them across NAPI\n * into Rust-side prometheus collectors registered with\n * `rivet_metrics::REGISTRY` so they appear on the existing `/metrics`\n * endpoint.\n *\n * All data collection happens here in TypeScript. The NAPI bridge is pure\n * type marshalling and the Rust side only registers + stores the metrics.\n */\nimport { monitorEventLoopDelay, performance, PerformanceObserver } from \"node:perf_hooks\";\nimport { getHeapStatistics } from \"node:v8\";\nimport * as napi from \"@rivetkit/rivetkit-napi\";\n\n// Some napi process-metrics symbols may be missing on older native binaries\n// (the auto-generated index.js destructures them as `undefined` if the\n// underlying `.node` was built before they were added). Guard each call so\n// the metrics collection runs as a no-op instead of throwing\n// `TypeError: napi.jsXxx is not a function` on every interval tick.\nfunction callIfFn<T extends unknown[]>(\n\tfn: ((...args: T) => void) | undefined,\n\t...args: T\n): void {\n\tif (typeof fn === \"function\") {\n\t\tfn(...args);\n\t}\n}\n\nconst SCRAPE_INTERVAL_MS = 5_000;\nconst HEARTBEAT_INTERVAL_MS = 100;\nconst EVENTLOOP_DELAY_RESOLUTION_MS = 20;\nconst NS_PER_SECOND = 1e9;\nconst US_PER_SECOND = 1e6;\n\n// V8 GC kind bitfield from Node's perf_hooks documentation. A `gc` performance\n// entry's `kind` field is one of these values.\nconst GC_KIND_NAMES: Record<number, string> = {\n\t1: \"minor\",\n\t2: \"major\",\n\t4: \"incremental\",\n\t8: \"weakcb\",\n};\n\ninterface ProcessMetricsState {\n\tscrapeInterval: NodeJS.Timeout;\n\theartbeatInterval: NodeJS.Timeout;\n\tgcObserver: PerformanceObserver;\n\teventLoopHistogram: ReturnType<typeof monitorEventLoopDelay>;\n\tlastCpuUsage: NodeJS.CpuUsage;\n\tlastEventLoopUtilization: ReturnType<typeof performance.eventLoopUtilization>;\n}\n\nlet state: ProcessMetricsState | undefined;\n\nexport function startProcessMetrics(): void {\n\tif (state) {\n\t\treturn;\n\t}\n\n\tconst eventLoopHistogram = monitorEventLoopDelay({\n\t\tresolution: EVENTLOOP_DELAY_RESOLUTION_MS,\n\t});\n\teventLoopHistogram.enable();\n\n\tconst gcObserver = new PerformanceObserver((list) => {\n\t\tfor (const entry of list.getEntries()) {\n\t\t\tconst kind =\n\t\t\t\t(entry as PerformanceEntry & { detail?: { kind?: number }; kind?: number }).detail\n\t\t\t\t\t?.kind ??\n\t\t\t\t(entry as PerformanceEntry & { kind?: number }).kind;\n\t\t\tif (typeof kind !== \"number\") continue;\n\t\t\tconst kindName = GC_KIND_NAMES[kind];\n\t\t\tif (!kindName) continue;\n\t\t\t// `entry.duration` is in milliseconds; convert to seconds.\n\t\t\tcallIfFn(napi.jsObserveGcDuration, kindName, entry.duration / 1000);\n\t\t}\n\t});\n\tgcObserver.observe({ entryTypes: [\"gc\"], buffered: false });\n\n\tconst lastCpuUsage = process.cpuUsage();\n\tconst lastEventLoopUtilization = performance.eventLoopUtilization();\n\n\tconst heartbeatInterval = setInterval(() => {\n\t\tcallIfFn(napi.jsSetEventloopHeartbeatTsMs, Date.now());\n\t}, HEARTBEAT_INTERVAL_MS);\n\theartbeatInterval.unref();\n\n\tconst scrapeInterval = setInterval(() => {\n\t\ttry {\n\t\t\tcollectAndPush();\n\t\t} catch {\n\t\t\t// Collection errors must never bring down the process; metrics\n\t\t\t// are best-effort.\n\t\t}\n\t}, SCRAPE_INTERVAL_MS);\n\tscrapeInterval.unref();\n\n\tstate = {\n\t\tscrapeInterval,\n\t\theartbeatInterval,\n\t\tgcObserver,\n\t\teventLoopHistogram,\n\t\tlastCpuUsage,\n\t\tlastEventLoopUtilization,\n\t};\n\n\t// Emit one snapshot immediately so freshly-scraped instances have data.\n\tcallIfFn(napi.jsSetEventloopHeartbeatTsMs, Date.now());\n\ttry {\n\t\tcollectAndPush();\n\t} catch {\n\t\t// As above; best-effort.\n\t}\n}\n\nexport function stopProcessMetrics(): void {\n\tif (!state) {\n\t\treturn;\n\t}\n\tclearInterval(state.scrapeInterval);\n\tclearInterval(state.heartbeatInterval);\n\tstate.gcObserver.disconnect();\n\tstate.eventLoopHistogram.disable();\n\tstate = undefined;\n}\n\nfunction collectAndPush(): void {\n\tif (!state) return;\n\n\t// Event loop delay quantiles. `monitorEventLoopDelay()` reports values in\n\t// nanoseconds; convert to seconds. Reset after reading so the next window\n\t// reflects only the new interval.\n\tconst hist = state.eventLoopHistogram;\n\tcallIfFn(napi.jsSetEventloopLagQuantile, \"p50\", hist.percentile(50) / NS_PER_SECOND);\n\tcallIfFn(napi.jsSetEventloopLagQuantile, \"p90\", hist.percentile(90) / NS_PER_SECOND);\n\tcallIfFn(napi.jsSetEventloopLagQuantile, \"p99\", hist.percentile(99) / NS_PER_SECOND);\n\tcallIfFn(napi.jsSetEventloopLagQuantile, \"max\", hist.max / NS_PER_SECOND);\n\thist.reset();\n\n\t// Event loop utilization delta over the scrape window.\n\tconst nextElu = performance.eventLoopUtilization();\n\tconst eluDelta = performance.eventLoopUtilization(nextElu, state.lastEventLoopUtilization);\n\tstate.lastEventLoopUtilization = nextElu;\n\tcallIfFn(napi.jsSetEventloopUtilization, eluDelta.utilization);\n\n\t// CPU usage delta. `process.cpuUsage()` returns microseconds.\n\tconst nextCpu = process.cpuUsage();\n\tconst userDeltaUs = nextCpu.user - state.lastCpuUsage.user;\n\tconst systemDeltaUs = nextCpu.system - state.lastCpuUsage.system;\n\tstate.lastCpuUsage = nextCpu;\n\tif (userDeltaUs > 0) {\n\t\tcallIfFn(napi.jsAddProcessCpuSeconds, \"user\", userDeltaUs / US_PER_SECOND);\n\t}\n\tif (systemDeltaUs > 0) {\n\t\tcallIfFn(napi.jsAddProcessCpuSeconds, \"system\", systemDeltaUs / US_PER_SECOND);\n\t}\n\n\t// Memory + heap.\n\tconst mem = process.memoryUsage();\n\tcallIfFn(napi.jsSetProcessResidentMemoryBytes, mem.rss);\n\tcallIfFn(napi.jsSetHeapBytes, \"used\", mem.heapUsed);\n\tcallIfFn(napi.jsSetHeapBytes, \"total\", mem.heapTotal);\n\tconst heapLimit = getHeapStatistics().heap_size_limit;\n\tcallIfFn(napi.jsSetHeapBytes, \"limit\", heapLimit);\n\n\t// libuv active handles + requests. These are unstable Node internals\n\t// guarded behind underscore-prefixed names; if a future Node release\n\t// removes them the try/catch above keeps the rest of the collection\n\t// alive.\n\tconst proc = process as unknown as {\n\t\t_getActiveHandles?: () => unknown[];\n\t\t_getActiveRequests?: () => unknown[];\n\t};\n\tif (typeof proc._getActiveHandles === \"function\") {\n\t\tcallIfFn(napi.jsSetActiveHandles, proc._getActiveHandles().length);\n\t}\n\tif (typeof proc._getActiveRequests === \"function\") {\n\t\tcallIfFn(napi.jsSetActiveRequests, proc._getActiveRequests().length);\n\t}\n}\n"],"mappings":";AAaA,SAAS,uBAAuB,aAAa,2BAA2B;AACxE,SAAS,yBAAyB;AAClC,YAAY,UAAU;AAOtB,SAAS,SACR,OACG,MACI;AACP,MAAI,OAAO,OAAO,YAAY;AAC7B,OAAG,GAAG,IAAI;AAAA,EACX;AACD;AAEA,IAAM,qBAAqB;AAC3B,IAAM,wBAAwB;AAC9B,IAAM,gCAAgC;AACtC,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AAItB,IAAM,gBAAwC;AAAA,EAC7C,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACJ;AAWA,IAAI;AAEG,SAAS,sBAA4B;AAC3C,MAAI,OAAO;AACV;AAAA,EACD;AAEA,QAAM,qBAAqB,sBAAsB;AAAA,IAChD,YAAY;AAAA,EACb,CAAC;AACD,qBAAmB,OAAO;AAE1B,QAAM,aAAa,IAAI,oBAAoB,CAAC,SAAS;AAnEtD;AAoEE,eAAW,SAAS,KAAK,WAAW,GAAG;AACtC,YAAM,SACJ,WAA2E,WAA3E,mBACE,SACF,MAA+C;AACjD,UAAI,OAAO,SAAS,SAAU;AAC9B,YAAM,WAAW,cAAc,IAAI;AACnC,UAAI,CAAC,SAAU;AAEf,eAAc,0BAAqB,UAAU,MAAM,WAAW,GAAI;AAAA,IACnE;AAAA,EACD,CAAC;AACD,aAAW,QAAQ,EAAE,YAAY,CAAC,IAAI,GAAG,UAAU,MAAM,CAAC;AAE1D,QAAM,eAAe,QAAQ,SAAS;AACtC,QAAM,2BAA2B,YAAY,qBAAqB;AAElE,QAAM,oBAAoB,YAAY,MAAM;AAC3C,aAAc,kCAA6B,KAAK,IAAI,CAAC;AAAA,EACtD,GAAG,qBAAqB;AACxB,oBAAkB,MAAM;AAExB,QAAM,iBAAiB,YAAY,MAAM;AACxC,QAAI;AACH,qBAAe;AAAA,IAChB,QAAQ;AAAA,IAGR;AAAA,EACD,GAAG,kBAAkB;AACrB,iBAAe,MAAM;AAErB,UAAQ;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAGA,WAAc,kCAA6B,KAAK,IAAI,CAAC;AACrD,MAAI;AACH,mBAAe;AAAA,EAChB,QAAQ;AAAA,EAER;AACD;AAEO,SAAS,qBAA2B;AAC1C,MAAI,CAAC,OAAO;AACX;AAAA,EACD;AACA,gBAAc,MAAM,cAAc;AAClC,gBAAc,MAAM,iBAAiB;AACrC,QAAM,WAAW,WAAW;AAC5B,QAAM,mBAAmB,QAAQ;AACjC,UAAQ;AACT;AAEA,SAAS,iBAAuB;AAC/B,MAAI,CAAC,MAAO;AAKZ,QAAM,OAAO,MAAM;AACnB,WAAc,gCAA2B,OAAO,KAAK,WAAW,EAAE,IAAI,aAAa;AACnF,WAAc,gCAA2B,OAAO,KAAK,WAAW,EAAE,IAAI,aAAa;AACnF,WAAc,gCAA2B,OAAO,KAAK,WAAW,EAAE,IAAI,aAAa;AACnF,WAAc,gCAA2B,OAAO,KAAK,MAAM,aAAa;AACxE,OAAK,MAAM;AAGX,QAAM,UAAU,YAAY,qBAAqB;AACjD,QAAM,WAAW,YAAY,qBAAqB,SAAS,MAAM,wBAAwB;AACzF,QAAM,2BAA2B;AACjC,WAAc,gCAA2B,SAAS,WAAW;AAG7D,QAAM,UAAU,QAAQ,SAAS;AACjC,QAAM,cAAc,QAAQ,OAAO,MAAM,aAAa;AACtD,QAAM,gBAAgB,QAAQ,SAAS,MAAM,aAAa;AAC1D,QAAM,eAAe;AACrB,MAAI,cAAc,GAAG;AACpB,aAAc,6BAAwB,QAAQ,cAAc,aAAa;AAAA,EAC1E;AACA,MAAI,gBAAgB,GAAG;AACtB,aAAc,6BAAwB,UAAU,gBAAgB,aAAa;AAAA,EAC9E;AAGA,QAAM,MAAM,QAAQ,YAAY;AAChC,WAAc,sCAAiC,IAAI,GAAG;AACtD,WAAc,qBAAgB,QAAQ,IAAI,QAAQ;AAClD,WAAc,qBAAgB,SAAS,IAAI,SAAS;AACpD,QAAM,YAAY,kBAAkB,EAAE;AACtC,WAAc,qBAAgB,SAAS,SAAS;AAMhD,QAAM,OAAO;AAIb,MAAI,OAAO,KAAK,sBAAsB,YAAY;AACjD,aAAc,yBAAoB,KAAK,kBAAkB,EAAE,MAAM;AAAA,EAClE;AACA,MAAI,OAAO,KAAK,uBAAuB,YAAY;AAClD,aAAc,0BAAqB,KAAK,mBAAmB,EAAE,MAAM;AAAA,EACpE;AACD;","names":[]}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/registry/process-metrics.ts
|
|
2
|
-
var _perf_hooks = require('perf_hooks');
|
|
3
|
-
var _v8 = require('v8');
|
|
4
|
-
var _rivetkitnapi = require('@rivetkit/rivetkit-napi'); var napi = _interopRequireWildcard(_rivetkitnapi);
|
|
5
|
-
function callIfFn(fn, ...args) {
|
|
6
|
-
if (typeof fn === "function") {
|
|
7
|
-
fn(...args);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
var SCRAPE_INTERVAL_MS = 5e3;
|
|
11
|
-
var HEARTBEAT_INTERVAL_MS = 100;
|
|
12
|
-
var EVENTLOOP_DELAY_RESOLUTION_MS = 20;
|
|
13
|
-
var NS_PER_SECOND = 1e9;
|
|
14
|
-
var US_PER_SECOND = 1e6;
|
|
15
|
-
var GC_KIND_NAMES = {
|
|
16
|
-
1: "minor",
|
|
17
|
-
2: "major",
|
|
18
|
-
4: "incremental",
|
|
19
|
-
8: "weakcb"
|
|
20
|
-
};
|
|
21
|
-
var state;
|
|
22
|
-
function startProcessMetrics() {
|
|
23
|
-
if (state) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
const eventLoopHistogram = _perf_hooks.monitorEventLoopDelay.call(void 0, {
|
|
27
|
-
resolution: EVENTLOOP_DELAY_RESOLUTION_MS
|
|
28
|
-
});
|
|
29
|
-
eventLoopHistogram.enable();
|
|
30
|
-
const gcObserver = new (0, _perf_hooks.PerformanceObserver)((list) => {
|
|
31
|
-
var _a;
|
|
32
|
-
for (const entry of list.getEntries()) {
|
|
33
|
-
const kind = _nullishCoalesce(((_a = entry.detail) == null ? void 0 : _a.kind), () => ( entry.kind));
|
|
34
|
-
if (typeof kind !== "number") continue;
|
|
35
|
-
const kindName = GC_KIND_NAMES[kind];
|
|
36
|
-
if (!kindName) continue;
|
|
37
|
-
callIfFn(napi.jsObserveGcDuration, kindName, entry.duration / 1e3);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
gcObserver.observe({ entryTypes: ["gc"], buffered: false });
|
|
41
|
-
const lastCpuUsage = process.cpuUsage();
|
|
42
|
-
const lastEventLoopUtilization = _perf_hooks.performance.eventLoopUtilization();
|
|
43
|
-
const heartbeatInterval = setInterval(() => {
|
|
44
|
-
callIfFn(napi.jsSetEventloopHeartbeatTsMs, Date.now());
|
|
45
|
-
}, HEARTBEAT_INTERVAL_MS);
|
|
46
|
-
heartbeatInterval.unref();
|
|
47
|
-
const scrapeInterval = setInterval(() => {
|
|
48
|
-
try {
|
|
49
|
-
collectAndPush();
|
|
50
|
-
} catch (e) {
|
|
51
|
-
}
|
|
52
|
-
}, SCRAPE_INTERVAL_MS);
|
|
53
|
-
scrapeInterval.unref();
|
|
54
|
-
state = {
|
|
55
|
-
scrapeInterval,
|
|
56
|
-
heartbeatInterval,
|
|
57
|
-
gcObserver,
|
|
58
|
-
eventLoopHistogram,
|
|
59
|
-
lastCpuUsage,
|
|
60
|
-
lastEventLoopUtilization
|
|
61
|
-
};
|
|
62
|
-
callIfFn(napi.jsSetEventloopHeartbeatTsMs, Date.now());
|
|
63
|
-
try {
|
|
64
|
-
collectAndPush();
|
|
65
|
-
} catch (e2) {
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
function stopProcessMetrics() {
|
|
69
|
-
if (!state) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
clearInterval(state.scrapeInterval);
|
|
73
|
-
clearInterval(state.heartbeatInterval);
|
|
74
|
-
state.gcObserver.disconnect();
|
|
75
|
-
state.eventLoopHistogram.disable();
|
|
76
|
-
state = void 0;
|
|
77
|
-
}
|
|
78
|
-
function collectAndPush() {
|
|
79
|
-
if (!state) return;
|
|
80
|
-
const hist = state.eventLoopHistogram;
|
|
81
|
-
callIfFn(napi.jsSetEventloopLagQuantile, "p50", hist.percentile(50) / NS_PER_SECOND);
|
|
82
|
-
callIfFn(napi.jsSetEventloopLagQuantile, "p90", hist.percentile(90) / NS_PER_SECOND);
|
|
83
|
-
callIfFn(napi.jsSetEventloopLagQuantile, "p99", hist.percentile(99) / NS_PER_SECOND);
|
|
84
|
-
callIfFn(napi.jsSetEventloopLagQuantile, "max", hist.max / NS_PER_SECOND);
|
|
85
|
-
hist.reset();
|
|
86
|
-
const nextElu = _perf_hooks.performance.eventLoopUtilization();
|
|
87
|
-
const eluDelta = _perf_hooks.performance.eventLoopUtilization(nextElu, state.lastEventLoopUtilization);
|
|
88
|
-
state.lastEventLoopUtilization = nextElu;
|
|
89
|
-
callIfFn(napi.jsSetEventloopUtilization, eluDelta.utilization);
|
|
90
|
-
const nextCpu = process.cpuUsage();
|
|
91
|
-
const userDeltaUs = nextCpu.user - state.lastCpuUsage.user;
|
|
92
|
-
const systemDeltaUs = nextCpu.system - state.lastCpuUsage.system;
|
|
93
|
-
state.lastCpuUsage = nextCpu;
|
|
94
|
-
if (userDeltaUs > 0) {
|
|
95
|
-
callIfFn(napi.jsAddProcessCpuSeconds, "user", userDeltaUs / US_PER_SECOND);
|
|
96
|
-
}
|
|
97
|
-
if (systemDeltaUs > 0) {
|
|
98
|
-
callIfFn(napi.jsAddProcessCpuSeconds, "system", systemDeltaUs / US_PER_SECOND);
|
|
99
|
-
}
|
|
100
|
-
const mem = process.memoryUsage();
|
|
101
|
-
callIfFn(napi.jsSetProcessResidentMemoryBytes, mem.rss);
|
|
102
|
-
callIfFn(napi.jsSetHeapBytes, "used", mem.heapUsed);
|
|
103
|
-
callIfFn(napi.jsSetHeapBytes, "total", mem.heapTotal);
|
|
104
|
-
const heapLimit = _v8.getHeapStatistics.call(void 0, ).heap_size_limit;
|
|
105
|
-
callIfFn(napi.jsSetHeapBytes, "limit", heapLimit);
|
|
106
|
-
const proc = process;
|
|
107
|
-
if (typeof proc._getActiveHandles === "function") {
|
|
108
|
-
callIfFn(napi.jsSetActiveHandles, proc._getActiveHandles().length);
|
|
109
|
-
}
|
|
110
|
-
if (typeof proc._getActiveRequests === "function") {
|
|
111
|
-
callIfFn(napi.jsSetActiveRequests, proc._getActiveRequests().length);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
exports.startProcessMetrics = startProcessMetrics; exports.stopProcessMetrics = stopProcessMetrics;
|
|
118
|
-
//# sourceMappingURL=process-metrics-TYAGKCEJ.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/rivet/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/process-metrics-TYAGKCEJ.cjs","../../src/registry/process-metrics.ts"],"names":[],"mappings":"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","file":"/home/runner/work/rivet/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/process-metrics-TYAGKCEJ.cjs","sourcesContent":[null,"/**\n * Node.js runtime health metrics.\n *\n * Collects JS-internal data (event loop lag, GC, heap, libuv handles,\n * event loop utilization, CPU) using Node built-ins (`node:perf_hooks`,\n * `process`, `node:v8`, `PerformanceObserver`) and pushes them across NAPI\n * into Rust-side prometheus collectors registered with\n * `rivet_metrics::REGISTRY` so they appear on the existing `/metrics`\n * endpoint.\n *\n * All data collection happens here in TypeScript. The NAPI bridge is pure\n * type marshalling and the Rust side only registers + stores the metrics.\n */\nimport { monitorEventLoopDelay, performance, PerformanceObserver } from \"node:perf_hooks\";\nimport { getHeapStatistics } from \"node:v8\";\nimport * as napi from \"@rivetkit/rivetkit-napi\";\n\n// Some napi process-metrics symbols may be missing on older native binaries\n// (the auto-generated index.js destructures them as `undefined` if the\n// underlying `.node` was built before they were added). Guard each call so\n// the metrics collection runs as a no-op instead of throwing\n// `TypeError: napi.jsXxx is not a function` on every interval tick.\nfunction callIfFn<T extends unknown[]>(\n\tfn: ((...args: T) => void) | undefined,\n\t...args: T\n): void {\n\tif (typeof fn === \"function\") {\n\t\tfn(...args);\n\t}\n}\n\nconst SCRAPE_INTERVAL_MS = 5_000;\nconst HEARTBEAT_INTERVAL_MS = 100;\nconst EVENTLOOP_DELAY_RESOLUTION_MS = 20;\nconst NS_PER_SECOND = 1e9;\nconst US_PER_SECOND = 1e6;\n\n// V8 GC kind bitfield from Node's perf_hooks documentation. A `gc` performance\n// entry's `kind` field is one of these values.\nconst GC_KIND_NAMES: Record<number, string> = {\n\t1: \"minor\",\n\t2: \"major\",\n\t4: \"incremental\",\n\t8: \"weakcb\",\n};\n\ninterface ProcessMetricsState {\n\tscrapeInterval: NodeJS.Timeout;\n\theartbeatInterval: NodeJS.Timeout;\n\tgcObserver: PerformanceObserver;\n\teventLoopHistogram: ReturnType<typeof monitorEventLoopDelay>;\n\tlastCpuUsage: NodeJS.CpuUsage;\n\tlastEventLoopUtilization: ReturnType<typeof performance.eventLoopUtilization>;\n}\n\nlet state: ProcessMetricsState | undefined;\n\nexport function startProcessMetrics(): void {\n\tif (state) {\n\t\treturn;\n\t}\n\n\tconst eventLoopHistogram = monitorEventLoopDelay({\n\t\tresolution: EVENTLOOP_DELAY_RESOLUTION_MS,\n\t});\n\teventLoopHistogram.enable();\n\n\tconst gcObserver = new PerformanceObserver((list) => {\n\t\tfor (const entry of list.getEntries()) {\n\t\t\tconst kind =\n\t\t\t\t(entry as PerformanceEntry & { detail?: { kind?: number }; kind?: number }).detail\n\t\t\t\t\t?.kind ??\n\t\t\t\t(entry as PerformanceEntry & { kind?: number }).kind;\n\t\t\tif (typeof kind !== \"number\") continue;\n\t\t\tconst kindName = GC_KIND_NAMES[kind];\n\t\t\tif (!kindName) continue;\n\t\t\t// `entry.duration` is in milliseconds; convert to seconds.\n\t\t\tcallIfFn(napi.jsObserveGcDuration, kindName, entry.duration / 1000);\n\t\t}\n\t});\n\tgcObserver.observe({ entryTypes: [\"gc\"], buffered: false });\n\n\tconst lastCpuUsage = process.cpuUsage();\n\tconst lastEventLoopUtilization = performance.eventLoopUtilization();\n\n\tconst heartbeatInterval = setInterval(() => {\n\t\tcallIfFn(napi.jsSetEventloopHeartbeatTsMs, Date.now());\n\t}, HEARTBEAT_INTERVAL_MS);\n\theartbeatInterval.unref();\n\n\tconst scrapeInterval = setInterval(() => {\n\t\ttry {\n\t\t\tcollectAndPush();\n\t\t} catch {\n\t\t\t// Collection errors must never bring down the process; metrics\n\t\t\t// are best-effort.\n\t\t}\n\t}, SCRAPE_INTERVAL_MS);\n\tscrapeInterval.unref();\n\n\tstate = {\n\t\tscrapeInterval,\n\t\theartbeatInterval,\n\t\tgcObserver,\n\t\teventLoopHistogram,\n\t\tlastCpuUsage,\n\t\tlastEventLoopUtilization,\n\t};\n\n\t// Emit one snapshot immediately so freshly-scraped instances have data.\n\tcallIfFn(napi.jsSetEventloopHeartbeatTsMs, Date.now());\n\ttry {\n\t\tcollectAndPush();\n\t} catch {\n\t\t// As above; best-effort.\n\t}\n}\n\nexport function stopProcessMetrics(): void {\n\tif (!state) {\n\t\treturn;\n\t}\n\tclearInterval(state.scrapeInterval);\n\tclearInterval(state.heartbeatInterval);\n\tstate.gcObserver.disconnect();\n\tstate.eventLoopHistogram.disable();\n\tstate = undefined;\n}\n\nfunction collectAndPush(): void {\n\tif (!state) return;\n\n\t// Event loop delay quantiles. `monitorEventLoopDelay()` reports values in\n\t// nanoseconds; convert to seconds. Reset after reading so the next window\n\t// reflects only the new interval.\n\tconst hist = state.eventLoopHistogram;\n\tcallIfFn(napi.jsSetEventloopLagQuantile, \"p50\", hist.percentile(50) / NS_PER_SECOND);\n\tcallIfFn(napi.jsSetEventloopLagQuantile, \"p90\", hist.percentile(90) / NS_PER_SECOND);\n\tcallIfFn(napi.jsSetEventloopLagQuantile, \"p99\", hist.percentile(99) / NS_PER_SECOND);\n\tcallIfFn(napi.jsSetEventloopLagQuantile, \"max\", hist.max / NS_PER_SECOND);\n\thist.reset();\n\n\t// Event loop utilization delta over the scrape window.\n\tconst nextElu = performance.eventLoopUtilization();\n\tconst eluDelta = performance.eventLoopUtilization(nextElu, state.lastEventLoopUtilization);\n\tstate.lastEventLoopUtilization = nextElu;\n\tcallIfFn(napi.jsSetEventloopUtilization, eluDelta.utilization);\n\n\t// CPU usage delta. `process.cpuUsage()` returns microseconds.\n\tconst nextCpu = process.cpuUsage();\n\tconst userDeltaUs = nextCpu.user - state.lastCpuUsage.user;\n\tconst systemDeltaUs = nextCpu.system - state.lastCpuUsage.system;\n\tstate.lastCpuUsage = nextCpu;\n\tif (userDeltaUs > 0) {\n\t\tcallIfFn(napi.jsAddProcessCpuSeconds, \"user\", userDeltaUs / US_PER_SECOND);\n\t}\n\tif (systemDeltaUs > 0) {\n\t\tcallIfFn(napi.jsAddProcessCpuSeconds, \"system\", systemDeltaUs / US_PER_SECOND);\n\t}\n\n\t// Memory + heap.\n\tconst mem = process.memoryUsage();\n\tcallIfFn(napi.jsSetProcessResidentMemoryBytes, mem.rss);\n\tcallIfFn(napi.jsSetHeapBytes, \"used\", mem.heapUsed);\n\tcallIfFn(napi.jsSetHeapBytes, \"total\", mem.heapTotal);\n\tconst heapLimit = getHeapStatistics().heap_size_limit;\n\tcallIfFn(napi.jsSetHeapBytes, \"limit\", heapLimit);\n\n\t// libuv active handles + requests. These are unstable Node internals\n\t// guarded behind underscore-prefixed names; if a future Node release\n\t// removes them the try/catch above keeps the rest of the collection\n\t// alive.\n\tconst proc = process as unknown as {\n\t\t_getActiveHandles?: () => unknown[];\n\t\t_getActiveRequests?: () => unknown[];\n\t};\n\tif (typeof proc._getActiveHandles === \"function\") {\n\t\tcallIfFn(napi.jsSetActiveHandles, proc._getActiveHandles().length);\n\t}\n\tif (typeof proc._getActiveRequests === \"function\") {\n\t\tcallIfFn(napi.jsSetActiveRequests, proc._getActiveRequests().length);\n\t}\n}\n"]}
|
|
File without changes
|