@laserdata/laser-sdk 0.4.1 → 0.5.1

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.
Files changed (107) hide show
  1. package/README.md +49 -2
  2. package/dist/agent/reliable-consumer.d.ts.map +1 -1
  3. package/dist/agent/reliable-consumer.js +9 -6
  4. package/dist/agent/reliable-consumer.js.map +1 -1
  5. package/dist/bridges/a2a.d.ts +1 -1
  6. package/dist/bridges/a2a.js +1 -1
  7. package/dist/client/capabilities.d.ts +27 -2
  8. package/dist/client/capabilities.d.ts.map +1 -1
  9. package/dist/client/capabilities.js +33 -4
  10. package/dist/client/capabilities.js.map +1 -1
  11. package/dist/client/errors.d.ts +36 -1
  12. package/dist/client/errors.d.ts.map +1 -1
  13. package/dist/client/errors.js +54 -0
  14. package/dist/client/errors.js.map +1 -1
  15. package/dist/client/internals.d.ts +1 -0
  16. package/dist/client/internals.d.ts.map +1 -1
  17. package/dist/client/internals.js +1 -0
  18. package/dist/client/internals.js.map +1 -1
  19. package/dist/client/laser.d.ts +1 -0
  20. package/dist/client/laser.d.ts.map +1 -1
  21. package/dist/client/laser.js +41 -7
  22. package/dist/client/laser.js.map +1 -1
  23. package/dist/client/managed.d.ts +1 -0
  24. package/dist/client/managed.d.ts.map +1 -1
  25. package/dist/client/managed.js +15 -2
  26. package/dist/client/managed.js.map +1 -1
  27. package/dist/iggy/apache-iggy.d.ts +63 -2
  28. package/dist/iggy/apache-iggy.d.ts.map +1 -1
  29. package/dist/iggy/apache-iggy.js +343 -14
  30. package/dist/iggy/apache-iggy.js.map +1 -1
  31. package/dist/index.d.ts +10 -2
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +5 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/managed/filters.d.ts +287 -0
  36. package/dist/managed/filters.d.ts.map +1 -0
  37. package/dist/managed/filters.js +1923 -0
  38. package/dist/managed/filters.js.map +1 -0
  39. package/dist/stream/consumer-group.d.ts +168 -0
  40. package/dist/stream/consumer-group.d.ts.map +1 -0
  41. package/dist/stream/consumer-group.js +394 -0
  42. package/dist/stream/consumer-group.js.map +1 -0
  43. package/dist/stream/consumer.d.ts +46 -3
  44. package/dist/stream/consumer.d.ts.map +1 -1
  45. package/dist/stream/consumer.js +233 -36
  46. package/dist/stream/consumer.js.map +1 -1
  47. package/dist/stream/producer-statistics.d.ts +22 -0
  48. package/dist/stream/producer-statistics.d.ts.map +1 -0
  49. package/dist/stream/producer-statistics.js +214 -0
  50. package/dist/stream/producer-statistics.js.map +1 -0
  51. package/dist/stream/producer.d.ts +2 -0
  52. package/dist/stream/producer.d.ts.map +1 -1
  53. package/dist/stream/producer.js +16 -0
  54. package/dist/stream/producer.js.map +1 -1
  55. package/dist/stream/stream.d.ts +3 -1
  56. package/dist/stream/stream.d.ts.map +1 -1
  57. package/dist/stream/stream.js +4 -2
  58. package/dist/stream/stream.js.map +1 -1
  59. package/dist/stream/topic.d.ts +20 -2
  60. package/dist/stream/topic.d.ts.map +1 -1
  61. package/dist/stream/topic.js +33 -4
  62. package/dist/stream/topic.js.map +1 -1
  63. package/dist/wire/authz.d.ts +1 -1
  64. package/dist/wire/authz.d.ts.map +1 -1
  65. package/dist/wire/authz.js +12 -3
  66. package/dist/wire/authz.js.map +1 -1
  67. package/dist/wire/codes.d.ts +17 -0
  68. package/dist/wire/codes.d.ts.map +1 -1
  69. package/dist/wire/codes.js +17 -0
  70. package/dist/wire/codes.js.map +1 -1
  71. package/dist/wire/commands.d.ts +12 -1
  72. package/dist/wire/commands.d.ts.map +1 -1
  73. package/dist/wire/commands.js +13 -1
  74. package/dist/wire/commands.js.map +1 -1
  75. package/dist/wire/control.d.ts +4 -0
  76. package/dist/wire/control.d.ts.map +1 -1
  77. package/dist/wire/control.js +5 -0
  78. package/dist/wire/control.js.map +1 -1
  79. package/dist/wire/filter-codecs.d.ts +16 -0
  80. package/dist/wire/filter-codecs.d.ts.map +1 -0
  81. package/dist/wire/filter-codecs.js +519 -0
  82. package/dist/wire/filter-codecs.js.map +1 -0
  83. package/dist/wire/filter-eval.d.ts +75 -0
  84. package/dist/wire/filter-eval.d.ts.map +1 -0
  85. package/dist/wire/filter-eval.js +899 -0
  86. package/dist/wire/filter-eval.js.map +1 -0
  87. package/dist/wire/filter.d.ts +835 -0
  88. package/dist/wire/filter.d.ts.map +1 -0
  89. package/dist/wire/filter.js +3037 -0
  90. package/dist/wire/filter.js.map +1 -0
  91. package/dist/wire/hello.d.ts +19 -0
  92. package/dist/wire/hello.d.ts.map +1 -1
  93. package/dist/wire/hello.js +30 -3
  94. package/dist/wire/hello.js.map +1 -1
  95. package/dist/wire/http.d.ts +23 -0
  96. package/dist/wire/http.d.ts.map +1 -1
  97. package/dist/wire/http.js +56 -47
  98. package/dist/wire/http.js.map +1 -1
  99. package/dist/wire/limits.d.ts +27 -0
  100. package/dist/wire/limits.d.ts.map +1 -1
  101. package/dist/wire/limits.js +27 -0
  102. package/dist/wire/limits.js.map +1 -1
  103. package/dist/wire/result.d.ts +4 -0
  104. package/dist/wire/result.d.ts.map +1 -1
  105. package/dist/wire/result.js +50 -0
  106. package/dist/wire/result.js.map +1 -1
  107. package/package.json +1 -1
@@ -1,7 +1,12 @@
1
- import { CancelledError, InvalidError, UnsupportedError } from "../client/errors.js";
1
+ import { mintUlidValue } from "../runtime/ulid.js";
2
+ import { CancelledError, FilterExecutionError, InvalidError, TransportError, UnsupportedError } from "../client/errors.js";
2
3
  const DEFAULT_BATCH_LENGTH = 100;
3
4
  const DEFAULT_POLL_INTERVAL_MS = 250;
4
5
  const DEFAULT_START_FROM = { kind: "next" };
6
+ function throwIfAborted(signal, message) {
7
+ if (signal?.aborted === true)
8
+ throw new CancelledError(message, { cause: signal.reason });
9
+ }
5
10
  function delay(ms, signal) {
6
11
  return new Promise((resolve, reject) => {
7
12
  if (signal?.aborted) {
@@ -19,43 +24,80 @@ function delay(ms, signal) {
19
24
  signal?.addEventListener("abort", onAbort, { once: true });
20
25
  });
21
26
  }
22
- /** Polls one partition or consumer group until shutdown. */
27
+ /** Apply the defaults and reject values no consumer can run with. */
28
+ export function resolveConsumerOptions(options, anonymous) {
29
+ const resolved = {
30
+ batchLength: options.batchLength ?? DEFAULT_BATCH_LENGTH,
31
+ autoCommit: options.autoCommit ?? !anonymous,
32
+ startFrom: options.startFrom ?? DEFAULT_START_FROM,
33
+ pollIntervalMs: options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS
34
+ };
35
+ if (!Number.isSafeInteger(resolved.batchLength) || resolved.batchLength < 1) {
36
+ throw new InvalidError("consumer batchLength must be a positive safe integer");
37
+ }
38
+ if (!Number.isFinite(resolved.pollIntervalMs) || resolved.pollIntervalMs < 0) {
39
+ throw new InvalidError("consumer pollIntervalMs must be a non-negative finite number");
40
+ }
41
+ if ((resolved.startFrom.kind === "offset" || resolved.startFrom.kind === "timestamp") &&
42
+ resolved.startFrom.value < 0n) {
43
+ throw new InvalidError("consumer start value must be non-negative");
44
+ }
45
+ return resolved;
46
+ }
47
+ /**
48
+ * Polls one partition or consumer group until shutdown. A group consumer on a
49
+ * server that resolves group policies reads through the group reader: the
50
+ * server runs the group's filter, or none, and commits go through the group's
51
+ * fenced acknowledgments. `batchLength` then also bounds the source records
52
+ * one partition poll examines. A purge restarts the partition at offset 0
53
+ * without telling an open reader, which can keep its old position and skip
54
+ * the replacement records, so rebuild it after a purge.
55
+ */
23
56
  export class Consumer {
24
57
  transport;
25
58
  streamName;
26
59
  topicName;
27
60
  target;
61
+ reader;
28
62
  batchLength;
29
63
  autoCommit;
30
64
  startFrom;
31
65
  pollIntervalMs;
32
66
  buffer = [];
67
+ // Group reads: the records of the current page, the record each delivered
68
+ // message came from, and whether a delivery waits to be stored.
69
+ records = [];
70
+ delivered = new WeakMap();
71
+ handledSincePoll = false;
72
+ lastDelivery;
73
+ moreScanned = false;
33
74
  consumedOffsets = new Map();
75
+ explicitOffsets = new Map();
76
+ nextOffsets = new Map();
77
+ assignedPartitions = new Set();
78
+ assignmentSeen = false;
79
+ partitionCursor = 0;
80
+ gainedPartitions = new Set();
34
81
  started = false;
35
82
  shuttingDown = false;
36
- constructor(transport, streamName, topicName, target, options = {}) {
83
+ constructor(transport, streamName, topicName, target, options = {}, reader) {
37
84
  this.transport = transport;
38
85
  this.streamName = streamName;
39
86
  this.topicName = topicName;
40
87
  this.target = target;
41
- this.batchLength = options.batchLength ?? DEFAULT_BATCH_LENGTH;
42
- this.autoCommit = options.autoCommit ?? true;
43
- this.startFrom = options.startFrom ?? DEFAULT_START_FROM;
44
- this.pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
88
+ this.reader = reader;
89
+ const anonymous = target.kind === "single" && target.name === undefined;
90
+ if (anonymous)
91
+ this.target = { ...target, name: `anonymous-${mintUlidValue().toString(16)}` };
45
92
  if (this.target.kind === "single" &&
46
93
  (!Number.isSafeInteger(this.target.partitionId) || this.target.partitionId < 0)) {
47
94
  throw new InvalidError("consumer partition must be a non-negative safe integer");
48
95
  }
49
- if (!Number.isSafeInteger(this.batchLength) || this.batchLength < 1) {
50
- throw new InvalidError("consumer batchLength must be a positive safe integer");
51
- }
52
- if (!Number.isFinite(this.pollIntervalMs) || this.pollIntervalMs < 0) {
53
- throw new InvalidError("consumer pollIntervalMs must be a non-negative finite number");
54
- }
55
- if ((this.startFrom.kind === "offset" || this.startFrom.kind === "timestamp") &&
56
- this.startFrom.value < 0n) {
57
- throw new InvalidError("consumer start value must be non-negative");
58
- }
96
+ const resolved = resolveConsumerOptions(options, anonymous);
97
+ this.batchLength = resolved.batchLength;
98
+ this.autoCommit = resolved.autoCommit;
99
+ this.startFrom = resolved.startFrom;
100
+ this.pollIntervalMs = resolved.pollIntervalMs;
59
101
  }
60
102
  async nextWithin(timeoutMs, options = {}) {
61
103
  if (!Number.isFinite(timeoutMs) || timeoutMs < 0) {
@@ -63,42 +105,63 @@ export class Consumer {
63
105
  }
64
106
  const deadline = Date.now() + timeoutMs;
65
107
  for (;;) {
66
- if (options.signal?.aborted === true) {
67
- throw new CancelledError("nextWithin aborted", { cause: options.signal.reason });
68
- }
69
- const message = this.buffer.shift();
108
+ if (this.stopped())
109
+ return null;
110
+ throwIfAborted(options.signal, "nextWithin aborted");
111
+ this.handledPrevious();
112
+ const message = this.take();
70
113
  if (message !== undefined)
71
114
  return message;
72
115
  await this.fillBuffer(options.signal);
73
- if (this.buffer.length > 0)
116
+ throwIfAborted(options.signal, "nextWithin aborted");
117
+ if (this.stopped())
118
+ return null;
119
+ if (this.pending())
74
120
  continue;
75
121
  const remaining = deadline - Date.now();
76
122
  if (remaining <= 0)
77
123
  return null;
78
- await delay(Math.min(this.pollIntervalMs, remaining), options.signal);
124
+ await delay(this.moreScanned ? 0 : Math.min(this.pollIntervalMs, remaining), options.signal);
79
125
  }
80
126
  }
81
127
  async *[Symbol.asyncIterator]() {
82
128
  yield* this.stream();
83
129
  }
84
130
  async *stream(options = {}) {
85
- while (!this.shuttingDown) {
86
- if (options.signal?.aborted === true) {
87
- throw new CancelledError("consumer stream aborted", { cause: options.signal.reason });
88
- }
89
- const message = this.buffer.shift();
131
+ while (!this.stopped()) {
132
+ throwIfAborted(options.signal, "consumer stream aborted");
133
+ this.handledPrevious();
134
+ const message = this.take();
90
135
  if (message !== undefined) {
91
136
  yield message;
92
137
  continue;
93
138
  }
94
139
  await this.fillBuffer(options.signal);
95
- if (this.buffer.length === 0) {
96
- await delay(this.pollIntervalMs, options.signal);
140
+ throwIfAborted(options.signal, "consumer stream aborted");
141
+ if (this.stopped())
142
+ return;
143
+ if (!this.pending()) {
144
+ await delay(this.moreScanned ? 0 : this.pollIntervalMs, options.signal);
97
145
  }
98
146
  }
99
147
  }
148
+ /**
149
+ * Store a handled message's offset on the server. A group consumer on a
150
+ * server that resolves group policies stores the contiguous prefix of the
151
+ * partition through this message, and needs the message object it delivered.
152
+ */
100
153
  async commit(message) {
154
+ if (this.reader !== undefined) {
155
+ const record = this.delivered.get(message);
156
+ if (record === undefined) {
157
+ throw new InvalidError("commit the message object this group consumer delivered");
158
+ }
159
+ await this.reader.ackThrough(record);
160
+ this.explicitOffsets.set(message.partitionId, message.offset);
161
+ return;
162
+ }
101
163
  await this.transport.storeOffset(this.streamName, this.topicName, this.target, message.partitionId, message.offset);
164
+ this.explicitOffsets.set(message.partitionId, message.offset);
102
165
  }
103
166
  lastConsumedOffset(partitionId) {
104
167
  return this.consumedOffsets.get(partitionId);
@@ -117,28 +180,162 @@ export class Consumer {
117
180
  }
118
181
  return this.transport.getConsumerOffset(this.streamName, this.topicName, offsetTarget, partitionId);
119
182
  }
120
- /** Ends iteration and leaves the consumer group when present. */
183
+ /**
184
+ * Ends iteration and leaves the consumer group when present. An
185
+ * auto-committing consumer stores the delivered prefix first.
186
+ */
121
187
  async shutdown() {
122
188
  if (this.shuttingDown)
123
189
  return;
124
190
  this.shuttingDown = true;
125
- if (this.target.kind === "group") {
126
- await this.transport.leaveConsumerGroup(this.streamName, this.topicName, this.target.name);
191
+ if (this.reader !== undefined) {
192
+ this.handledPrevious();
193
+ this.records.length = 0;
194
+ await this.reader.close();
195
+ return;
196
+ }
197
+ try {
198
+ if (this.autoCommit) {
199
+ for (const [partition, offset] of this.consumedOffsets) {
200
+ const explicit = this.explicitOffsets.get(partition);
201
+ if (explicit === undefined || explicit < offset) {
202
+ await this.transport.storeOffset(this.streamName, this.topicName, this.target, partition, offset);
203
+ }
204
+ }
205
+ }
206
+ }
207
+ finally {
208
+ if (this.target.kind === "group") {
209
+ await this.transport.leaveConsumerGroup(this.streamName, this.topicName, this.target.name);
210
+ }
127
211
  }
128
212
  }
129
213
  /** Delegates async disposal to `shutdown()`. */
130
214
  [Symbol.asyncDispose]() {
131
215
  return this.shutdown();
132
216
  }
217
+ // The next buffered record as the message to deliver. A group read marks
218
+ // the prefix through it handled when the consumer commits on its own.
219
+ take() {
220
+ if (this.reader === undefined) {
221
+ const message = this.buffer.shift();
222
+ if (message !== undefined)
223
+ this.consumedOffsets.set(message.partitionId, message.offset);
224
+ return message;
225
+ }
226
+ let record = this.records.shift();
227
+ while (record !== undefined && !this.reader.owns(record))
228
+ record = this.records.shift();
229
+ if (record === undefined)
230
+ return undefined;
231
+ if (this.autoCommit)
232
+ this.lastDelivery = record;
233
+ this.consumedOffsets.set(record.partitionId, record.offset);
234
+ const message = {
235
+ payload: record.payload,
236
+ partitionId: record.partitionId,
237
+ offset: record.offset,
238
+ ...(record.timestampMicros !== undefined ? { timestampMicros: record.timestampMicros } : {}),
239
+ headers: record.headers
240
+ };
241
+ this.delivered.set(message, record);
242
+ return message;
243
+ }
244
+ pending() {
245
+ return this.reader === undefined ? this.buffer.length > 0 : this.records.length > 0;
246
+ }
247
+ stopped() {
248
+ return this.shuttingDown;
249
+ }
250
+ // Asking for the next record or shutting down confirms that the previous
251
+ // delivery reached the caller. A cancelled poll cannot complete a record
252
+ // that the caller never received.
253
+ handledPrevious() {
254
+ if (this.lastDelivery === undefined || this.reader === undefined)
255
+ return;
256
+ this.reader.handled(this.lastDelivery);
257
+ this.lastDelivery = undefined;
258
+ this.handledSincePoll = true;
259
+ }
260
+ // One group poll. The delivered prefix is stored first, so a crash
261
+ // redelivers the current batch instead of skipping it.
262
+ async fillFromGroup(reader) {
263
+ if (this.handledSincePoll) {
264
+ try {
265
+ await reader.flushCompleted();
266
+ }
267
+ catch (error) {
268
+ // A policy change fences the prefix read under the old policy. Those
269
+ // records are delivered again from the stored offset, so nothing is
270
+ // lost and the consumer goes on without an error.
271
+ if (!(error instanceof FilterExecutionError) || error.reason !== "conflict")
272
+ throw error;
273
+ this.records.length = 0;
274
+ }
275
+ this.handledSincePoll = false;
276
+ }
277
+ const [page, more] = await reader.readRound();
278
+ this.moreScanned = more;
279
+ if (page !== undefined)
280
+ this.records.push(...page.records);
281
+ }
133
282
  async fillBuffer(signal) {
283
+ this.moreScanned = false;
134
284
  if (signal?.aborted === true) {
135
285
  throw new CancelledError("consumer poll aborted", { cause: signal.reason });
136
286
  }
137
- const strategy = this.started ? { kind: "next" } : this.startFrom;
287
+ if (this.reader !== undefined) {
288
+ await this.fillFromGroup(this.reader);
289
+ return;
290
+ }
291
+ let target = this.target;
292
+ if (target.kind === "group" &&
293
+ (this.startFrom.kind !== "next" || !this.autoCommit) &&
294
+ this.transport.syncConsumerGroup !== undefined) {
295
+ const assignment = await this.transport.syncConsumerGroup(this.streamName, this.topicName, target.name);
296
+ if (assignment === undefined)
297
+ throw new TransportError("the consumer group has no active assignment", true);
298
+ if (assignment.rejoined) {
299
+ this.nextOffsets.clear();
300
+ this.assignedPartitions.clear();
301
+ }
302
+ const assigned = new Set(assignment.partitions);
303
+ for (const partition of this.assignedPartitions) {
304
+ if (!assigned.has(partition)) {
305
+ this.nextOffsets.delete(partition);
306
+ this.gainedPartitions.delete(partition);
307
+ }
308
+ }
309
+ if (this.assignmentSeen) {
310
+ for (const partition of assigned) {
311
+ if (!this.assignedPartitions.has(partition))
312
+ this.gainedPartitions.add(partition);
313
+ }
314
+ }
315
+ this.assignedPartitions = assigned;
316
+ this.assignmentSeen = true;
317
+ if (assignment.partitions.length === 0)
318
+ return;
319
+ const partitionId = assignment.partitions[this.partitionCursor++ % assignment.partitions.length];
320
+ if (partitionId === undefined)
321
+ return;
322
+ target = { ...target, partitionId };
323
+ }
324
+ const partition = target.partitionId;
325
+ const next = partition === undefined ? undefined : this.nextOffsets.get(partition);
326
+ const strategy = next !== undefined
327
+ ? { kind: "offset", value: next }
328
+ : partition !== undefined
329
+ ? this.gainedPartitions.has(partition)
330
+ ? { kind: "next" }
331
+ : this.startFrom
332
+ : this.started
333
+ ? { kind: "next" }
334
+ : this.startFrom;
335
+ const polled = await this.transport.pollMessages(this.streamName, this.topicName, target, strategy, this.batchLength, this.autoCommit);
138
336
  this.started = true;
139
- const polled = await this.transport.pollMessages(this.streamName, this.topicName, this.target, strategy, this.batchLength, this.autoCommit);
140
337
  for (const message of polled)
141
- this.consumedOffsets.set(message.partitionId, message.offset);
338
+ this.nextOffsets.set(message.partitionId, message.offset + 1n);
142
339
  this.buffer.push(...polled);
143
340
  }
144
341
  }
@@ -1 +1 @@
1
- {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../src/stream/consumer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../src/stream/consumer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { LaserTransport } from "../iggy/apache-iggy.js";
2
+ export declare class ProducerRecorder {
3
+ readonly stream: string;
4
+ readonly topic: string;
5
+ readonly instanceId: `${string}-${string}-${string}-${string}-${string}`;
6
+ readonly firstActivity: number;
7
+ lastActivity: number;
8
+ submittedRecords: bigint;
9
+ submittedBytes: bigint;
10
+ confirmedRecords: bigint;
11
+ confirmedBytes: bigint;
12
+ failures: bigint;
13
+ lastSuccess: number | null;
14
+ readonly samples: bigint[];
15
+ sampleCount: bigint;
16
+ closed: boolean;
17
+ constructor(stream: string, topic: string, transport: LaserTransport);
18
+ begin(records: number, bytes: number): (success: boolean) => void;
19
+ snapshot(): ReadonlyMap<string, unknown>;
20
+ }
21
+ export declare function closeProducerStatistics(transport: LaserTransport): Promise<void>;
22
+ //# sourceMappingURL=producer-statistics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producer-statistics.d.ts","sourceRoot":"","sources":["../../src/stream/producer-statistics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,wBAAwB,CAAA;AAS5E,qBAAa,gBAAgB;IAezB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM;IAfxB,QAAQ,CAAC,UAAU,sDAAe;IAClC,QAAQ,CAAC,aAAa,SAAa;IACnC,YAAY,SAAqB;IACjC,gBAAgB,SAAK;IACrB,cAAc,SAAK;IACnB,gBAAgB,SAAK;IACrB,cAAc,SAAK;IACnB,QAAQ,SAAK;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAO;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAyC;IACnE,WAAW,SAAK;IAChB,MAAM,UAAQ;IAEd,YACW,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACtB,SAAS,EAAE,cAAc,EAmB1B;IAED,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAiBhE;IAED,QAAQ,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAuCvC;CACF;AAED,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtF"}
@@ -0,0 +1,214 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { encodeNamed } from "../wire/cbor.js";
3
+ import { AGDX_HELLO_CODE, AGDX_SET_CLIENT_METADATA_CODE } from "../wire/codes.js";
4
+ import { decodeHelloReply } from "../wire/hello.js";
5
+ const registries = new WeakMap();
6
+ const capacity = 32;
7
+ const sampleCapacity = 64;
8
+ export class ProducerRecorder {
9
+ stream;
10
+ topic;
11
+ instanceId = randomUUID();
12
+ firstActivity = Date.now();
13
+ lastActivity = this.firstActivity;
14
+ submittedRecords = 0n;
15
+ submittedBytes = 0n;
16
+ confirmedRecords = 0n;
17
+ confirmedBytes = 0n;
18
+ failures = 0n;
19
+ lastSuccess = null;
20
+ samples = Array(sampleCapacity).fill(0n);
21
+ sampleCount = 0n;
22
+ closed = false;
23
+ constructor(stream, topic, transport) {
24
+ this.stream = stream;
25
+ this.topic = topic;
26
+ const configured = configuredUnsigned("LASER_PRODUCER_TELEMETRY_INTERVAL_MS", 10_000);
27
+ if (configured === 0 ||
28
+ transport.openCoordinator === undefined ||
29
+ transport.connectsNodes !== true)
30
+ return;
31
+ const interval = Math.min(60_000, Math.max(1_000, Number.isFinite(configured) ? configured : 10_000));
32
+ let registry = registries.get(transport);
33
+ if (registry === undefined) {
34
+ registry = new Registry(transport, interval);
35
+ registries.set(transport, registry);
36
+ }
37
+ registry.add(this);
38
+ }
39
+ begin(records, bytes) {
40
+ this.submittedRecords += BigInt(records);
41
+ this.submittedBytes += BigInt(bytes);
42
+ this.lastActivity = Date.now();
43
+ const started = performance.now();
44
+ return (success) => {
45
+ this.lastActivity = Date.now();
46
+ if (success) {
47
+ this.confirmedRecords += BigInt(records);
48
+ this.confirmedBytes += BigInt(bytes);
49
+ this.lastSuccess = this.lastActivity;
50
+ }
51
+ else
52
+ this.failures += 1n;
53
+ const micros = Math.round((performance.now() - started) * 1_000);
54
+ const bucket = Math.min(63, Math.ceil(Math.log2(Math.max(1, micros))));
55
+ this.samples[bucket] = (this.samples[bucket] ?? 0n) + 1n;
56
+ this.sampleCount += 1n;
57
+ };
58
+ }
59
+ snapshot() {
60
+ const percentile = (n) => {
61
+ if (this.sampleCount === 0n ||
62
+ (n === 990n && this.sampleCount < 100n) ||
63
+ (n === 999n && this.sampleCount < 1000n))
64
+ return null;
65
+ const rank = (this.sampleCount * n + 999n) / 1000n;
66
+ let cumulative = 0n;
67
+ for (let i = 0; i < this.samples.length; i += 1) {
68
+ cumulative += this.samples[i] ?? 0n;
69
+ if (cumulative >= rank)
70
+ return 1n << BigInt(i);
71
+ }
72
+ return null;
73
+ };
74
+ return new Map([
75
+ ["instance_id", this.instanceId],
76
+ ["stream", this.stream],
77
+ ["topic", this.topic],
78
+ ["first_activity_millis", this.firstActivity],
79
+ ["last_activity_millis", this.lastActivity],
80
+ ["submitted_records", this.submittedRecords],
81
+ ["submitted_payload_bytes", this.submittedBytes],
82
+ ["confirmed_records", this.confirmedRecords],
83
+ ["confirmed_payload_bytes", this.confirmedBytes],
84
+ ["retries", null],
85
+ ["failed_calls", this.failures],
86
+ ["last_success_millis", this.lastSuccess],
87
+ [
88
+ "latency",
89
+ new Map([
90
+ ["samples", this.sampleCount],
91
+ ["p50_micros", percentile(500n)],
92
+ ["p99_micros", percentile(990n)],
93
+ ["p999_micros", percentile(999n)]
94
+ ])
95
+ ]
96
+ ]);
97
+ }
98
+ }
99
+ export async function closeProducerStatistics(transport) {
100
+ await registries.get(transport)?.close();
101
+ }
102
+ class Registry {
103
+ transport;
104
+ interval;
105
+ records = [];
106
+ closed = false;
107
+ timer;
108
+ connection;
109
+ constructor(transport, interval) {
110
+ this.transport = transport;
111
+ this.interval = interval;
112
+ }
113
+ add(record) {
114
+ this.records = this.records.filter((reference) => reference.deref()?.closed === false);
115
+ const configured = configuredUnsigned("LASER_PRODUCER_TELEMETRY_MAX_PRODUCERS", capacity);
116
+ const limit = Math.min(capacity, Math.max(0, Number.isSafeInteger(configured) ? configured : capacity));
117
+ if (this.closed || this.records.length >= limit)
118
+ return;
119
+ this.records.push(new WeakRef(record));
120
+ this.schedule();
121
+ }
122
+ schedule() {
123
+ if (this.closed || this.timer !== undefined)
124
+ return;
125
+ this.timer = setTimeout(() => {
126
+ void this.tick();
127
+ }, this.interval);
128
+ this.timer.unref();
129
+ }
130
+ async close() {
131
+ this.closed = true;
132
+ clearTimeout(this.timer);
133
+ this.records = [];
134
+ await this.connection?.close().catch(() => undefined);
135
+ this.connection = undefined;
136
+ }
137
+ async tick() {
138
+ this.records = this.records.filter((reference) => reference.deref()?.closed === false);
139
+ if (this.records.length === 0) {
140
+ const connection = this.connection;
141
+ this.connection = undefined;
142
+ this.timer = undefined;
143
+ await connection?.close().catch(() => undefined);
144
+ return;
145
+ }
146
+ try {
147
+ if (this.connection === undefined) {
148
+ const opening = this.transport.openCoordinator?.();
149
+ if (opening === undefined)
150
+ return;
151
+ try {
152
+ this.connection = await bounded(opening);
153
+ }
154
+ catch (error) {
155
+ void opening.then((connection) => connection.close(), () => undefined);
156
+ throw error;
157
+ }
158
+ if (this.closed) {
159
+ await this.connection.close();
160
+ this.connection = undefined;
161
+ return;
162
+ }
163
+ decodeHelloReply(await bounded(this.connection.send(AGDX_HELLO_CODE, new Uint8Array())));
164
+ }
165
+ const payload = encodeNamed(new Map([
166
+ ["producer_presence_version", 1],
167
+ ["observed_at_millis", Date.now()],
168
+ ["expires_after_millis", this.interval * 3],
169
+ [
170
+ "producers",
171
+ this.records.flatMap((reference) => {
172
+ const record = reference.deref();
173
+ return record === undefined ? [] : [record.snapshot()];
174
+ })
175
+ ]
176
+ ]));
177
+ if (payload.byteLength <= 65_536)
178
+ await bounded(this.connection.send(AGDX_SET_CLIENT_METADATA_CODE, payload));
179
+ }
180
+ catch {
181
+ await this.connection?.close().catch(() => undefined);
182
+ this.connection = undefined;
183
+ }
184
+ finally {
185
+ this.timer = undefined;
186
+ this.schedule();
187
+ }
188
+ }
189
+ }
190
+ async function bounded(operation) {
191
+ let timer;
192
+ try {
193
+ return await Promise.race([
194
+ operation,
195
+ new Promise((_resolve, reject) => {
196
+ timer = setTimeout(() => {
197
+ reject(new Error("producer telemetry timed out"));
198
+ }, 3_000);
199
+ timer.unref();
200
+ })
201
+ ]);
202
+ }
203
+ finally {
204
+ clearTimeout(timer);
205
+ }
206
+ }
207
+ function configuredUnsigned(name, fallback) {
208
+ const configured = process.env[name];
209
+ if (configured === undefined || !/^[+]?[0-9]+$/.test(configured))
210
+ return fallback;
211
+ const parsed = Number(configured);
212
+ return Number.isSafeInteger(parsed) ? parsed : fallback;
213
+ }
214
+ //# sourceMappingURL=producer-statistics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producer-statistics.js","sourceRoot":"","sources":["../../src/stream/producer-statistics.ts"],"names":[],"mappings":"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"}