cojson-transport-ws 0.16.5 → 0.16.7

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.
@@ -1,4 +1,4 @@
1
1
 
2
- > cojson-transport-ws@0.16.5 build /home/runner/_work/jazz/jazz/packages/cojson-transport-ws
2
+ > cojson-transport-ws@0.16.7 build /home/runner/_work/jazz/jazz/packages/cojson-transport-ws
3
3
  > rm -rf ./dist && tsc --sourceMap --outDir dist
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # cojson-transport-nodejs-ws
2
2
 
3
+ ## 0.16.7
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [020304f]
8
+ - cojson@0.16.7
9
+
10
+ ## 0.16.6
11
+
12
+ ### Patch Changes
13
+
14
+ - ac5d20d: Add ingress and egress metering
15
+ - Updated dependencies [67e0968]
16
+ - Updated dependencies [ce9ca54]
17
+ - Updated dependencies [4b99ff1]
18
+ - Updated dependencies [ac5d20d]
19
+ - Updated dependencies [9bf7946]
20
+ - cojson@0.16.6
21
+
3
22
  ## 0.16.5
4
23
 
5
24
  ### Patch Changes
@@ -6,15 +6,24 @@ export declare const MAX_OUTGOING_MESSAGES_CHUNK_BYTES = 25000;
6
6
  export declare class BatchedOutgoingMessages implements CojsonInternalTypes.OutgoingPeerChannel {
7
7
  private websocket;
8
8
  private batching;
9
+ /**
10
+ * Additional key-value pair of attributes to add to the egress metric.
11
+ */
12
+ private meta?;
9
13
  private backlog;
10
14
  private queue;
11
15
  private processing;
12
16
  private closed;
13
- constructor(websocket: AnyWebSocket, batching: boolean, peerRole: Peer["role"]);
17
+ private counter;
18
+ constructor(websocket: AnyWebSocket, batching: boolean, peerRole: Peer["role"],
19
+ /**
20
+ * Additional key-value pair of attributes to add to the egress metric.
21
+ */
22
+ meta?: Record<string, string | number> | undefined);
14
23
  push(msg: SyncMessage | DisconnectedError): void;
15
24
  private processQueue;
16
- processMessage(msg: SyncMessage): void;
17
- sendMessagesInBulk(): void;
25
+ private processMessage;
26
+ private sendMessagesInBulk;
18
27
  setBatching(enabled: boolean): void;
19
28
  private closeListeners;
20
29
  onClose(callback: () => void): void;
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedOutgoingMessages.d.ts","sourceRoot":"","sources":["../src/BatchedOutgoingMessages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,QAAQ,CAAC;AAEhB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,eAAO,MAAM,iCAAiC,QAAS,CAAC;AAExD,qBAAa,uBACX,YAAW,mBAAmB,CAAC,mBAAmB;IAQhD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;IAPlB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;gBAGb,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,OAAO,EACzB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;IAWxB,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,iBAAiB;YAiB3B,YAAY;IAmC1B,cAAc,CAAC,GAAG,EAAE,WAAW;IAuB/B,kBAAkB;IAOlB,WAAW,CAAC,OAAO,EAAE,OAAO;IAI5B,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI;IAI5B,KAAK;CAqBN"}
1
+ {"version":3,"file":"BatchedOutgoingMessages.d.ts","sourceRoot":"","sources":["../src/BatchedOutgoingMessages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,QAAQ,CAAC;AAEhB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,eAAO,MAAM,iCAAiC,QAAS,CAAC;AAExD,qBAAa,uBACX,YAAW,mBAAmB,CAAC,mBAAmB;IAehD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;IAEhB;;OAEG;IACH,OAAO,CAAC,IAAI,CAAC;IAnBf,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAMV;gBAGK,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,OAAO,EACzB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;IACtB;;OAEG;IACK,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,YAAA;IAchD,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,iBAAiB;YAiB3B,YAAY;IAmC1B,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,kBAAkB;IAO1B,WAAW,CAAC,OAAO,EAAE,OAAO;IAI5B,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI;IAI5B,KAAK;CAqBN"}
@@ -1,19 +1,34 @@
1
+ import { ValueType, metrics } from "@opentelemetry/api";
1
2
  import { PriorityBasedMessageQueue, cojsonInternals, logger, } from "cojson";
2
3
  import { addMessageToBacklog } from "./serialization.js";
3
4
  import { hasWebSocketTooMuchBufferedData, isWebSocketOpen, waitForWebSocketBufferedAmount, waitForWebSocketOpen, } from "./utils.js";
4
- const { CO_VALUE_PRIORITY } = cojsonInternals;
5
+ const { CO_VALUE_PRIORITY, getContentMessageSize } = cojsonInternals;
5
6
  export const MAX_OUTGOING_MESSAGES_CHUNK_BYTES = 25000;
6
7
  export class BatchedOutgoingMessages {
7
- constructor(websocket, batching, peerRole) {
8
+ constructor(websocket, batching, peerRole,
9
+ /**
10
+ * Additional key-value pair of attributes to add to the egress metric.
11
+ */
12
+ meta) {
8
13
  this.websocket = websocket;
9
14
  this.batching = batching;
15
+ this.meta = meta;
10
16
  this.backlog = "";
11
17
  this.processing = false;
12
18
  this.closed = false;
19
+ this.counter = metrics
20
+ .getMeter("cojson-transport-ws")
21
+ .createCounter("jazz.usage.egress", {
22
+ description: "Total egress bytes",
23
+ unit: "bytes",
24
+ valueType: ValueType.INT,
25
+ });
13
26
  this.closeListeners = new Set();
14
27
  this.queue = new PriorityBasedMessageQueue(CO_VALUE_PRIORITY.HIGH, "outgoing", {
15
28
  peerRole: peerRole,
16
29
  });
30
+ // Initialize the counter by adding 0
31
+ this.counter.add(0, this.meta);
17
32
  }
18
33
  push(msg) {
19
34
  if (msg === "Disconnected") {
@@ -54,6 +69,9 @@ export class BatchedOutgoingMessages {
54
69
  this.processing = false;
55
70
  }
56
71
  processMessage(msg) {
72
+ if (msg.action === "content") {
73
+ this.counter.add(getContentMessageSize(msg), this.meta);
74
+ }
57
75
  if (!this.batching) {
58
76
  this.websocket.send(JSON.stringify(msg));
59
77
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedOutgoingMessages.js","sourceRoot":"","sources":["../src/BatchedOutgoingMessages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BatchedOutgoingMessages.js","sourceRoot":"","sources":["../src/BatchedOutgoingMessages.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,10 @@ export type CreateWebSocketPeerOpts = {
10
10
  pingTimeout?: number;
11
11
  onClose?: () => void;
12
12
  onSuccess?: () => void;
13
+ /**
14
+ * Additional key-value attributes to add to the ingress metric.
15
+ */
16
+ meta?: Record<string, string | number>;
13
17
  };
14
- export declare function createWebSocketPeer({ id, websocket, role, expectPings, batchingByDefault, deletePeerStateOnClose, pingTimeout, onSuccess, onClose, }: CreateWebSocketPeerOpts): Peer;
18
+ export declare function createWebSocketPeer({ id, websocket, role, expectPings, batchingByDefault, deletePeerStateOnClose, pingTimeout, onSuccess, onClose, meta, }: CreateWebSocketPeerOpts): Peer;
15
19
  //# sourceMappingURL=createWebSocketPeer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createWebSocketPeer.d.ts","sourceRoot":"","sources":["../src/createWebSocketPeer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAA6C,MAAM,QAAQ,CAAC;AAG9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,YAAY,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAuCF,wBAAgB,mBAAmB,CAAC,EAClC,EAAE,EACF,SAAS,EACT,IAAI,EACJ,WAAkB,EAClB,iBAAwB,EACxB,sBAA8B,EAC9B,WAAoB,EACpB,SAAS,EACT,OAAO,GACR,EAAE,uBAAuB,GAAG,IAAI,CAuGhC"}
1
+ {"version":3,"file":"createWebSocketPeer.d.ts","sourceRoot":"","sources":["../src/createWebSocketPeer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAA6C,MAAM,QAAQ,CAAC;AAG9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,YAAY,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CACxC,CAAC;AAuCF,wBAAgB,mBAAmB,CAAC,EAClC,EAAE,EACF,SAAS,EACT,IAAI,EACJ,WAAkB,EAClB,iBAAwB,EACxB,sBAA8B,EAC9B,WAAoB,EACpB,SAAS,EACT,OAAO,EACP,IAAI,GACL,EAAE,uBAAuB,GAAG,IAAI,CAuHhC"}
@@ -1,7 +1,8 @@
1
+ import { ValueType, metrics } from "@opentelemetry/api";
1
2
  import { cojsonInternals, logger } from "cojson";
2
3
  import { BatchedOutgoingMessages } from "./BatchedOutgoingMessages.js";
3
4
  import { deserializeMessages } from "./serialization.js";
4
- const { ConnectedPeerChannel } = cojsonInternals;
5
+ const { ConnectedPeerChannel, getContentMessageSize } = cojsonInternals;
5
6
  function createPingTimeoutListener(enabled, timeout, callback) {
6
7
  if (!enabled) {
7
8
  return {
@@ -31,7 +32,16 @@ function createClosedEventEmitter(callback = () => { }) {
31
32
  callback();
32
33
  };
33
34
  }
34
- export function createWebSocketPeer({ id, websocket, role, expectPings = true, batchingByDefault = true, deletePeerStateOnClose = false, pingTimeout = 10000, onSuccess, onClose, }) {
35
+ export function createWebSocketPeer({ id, websocket, role, expectPings = true, batchingByDefault = true, deletePeerStateOnClose = false, pingTimeout = 10000, onSuccess, onClose, meta, }) {
36
+ const totalIngressBytesCounter = metrics
37
+ .getMeter("cojson-transport-ws")
38
+ .createCounter("jazz.usage.ingress", {
39
+ description: "Total ingress bytes from peer",
40
+ unit: "bytes",
41
+ valueType: ValueType.INT,
42
+ });
43
+ // Initialize the counter by adding 0
44
+ totalIngressBytesCounter.add(0, meta);
35
45
  const incoming = new ConnectedPeerChannel();
36
46
  const emitClosedEvent = createClosedEventEmitter(onClose);
37
47
  function handleClose() {
@@ -55,7 +65,7 @@ export function createWebSocketPeer({ id, websocket, role, expectPings = true, b
55
65
  });
56
66
  emitClosedEvent();
57
67
  });
58
- const outgoing = new BatchedOutgoingMessages(websocket, batchingByDefault, role);
68
+ const outgoing = new BatchedOutgoingMessages(websocket, batchingByDefault, role, meta);
59
69
  let isFirstMessage = true;
60
70
  function handleIncomingMsg(event) {
61
71
  pingTimeoutListener.reset();
@@ -81,6 +91,9 @@ export function createWebSocketPeer({ id, websocket, role, expectPings = true, b
81
91
  for (const msg of messages) {
82
92
  if (msg && "action" in msg) {
83
93
  incoming.push(msg);
94
+ if (msg.action === "content") {
95
+ totalIngressBytesCounter.add(getContentMessageSize(msg), meta);
96
+ }
84
97
  }
85
98
  }
86
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createWebSocketPeer.js","sourceRoot":"","sources":["../src/createWebSocketPeer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createWebSocketPeer.js","sourceRoot":"","sources":["../src/createWebSocketPeer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BatchedOutgoingMessages.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchedOutgoingMessages.test.d.ts","sourceRoot":"","sources":["../../src/tests/BatchedOutgoingMessages.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import { afterEach, describe, expect, test, vi } from "vitest";
2
+ import { BatchedOutgoingMessages } from "../BatchedOutgoingMessages";
3
+ import { createTestMetricReader, tearDownTestMetricReader } from "./utils.js";
4
+ describe("BatchedOutgoingMessages", () => {
5
+ describe("telemetry", () => {
6
+ afterEach(() => {
7
+ tearDownTestMetricReader();
8
+ });
9
+ test("should correctly measure egress", async () => {
10
+ const metricReader = createTestMetricReader();
11
+ const mockWebSocket = {
12
+ readyState: 1,
13
+ addEventListener: vi.fn(),
14
+ removeEventListener: vi.fn(),
15
+ close: vi.fn(),
16
+ send: vi.fn(),
17
+ };
18
+ const outgoing = new BatchedOutgoingMessages(mockWebSocket, true, "server", { test: "test" });
19
+ const encryptedChanges = "Hello, world!";
20
+ vi.useFakeTimers();
21
+ outgoing.push({
22
+ action: "content",
23
+ new: {
24
+ someSessionId: {
25
+ newTransactions: [
26
+ {
27
+ privacy: "private",
28
+ encryptedChanges,
29
+ },
30
+ ],
31
+ },
32
+ },
33
+ });
34
+ await vi.runAllTimersAsync();
35
+ vi.useRealTimers();
36
+ expect(await metricReader.getMetricValue("jazz.usage.egress", {
37
+ test: "test",
38
+ })).toBe(encryptedChanges.length);
39
+ const trustingChanges = "Jazz is great!";
40
+ vi.useFakeTimers();
41
+ outgoing.push({
42
+ action: "content",
43
+ new: {
44
+ someSessionId: {
45
+ after: 0,
46
+ newTransactions: [
47
+ {
48
+ privacy: "trusting",
49
+ changes: trustingChanges,
50
+ },
51
+ ],
52
+ },
53
+ },
54
+ });
55
+ await vi.runAllTimersAsync();
56
+ vi.useRealTimers();
57
+ expect(await metricReader.getMetricValue("jazz.usage.egress", {
58
+ test: "test",
59
+ })).toBe(encryptedChanges.length + trustingChanges.length);
60
+ });
61
+ });
62
+ });
63
+ //# sourceMappingURL=BatchedOutgoingMessages.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchedOutgoingMessages.test.js","sourceRoot":"","sources":["../../src/tests/BatchedOutgoingMessages.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE9E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,SAAS,CAAC,GAAG,EAAE;YACb,wBAAwB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,YAAY,GAAG,sBAAsB,EAAE,CAAC;YAE9C,MAAM,aAAa,GAAG;gBACpB,UAAU,EAAE,CAAC;gBACb,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;gBACzB,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;gBAC5B,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;gBACd,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;aACqB,CAAC;YAErC,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAC1C,aAAa,EACb,IAAI,EACJ,QAAQ,EACR,EAAE,IAAI,EAAE,MAAM,EAAE,CACjB,CAAC;YAEF,MAAM,gBAAgB,GAAG,eAAe,CAAC;YACzC,EAAE,CAAC,aAAa,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC;gBACZ,MAAM,EAAE,SAAS;gBACjB,GAAG,EAAE;oBACH,aAAa,EAAE;wBACb,eAAe,EAAE;4BACf;gCACE,OAAO,EAAE,SAAS;gCAClB,gBAAgB;6BACjB;yBACF;qBACF;iBACF;aACwB,CAAC,CAAC;YAE7B,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAC7B,EAAE,CAAC,aAAa,EAAE,CAAC;YAEnB,MAAM,CACJ,MAAM,YAAY,CAAC,cAAc,CAAC,mBAAmB,EAAE;gBACrD,IAAI,EAAE,MAAM;aACb,CAAC,CACH,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAEhC,MAAM,eAAe,GAAG,gBAAgB,CAAC;YACzC,EAAE,CAAC,aAAa,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC;gBACZ,MAAM,EAAE,SAAS;gBACjB,GAAG,EAAE;oBACH,aAAa,EAAE;wBACb,KAAK,EAAE,CAAC;wBACR,eAAe,EAAE;4BACf;gCACE,OAAO,EAAE,UAAU;gCACnB,OAAO,EAAE,eAAe;6BACzB;yBACF;qBACF;iBACF;aACwB,CAAC,CAAC;YAE7B,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAC7B,EAAE,CAAC,aAAa,EAAE,CAAC;YAEnB,MAAM,CACJ,MAAM,YAAY,CAAC,cAAc,CAAC,mBAAmB,EAAE;gBACrD,IAAI,EAAE,MAAM;aACb,CAAC,CACH,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { cojsonInternals } from "cojson";
2
- import { describe, expect, test, vi } from "vitest";
2
+ import { afterEach, describe, expect, test, vi } from "vitest";
3
3
  import { MAX_OUTGOING_MESSAGES_CHUNK_BYTES } from "../BatchedOutgoingMessages.js";
4
4
  import { createWebSocketPeer, } from "../createWebSocketPeer.js";
5
5
  import { BUFFER_LIMIT, BUFFER_LIMIT_POLLING_INTERVAL } from "../utils.js";
6
+ import { createTestMetricReader, tearDownTestMetricReader } from "./utils.js";
6
7
  const { CO_VALUE_PRIORITY } = cojsonInternals;
7
8
  function setup(opts = {}) {
8
9
  const listeners = new Map();
@@ -356,6 +357,69 @@ describe("createWebSocketPeer", () => {
356
357
  expect(mockWebSocket.send).toHaveBeenNthCalledWith(2, JSON.stringify(message2));
357
358
  });
358
359
  });
360
+ describe("telemetry", () => {
361
+ afterEach(() => {
362
+ tearDownTestMetricReader();
363
+ });
364
+ test("should initialize to 0 when creating a websocket peer", async () => {
365
+ const metricReader = createTestMetricReader();
366
+ setup({
367
+ meta: { test: "test" },
368
+ });
369
+ const measuredIngress = await metricReader.getMetricValue("jazz.usage.ingress", {
370
+ test: "test",
371
+ });
372
+ expect(measuredIngress).toBe(0);
373
+ });
374
+ test("should correctly measure incoming ingress", async () => {
375
+ const metricReader = createTestMetricReader();
376
+ const { listeners } = setup({
377
+ meta: { label: "value" },
378
+ });
379
+ const messageHandler = listeners.get("message");
380
+ const encryptedChanges = "Hello, world!";
381
+ messageHandler?.(new MessageEvent("message", {
382
+ data: JSON.stringify({
383
+ action: "content",
384
+ new: {
385
+ someSessionId: {
386
+ after: 0,
387
+ newTransactions: [
388
+ {
389
+ privacy: "private",
390
+ madeAt: 0,
391
+ keyUsed: "key_zkey",
392
+ encryptedChanges,
393
+ },
394
+ ],
395
+ },
396
+ },
397
+ }),
398
+ }));
399
+ expect(await metricReader.getMetricValue("jazz.usage.ingress", {
400
+ label: "value",
401
+ })).toBe(encryptedChanges.length);
402
+ const trustingChanges = "Jazz is great!";
403
+ messageHandler?.(new MessageEvent("message", {
404
+ data: JSON.stringify({
405
+ action: "content",
406
+ new: {
407
+ someSessionId: {
408
+ newTransactions: [
409
+ {
410
+ privacy: "trusting",
411
+ changes: trustingChanges,
412
+ },
413
+ ],
414
+ },
415
+ },
416
+ }),
417
+ }));
418
+ expect(await metricReader.getMetricValue("jazz.usage.ingress", {
419
+ label: "value",
420
+ })).toBe(encryptedChanges.length + trustingChanges.length);
421
+ });
422
+ });
359
423
  });
360
424
  // biome-ignore lint/suspicious/noConfusingVoidType: Test helper
361
425
  function waitFor(callback) {
@@ -1 +1 @@
1
- {"version":3,"file":"createWebSocketPeer.test.js","sourceRoot":"","sources":["../../src/tests/createWebSocketPeer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createWebSocketPeer.test.js","sourceRoot":"","sources":["../../src/tests/createWebSocketPeer.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,22 @@
1
+ import { MetricReader } from "@opentelemetry/sdk-metrics";
1
2
  export declare function waitFor(callback: () => boolean | void): Promise<void>;
3
+ /**
4
+ * This is a test metric reader that uses an in-memory metric exporter and exposes a method to get the value of a metric given its name and attributes.
5
+ *
6
+ * This is useful for testing the values of metrics that are collected by the SDK.
7
+ *
8
+ * TODO: We may want to rethink how we access metrics (see `getMetricValue` method) to make it more flexible.
9
+ */
10
+ declare class TestMetricReader extends MetricReader {
11
+ private _exporter;
12
+ protected onShutdown(): Promise<void>;
13
+ protected onForceFlush(): Promise<void>;
14
+ getMetricValue(name: string, attributes?: {
15
+ [key: string]: string | number;
16
+ }): Promise<number | import("@opentelemetry/sdk-metrics").Histogram | import("@opentelemetry/sdk-metrics").ExponentialHistogram | undefined>;
17
+ collectAndExport(): Promise<void>;
18
+ }
19
+ export declare function createTestMetricReader(): TestMetricReader;
20
+ export declare function tearDownTestMetricReader(): void;
21
+ export {};
2
22
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tests/utils.ts"],"names":[],"mappings":"AACA,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,OAAO,GAAG,IAAI,iBA0BrD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tests/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,YAAY,EACb,MAAM,4BAA4B,CAAC;AAIpC,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,OAAO,GAAG,IAAI,iBA0BrD;AAED;;;;;;GAMG;AACH,cAAM,gBAAiB,SAAQ,YAAY;IACzC,OAAO,CAAC,SAAS,CAEf;IAEF,SAAS,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAGrC,SAAS,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAO;IAgB/C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAYxC;AAED,wBAAgB,sBAAsB,qBAWrC;AAED,wBAAgB,wBAAwB,SAEvC"}
@@ -1,3 +1,6 @@
1
+ import { metrics } from "@opentelemetry/api";
2
+ import { AggregationTemporality, InMemoryMetricExporter, MeterProvider, MetricReader, } from "@opentelemetry/sdk-metrics";
3
+ import { expect } from "vitest";
1
4
  // biome-ignore lint/suspicious/noConfusingVoidType: Test helper
2
5
  export function waitFor(callback) {
3
6
  return new Promise((resolve, reject) => {
@@ -23,4 +26,56 @@ export function waitFor(callback) {
23
26
  }, 100);
24
27
  });
25
28
  }
29
+ /**
30
+ * This is a test metric reader that uses an in-memory metric exporter and exposes a method to get the value of a metric given its name and attributes.
31
+ *
32
+ * This is useful for testing the values of metrics that are collected by the SDK.
33
+ *
34
+ * TODO: We may want to rethink how we access metrics (see `getMetricValue` method) to make it more flexible.
35
+ */
36
+ class TestMetricReader extends MetricReader {
37
+ constructor() {
38
+ super(...arguments);
39
+ this._exporter = new InMemoryMetricExporter(AggregationTemporality.CUMULATIVE);
40
+ }
41
+ onShutdown() {
42
+ throw new Error("Method not implemented.");
43
+ }
44
+ onForceFlush() {
45
+ throw new Error("Method not implemented.");
46
+ }
47
+ async getMetricValue(name, attributes = {}) {
48
+ await this.collectAndExport();
49
+ const metric = this._exporter
50
+ .getMetrics()[0]
51
+ ?.scopeMetrics[0]?.metrics.find((m) => m.descriptor.name === name);
52
+ const dp = metric?.dataPoints.find((dp) => JSON.stringify(dp.attributes) === JSON.stringify(attributes));
53
+ this._exporter.reset();
54
+ return dp?.value;
55
+ }
56
+ async collectAndExport() {
57
+ const result = await this.collect();
58
+ await new Promise((resolve, reject) => {
59
+ this._exporter.export(result.resourceMetrics, (result) => {
60
+ if (result.error != null) {
61
+ reject(result.error);
62
+ }
63
+ else {
64
+ resolve();
65
+ }
66
+ });
67
+ });
68
+ }
69
+ }
70
+ export function createTestMetricReader() {
71
+ const metricReader = new TestMetricReader();
72
+ const success = metrics.setGlobalMeterProvider(new MeterProvider({
73
+ readers: [metricReader],
74
+ }));
75
+ expect(success).toBe(true);
76
+ return metricReader;
77
+ }
78
+ export function tearDownTestMetricReader() {
79
+ metrics.disable();
80
+ }
26
81
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tests/utils.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,UAAU,OAAO,CAAC,QAA8B;IACpD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC;gBACH,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAC;YAEpC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;gBACjB,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,CAAC;gBACnB,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxB,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tests/utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"webSocket.integration.test.js","sourceRoot":"","sources":["../../src/tests/webSocket.integration.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAwC,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,IAAI,MAAmD,CAAC;IACxD,IAAI,aAAqB,CAAC;IAC1B,IAAI,MAAsB,CAAC;IAE3B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;QACvC,MAAM,GAAG,MAAM,CAAC;QAChB,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC7E,qBAAqB;QACrB,MAAM,WAAW,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,SAAS,CAC9B,WAAW,EACX,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EACzD,MAAM,CACP,CAAC;QAEF,8BAA8B;QAC9B,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;QAExC,2BAA2B;QAC3B,IAAI,qBAAqB,GAAG,KAAK,CAAC;QAElC,qCAAqC;QACrC,MAAM,IAAI,GAAG,mBAAmB,CAAC;YAC/B,EAAE,EAAE,aAAa;YACjB,SAAS,EAAE,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,GAAG,EAAE;gBACd,qBAAqB,GAAG,IAAI,CAAC;YAC/B,CAAC;SACF,CAAC,CAAC;QAEH,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErC,mCAAmC;QACnC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;gBACvC,IAAI,qBAAqB,EAAE,CAAC;oBAC1B,aAAa,CAAC,eAAe,CAAC,CAAC;oBAC/B,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,WAAW,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,SAAS,CAC9B,WAAW,EACX,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EACzD,MAAM,CACP,CAAC;QAEF,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;QAExC,MAAM,IAAI,GAAG,mBAAmB,CAAC;YAC/B,EAAE,EAAE,aAAa;YACjB,SAAS,EAAE,EAAE;YACb,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QAEH,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErC,sBAAsB;QACtB,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAE5C,gBAAgB;QAChB,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE7B,iCAAiC;QACjC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhD,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,WAAW,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,SAAS,CAC9B,WAAW,EACX,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EACzD,MAAM,CACP,CAAC;QAEF,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAE7B,MAAM,IAAI,GAAG,mBAAmB,CAAC;YAC/B,EAAE,EAAE,aAAa;YACjB,SAAS,EAAE,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,GAAG,EAAE;gBACZ,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC;SACF,CAAC,CAAC;QAEH,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErC,mCAAmC;QACnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAEzD,mBAAmB;QACnB,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,+BAA+B;QAC/B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAEzD,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,WAAW,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,SAAS,CAC9B,WAAW,EACX,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EACzD,MAAM,CACP,CAAC;QAEF,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAE7B,MAAM,IAAI,GAAG,mBAAmB,CAAC;YAC/B,EAAE,EAAE,aAAa;YACjB,SAAS,EAAE,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,GAAG,EAAE;gBACZ,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC;SACF,CAAC,CAAC;QAEH,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErC,8DAA8D;QAC9D,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAE7B,mBAAmB,CAAC;YAClB,EAAE,EAAE,aAAa;YACjB,SAAS,EAAE,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,GAAG,EAAE;gBACZ,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAEhE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"webSocket.integration.test.js","sourceRoot":"","sources":["../../src/tests/webSocket.integration.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,16 +1,18 @@
1
1
  {
2
2
  "name": "cojson-transport-ws",
3
3
  "type": "module",
4
- "version": "0.16.5",
4
+ "version": "0.16.7",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
8
8
  "dependencies": {
9
- "cojson": "0.16.5"
9
+ "@opentelemetry/api": "^1.9.0",
10
+ "cojson": "0.16.7"
10
11
  },
11
12
  "devDependencies": {
12
- "typescript": "5.6.2",
13
+ "@opentelemetry/sdk-metrics": "^2.0.0",
13
14
  "@types/ws": "8.5.10",
15
+ "typescript": "5.6.2",
14
16
  "ws": "^8.14.2"
15
17
  },
16
18
  "scripts": {
@@ -1,3 +1,4 @@
1
+ import { ValueType, metrics } from "@opentelemetry/api";
1
2
  import type { DisconnectedError, SyncMessage } from "cojson";
2
3
  import type { Peer } from "cojson";
3
4
  import {
@@ -15,7 +16,7 @@ import {
15
16
  waitForWebSocketOpen,
16
17
  } from "./utils.js";
17
18
 
18
- const { CO_VALUE_PRIORITY } = cojsonInternals;
19
+ const { CO_VALUE_PRIORITY, getContentMessageSize } = cojsonInternals;
19
20
 
20
21
  export const MAX_OUTGOING_MESSAGES_CHUNK_BYTES = 25_000;
21
22
 
@@ -26,11 +27,22 @@ export class BatchedOutgoingMessages
26
27
  private queue: PriorityBasedMessageQueue;
27
28
  private processing = false;
28
29
  private closed = false;
30
+ private counter = metrics
31
+ .getMeter("cojson-transport-ws")
32
+ .createCounter("jazz.usage.egress", {
33
+ description: "Total egress bytes",
34
+ unit: "bytes",
35
+ valueType: ValueType.INT,
36
+ });
29
37
 
30
38
  constructor(
31
39
  private websocket: AnyWebSocket,
32
40
  private batching: boolean,
33
41
  peerRole: Peer["role"],
42
+ /**
43
+ * Additional key-value pair of attributes to add to the egress metric.
44
+ */
45
+ private meta?: Record<string, string | number>,
34
46
  ) {
35
47
  this.queue = new PriorityBasedMessageQueue(
36
48
  CO_VALUE_PRIORITY.HIGH,
@@ -39,6 +51,9 @@ export class BatchedOutgoingMessages
39
51
  peerRole: peerRole,
40
52
  },
41
53
  );
54
+
55
+ // Initialize the counter by adding 0
56
+ this.counter.add(0, this.meta);
42
57
  }
43
58
 
44
59
  push(msg: SyncMessage | DisconnectedError) {
@@ -93,7 +108,11 @@ export class BatchedOutgoingMessages
93
108
  this.processing = false;
94
109
  }
95
110
 
96
- processMessage(msg: SyncMessage) {
111
+ private processMessage(msg: SyncMessage) {
112
+ if (msg.action === "content") {
113
+ this.counter.add(getContentMessageSize(msg), this.meta);
114
+ }
115
+
97
116
  if (!this.batching) {
98
117
  this.websocket.send(JSON.stringify(msg));
99
118
  return;
@@ -116,7 +135,7 @@ export class BatchedOutgoingMessages
116
135
  }
117
136
  }
118
137
 
119
- sendMessagesInBulk() {
138
+ private sendMessagesInBulk() {
120
139
  if (this.backlog.length > 0 && isWebSocketOpen(this.websocket)) {
121
140
  this.websocket.send(this.backlog);
122
141
  this.backlog = "";
@@ -1,9 +1,10 @@
1
+ import { ValueType, metrics } from "@opentelemetry/api";
1
2
  import { type Peer, type SyncMessage, cojsonInternals, logger } from "cojson";
2
3
  import { BatchedOutgoingMessages } from "./BatchedOutgoingMessages.js";
3
4
  import { deserializeMessages } from "./serialization.js";
4
5
  import type { AnyWebSocket } from "./types.js";
5
6
 
6
- const { ConnectedPeerChannel } = cojsonInternals;
7
+ const { ConnectedPeerChannel, getContentMessageSize } = cojsonInternals;
7
8
 
8
9
  export type CreateWebSocketPeerOpts = {
9
10
  id: string;
@@ -15,6 +16,10 @@ export type CreateWebSocketPeerOpts = {
15
16
  pingTimeout?: number;
16
17
  onClose?: () => void;
17
18
  onSuccess?: () => void;
19
+ /**
20
+ * Additional key-value attributes to add to the ingress metric.
21
+ */
22
+ meta?: Record<string, string | number>;
18
23
  };
19
24
 
20
25
  function createPingTimeoutListener(
@@ -64,7 +69,19 @@ export function createWebSocketPeer({
64
69
  pingTimeout = 10_000,
65
70
  onSuccess,
66
71
  onClose,
72
+ meta,
67
73
  }: CreateWebSocketPeerOpts): Peer {
74
+ const totalIngressBytesCounter = metrics
75
+ .getMeter("cojson-transport-ws")
76
+ .createCounter("jazz.usage.ingress", {
77
+ description: "Total ingress bytes from peer",
78
+ unit: "bytes",
79
+ valueType: ValueType.INT,
80
+ });
81
+
82
+ // Initialize the counter by adding 0
83
+ totalIngressBytesCounter.add(0, meta);
84
+
68
85
  const incoming = new ConnectedPeerChannel();
69
86
  const emitClosedEvent = createClosedEventEmitter(onClose);
70
87
 
@@ -101,6 +118,7 @@ export function createWebSocketPeer({
101
118
  websocket,
102
119
  batchingByDefault,
103
120
  role,
121
+ meta,
104
122
  );
105
123
  let isFirstMessage = true;
106
124
 
@@ -135,6 +153,10 @@ export function createWebSocketPeer({
135
153
  for (const msg of messages) {
136
154
  if (msg && "action" in msg) {
137
155
  incoming.push(msg);
156
+
157
+ if (msg.action === "content") {
158
+ totalIngressBytesCounter.add(getContentMessageSize(msg), meta);
159
+ }
138
160
  }
139
161
  }
140
162
  }
@@ -0,0 +1,83 @@
1
+ import type { SyncMessage } from "cojson";
2
+ import { type Mocked, afterEach, describe, expect, test, vi } from "vitest";
3
+ import { BatchedOutgoingMessages } from "../BatchedOutgoingMessages";
4
+ import type { AnyWebSocket } from "../types";
5
+ import { createTestMetricReader, tearDownTestMetricReader } from "./utils.js";
6
+
7
+ describe("BatchedOutgoingMessages", () => {
8
+ describe("telemetry", () => {
9
+ afterEach(() => {
10
+ tearDownTestMetricReader();
11
+ });
12
+
13
+ test("should correctly measure egress", async () => {
14
+ const metricReader = createTestMetricReader();
15
+
16
+ const mockWebSocket = {
17
+ readyState: 1,
18
+ addEventListener: vi.fn(),
19
+ removeEventListener: vi.fn(),
20
+ close: vi.fn(),
21
+ send: vi.fn(),
22
+ } as unknown as Mocked<AnyWebSocket>;
23
+
24
+ const outgoing = new BatchedOutgoingMessages(
25
+ mockWebSocket,
26
+ true,
27
+ "server",
28
+ { test: "test" },
29
+ );
30
+
31
+ const encryptedChanges = "Hello, world!";
32
+ vi.useFakeTimers();
33
+ outgoing.push({
34
+ action: "content",
35
+ new: {
36
+ someSessionId: {
37
+ newTransactions: [
38
+ {
39
+ privacy: "private",
40
+ encryptedChanges,
41
+ },
42
+ ],
43
+ },
44
+ },
45
+ } as unknown as SyncMessage);
46
+
47
+ await vi.runAllTimersAsync();
48
+ vi.useRealTimers();
49
+
50
+ expect(
51
+ await metricReader.getMetricValue("jazz.usage.egress", {
52
+ test: "test",
53
+ }),
54
+ ).toBe(encryptedChanges.length);
55
+
56
+ const trustingChanges = "Jazz is great!";
57
+ vi.useFakeTimers();
58
+ outgoing.push({
59
+ action: "content",
60
+ new: {
61
+ someSessionId: {
62
+ after: 0,
63
+ newTransactions: [
64
+ {
65
+ privacy: "trusting",
66
+ changes: trustingChanges,
67
+ },
68
+ ],
69
+ },
70
+ },
71
+ } as unknown as SyncMessage);
72
+
73
+ await vi.runAllTimersAsync();
74
+ vi.useRealTimers();
75
+
76
+ expect(
77
+ await metricReader.getMetricValue("jazz.usage.egress", {
78
+ test: "test",
79
+ }),
80
+ ).toBe(encryptedChanges.length + trustingChanges.length);
81
+ });
82
+ });
83
+ });
@@ -1,6 +1,6 @@
1
1
  import type { CojsonInternalTypes, SyncMessage } from "cojson";
2
2
  import { cojsonInternals } from "cojson";
3
- import { type Mocked, describe, expect, test, vi } from "vitest";
3
+ import { type Mocked, afterEach, describe, expect, test, vi } from "vitest";
4
4
  import { MAX_OUTGOING_MESSAGES_CHUNK_BYTES } from "../BatchedOutgoingMessages.js";
5
5
  import {
6
6
  type CreateWebSocketPeerOpts,
@@ -8,6 +8,7 @@ import {
8
8
  } from "../createWebSocketPeer.js";
9
9
  import type { AnyWebSocket } from "../types.js";
10
10
  import { BUFFER_LIMIT, BUFFER_LIMIT_POLLING_INTERVAL } from "../utils.js";
11
+ import { createTestMetricReader, tearDownTestMetricReader } from "./utils.js";
11
12
 
12
13
  const { CO_VALUE_PRIORITY } = cojsonInternals;
13
14
 
@@ -520,6 +521,89 @@ describe("createWebSocketPeer", () => {
520
521
  );
521
522
  });
522
523
  });
524
+
525
+ describe("telemetry", () => {
526
+ afterEach(() => {
527
+ tearDownTestMetricReader();
528
+ });
529
+
530
+ test("should initialize to 0 when creating a websocket peer", async () => {
531
+ const metricReader = createTestMetricReader();
532
+ setup({
533
+ meta: { test: "test" },
534
+ });
535
+
536
+ const measuredIngress = await metricReader.getMetricValue(
537
+ "jazz.usage.ingress",
538
+ {
539
+ test: "test",
540
+ },
541
+ );
542
+ expect(measuredIngress).toBe(0);
543
+ });
544
+
545
+ test("should correctly measure incoming ingress", async () => {
546
+ const metricReader = createTestMetricReader();
547
+ const { listeners } = setup({
548
+ meta: { label: "value" },
549
+ });
550
+
551
+ const messageHandler = listeners.get("message");
552
+
553
+ const encryptedChanges = "Hello, world!";
554
+ messageHandler?.(
555
+ new MessageEvent("message", {
556
+ data: JSON.stringify({
557
+ action: "content",
558
+ new: {
559
+ someSessionId: {
560
+ after: 0,
561
+ newTransactions: [
562
+ {
563
+ privacy: "private" as const,
564
+ madeAt: 0,
565
+ keyUsed: "key_zkey" as const,
566
+ encryptedChanges,
567
+ },
568
+ ],
569
+ },
570
+ },
571
+ }),
572
+ }),
573
+ );
574
+
575
+ expect(
576
+ await metricReader.getMetricValue("jazz.usage.ingress", {
577
+ label: "value",
578
+ }),
579
+ ).toBe(encryptedChanges.length);
580
+
581
+ const trustingChanges = "Jazz is great!";
582
+ messageHandler?.(
583
+ new MessageEvent("message", {
584
+ data: JSON.stringify({
585
+ action: "content",
586
+ new: {
587
+ someSessionId: {
588
+ newTransactions: [
589
+ {
590
+ privacy: "trusting",
591
+ changes: trustingChanges,
592
+ },
593
+ ],
594
+ },
595
+ },
596
+ }),
597
+ }),
598
+ );
599
+
600
+ expect(
601
+ await metricReader.getMetricValue("jazz.usage.ingress", {
602
+ label: "value",
603
+ }),
604
+ ).toBe(encryptedChanges.length + trustingChanges.length);
605
+ });
606
+ });
523
607
  });
524
608
 
525
609
  // biome-ignore lint/suspicious/noConfusingVoidType: Test helper
@@ -1,3 +1,12 @@
1
+ import { metrics } from "@opentelemetry/api";
2
+ import {
3
+ AggregationTemporality,
4
+ InMemoryMetricExporter,
5
+ MeterProvider,
6
+ MetricReader,
7
+ } from "@opentelemetry/sdk-metrics";
8
+ import { expect } from "vitest";
9
+
1
10
  // biome-ignore lint/suspicious/noConfusingVoidType: Test helper
2
11
  export function waitFor(callback: () => boolean | void) {
3
12
  return new Promise<void>((resolve, reject) => {
@@ -26,3 +35,71 @@ export function waitFor(callback: () => boolean | void) {
26
35
  }, 100);
27
36
  });
28
37
  }
38
+
39
+ /**
40
+ * This is a test metric reader that uses an in-memory metric exporter and exposes a method to get the value of a metric given its name and attributes.
41
+ *
42
+ * This is useful for testing the values of metrics that are collected by the SDK.
43
+ *
44
+ * TODO: We may want to rethink how we access metrics (see `getMetricValue` method) to make it more flexible.
45
+ */
46
+ class TestMetricReader extends MetricReader {
47
+ private _exporter = new InMemoryMetricExporter(
48
+ AggregationTemporality.CUMULATIVE,
49
+ );
50
+
51
+ protected onShutdown(): Promise<void> {
52
+ throw new Error("Method not implemented.");
53
+ }
54
+ protected onForceFlush(): Promise<void> {
55
+ throw new Error("Method not implemented.");
56
+ }
57
+
58
+ async getMetricValue(
59
+ name: string,
60
+ attributes: { [key: string]: string | number } = {},
61
+ ) {
62
+ await this.collectAndExport();
63
+ const metric = this._exporter
64
+ .getMetrics()[0]
65
+ ?.scopeMetrics[0]?.metrics.find((m) => m.descriptor.name === name);
66
+
67
+ const dp = metric?.dataPoints.find(
68
+ (dp) => JSON.stringify(dp.attributes) === JSON.stringify(attributes),
69
+ );
70
+
71
+ this._exporter.reset();
72
+
73
+ return dp?.value;
74
+ }
75
+
76
+ async collectAndExport(): Promise<void> {
77
+ const result = await this.collect();
78
+ await new Promise<void>((resolve, reject) => {
79
+ this._exporter.export(result.resourceMetrics, (result) => {
80
+ if (result.error != null) {
81
+ reject(result.error);
82
+ } else {
83
+ resolve();
84
+ }
85
+ });
86
+ });
87
+ }
88
+ }
89
+
90
+ export function createTestMetricReader() {
91
+ const metricReader = new TestMetricReader();
92
+ const success = metrics.setGlobalMeterProvider(
93
+ new MeterProvider({
94
+ readers: [metricReader],
95
+ }),
96
+ );
97
+
98
+ expect(success).toBe(true);
99
+
100
+ return metricReader;
101
+ }
102
+
103
+ export function tearDownTestMetricReader() {
104
+ metrics.disable();
105
+ }
@@ -1,5 +1,4 @@
1
- import { assert } from "node:console";
2
- import { ControlledAgent, type CryptoProvider, LocalNode } from "cojson";
1
+ import { type CryptoProvider, LocalNode } from "cojson";
3
2
  import { WasmCrypto } from "cojson/crypto/WasmCrypto";
4
3
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
5
4
  import { WebSocket } from "ws";