@agoric/telemetry 0.6.3-u19.0 → 0.6.3-u19.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/package.json +3 -3
- package/src/flight-recorder.js +13 -6
- package/src/index.js +5 -2
- package/src/make-slog-sender.js +7 -7
- package/test/flight-recorder.test.js +12 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,23 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
### [0.6.3-u19.2](https://github.com/Agoric/agoric-sdk/compare/@agoric/telemetry@0.6.3-u19.1...@agoric/telemetry@0.6.3-u19.2) (2025-03-13)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @agoric/telemetry
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### [0.6.3-u19.1](https://github.com/Agoric/agoric-sdk/compare/@agoric/telemetry@0.6.3-u19.0...@agoric/telemetry@0.6.3-u19.1) (2025-03-03)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* Properly synchronize slog sender termination ([2fc342c](https://github.com/Agoric/agoric-sdk/commit/2fc342c180e296208d077a1d4799da139d3b7848))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
6
23
|
### [0.6.3-u19.0](https://github.com/Agoric/agoric-sdk/compare/@agoric/telemetry@0.6.2...@agoric/telemetry@0.6.3-u19.0) (2025-02-24)
|
|
7
24
|
|
|
8
25
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/telemetry",
|
|
3
|
-
"version": "0.6.3-u19.
|
|
3
|
+
"version": "0.6.3-u19.2",
|
|
4
4
|
"description": "Agoric's telemetry implementation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": "https://github.com/Agoric/agoric-sdk",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"author": "Agoric",
|
|
23
23
|
"license": "Apache-2.0",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@agoric/internal": "^0.4.0-u19.
|
|
25
|
+
"@agoric/internal": "^0.4.0-u19.2",
|
|
26
26
|
"@agoric/store": "^0.9.3-u19.0",
|
|
27
27
|
"@endo/errors": "^1.2.9",
|
|
28
28
|
"@endo/init": "^1.1.8",
|
|
@@ -68,5 +68,5 @@
|
|
|
68
68
|
"typeCoverage": {
|
|
69
69
|
"atLeast": 88.88
|
|
70
70
|
},
|
|
71
|
-
"gitHead": "
|
|
71
|
+
"gitHead": "f0ae74b84cb6de3724bfdcd18b4bea7e8199dee1"
|
|
72
72
|
}
|
package/src/flight-recorder.js
CHANGED
|
@@ -76,7 +76,7 @@ const initializeCircularBuffer = async (bufferFile, circularBufferSize) => {
|
|
|
76
76
|
* @param {(outbuf: Uint8Array, readStart: number, firstReadLength: number) => void} readRecord
|
|
77
77
|
* @param {(record: Uint8Array, firstWriteLength: number, circEnd: bigint) => Promise<void>} writeRecord
|
|
78
78
|
*/
|
|
79
|
-
function
|
|
79
|
+
function makeCircBufMethods(arenaSize, header, readRecord, writeRecord) {
|
|
80
80
|
const readCircBuf = (outbuf, offset = 0) => {
|
|
81
81
|
offset + outbuf.byteLength <= arenaSize ||
|
|
82
82
|
Fail`Reading past end of circular buffer`;
|
|
@@ -269,14 +269,17 @@ export const makeSimpleCircularBuffer = async ({
|
|
|
269
269
|
await file.write(headerBuffer, undefined, undefined, 0);
|
|
270
270
|
};
|
|
271
271
|
|
|
272
|
-
return
|
|
272
|
+
return {
|
|
273
|
+
fileHandle: file,
|
|
274
|
+
...makeCircBufMethods(arenaSize, header, readRecord, writeRecord),
|
|
275
|
+
};
|
|
273
276
|
};
|
|
274
277
|
|
|
275
278
|
/**
|
|
276
279
|
*
|
|
277
|
-
* @param {Pick<
|
|
280
|
+
* @param {Pick<CircularBuffer, 'fileHandle' | 'writeCircBuf'>} circBuf
|
|
278
281
|
*/
|
|
279
|
-
export const makeSlogSenderFromBuffer = ({ writeCircBuf }) => {
|
|
282
|
+
export const makeSlogSenderFromBuffer = ({ fileHandle, writeCircBuf }) => {
|
|
280
283
|
/** @type {Promise<void>} */
|
|
281
284
|
let toWrite = Promise.resolve();
|
|
282
285
|
const writeJSON = (obj, serialized = serializeSlogObj(obj)) => {
|
|
@@ -289,6 +292,10 @@ export const makeSlogSenderFromBuffer = ({ writeCircBuf }) => {
|
|
|
289
292
|
forceFlush: async () => {
|
|
290
293
|
await toWrite;
|
|
291
294
|
},
|
|
295
|
+
shutdown: async () => {
|
|
296
|
+
await toWrite;
|
|
297
|
+
await fileHandle.close();
|
|
298
|
+
},
|
|
292
299
|
usesJsonObject: true,
|
|
293
300
|
});
|
|
294
301
|
};
|
|
@@ -299,6 +306,6 @@ export const makeSlogSenderFromBuffer = ({ writeCircBuf }) => {
|
|
|
299
306
|
* @type {import('./index.js').MakeSlogSender}
|
|
300
307
|
*/
|
|
301
308
|
export const makeSlogSender = async opts => {
|
|
302
|
-
const { writeCircBuf } = await makeSimpleCircularBuffer(opts);
|
|
303
|
-
return makeSlogSenderFromBuffer({ writeCircBuf });
|
|
309
|
+
const { fileHandle, writeCircBuf } = await makeSimpleCircularBuffer(opts);
|
|
310
|
+
return makeSlogSenderFromBuffer({ fileHandle, writeCircBuf });
|
|
304
311
|
};
|
package/src/index.js
CHANGED
|
@@ -34,7 +34,10 @@ export const tryFlushSlogSender = async (
|
|
|
34
34
|
slogSender,
|
|
35
35
|
{ env = {}, log } = {},
|
|
36
36
|
) => {
|
|
37
|
-
await
|
|
37
|
+
await null;
|
|
38
|
+
try {
|
|
39
|
+
await slogSender?.forceFlush?.();
|
|
40
|
+
} catch (err) {
|
|
38
41
|
log?.('Failed to flush slog sender', err);
|
|
39
42
|
if (err.errors) {
|
|
40
43
|
for (const error of err.errors) {
|
|
@@ -44,7 +47,7 @@ export const tryFlushSlogSender = async (
|
|
|
44
47
|
if (env.SLOGSENDER_FAIL_ON_ERROR) {
|
|
45
48
|
throw err;
|
|
46
49
|
}
|
|
47
|
-
}
|
|
50
|
+
}
|
|
48
51
|
};
|
|
49
52
|
|
|
50
53
|
export const getResourceAttributes = ({
|
package/src/make-slog-sender.js
CHANGED
|
@@ -158,15 +158,15 @@ export const makeSlogSender = async (opts = {}) => {
|
|
|
158
158
|
}
|
|
159
159
|
};
|
|
160
160
|
return Object.assign(slogSender, {
|
|
161
|
-
forceFlush: async () =>
|
|
162
|
-
PromiseAllOrErrors([
|
|
161
|
+
forceFlush: async () => {
|
|
162
|
+
await PromiseAllOrErrors([
|
|
163
163
|
...senders.map(sender => sender.forceFlush?.()),
|
|
164
164
|
...sendErrors.splice(0).map(err => Promise.reject(err)),
|
|
165
|
-
])
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
165
|
+
]);
|
|
166
|
+
},
|
|
167
|
+
shutdown: async () => {
|
|
168
|
+
await PromiseAllOrErrors(senders.map(sender => sender.shutdown?.()));
|
|
169
|
+
},
|
|
170
170
|
usesJsonObject: hasSenderUsingJsonObj,
|
|
171
171
|
});
|
|
172
172
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
2
3
|
import tmp from 'tmp';
|
|
3
4
|
import { test } from './prepare-test-env-ava.js';
|
|
4
5
|
|
|
@@ -17,12 +18,21 @@ const bufferTests = test.macro(
|
|
|
17
18
|
async (t, input) => {
|
|
18
19
|
const BUFFER_SIZE = 512;
|
|
19
20
|
|
|
20
|
-
const {
|
|
21
|
+
const {
|
|
22
|
+
name: tmpFile,
|
|
23
|
+
fd,
|
|
24
|
+
removeCallback,
|
|
25
|
+
} = tmp.fileSync({ detachDescriptor: true });
|
|
26
|
+
t.teardown(removeCallback);
|
|
27
|
+
const fileHandle = /** @type {import('fs/promises').FileHandle} */ ({
|
|
28
|
+
close: promisify(fs.close.bind(fs, fd)),
|
|
29
|
+
});
|
|
21
30
|
const { readCircBuf, writeCircBuf } = await input.makeBuffer({
|
|
22
31
|
circularBufferSize: BUFFER_SIZE,
|
|
23
32
|
circularBufferFilename: tmpFile,
|
|
24
33
|
});
|
|
25
|
-
const slogSender = makeSlogSenderFromBuffer({ writeCircBuf });
|
|
34
|
+
const slogSender = makeSlogSenderFromBuffer({ fileHandle, writeCircBuf });
|
|
35
|
+
t.teardown(slogSender.shutdown);
|
|
26
36
|
slogSender({ type: 'start' });
|
|
27
37
|
await slogSender.forceFlush();
|
|
28
38
|
t.is(fs.readFileSync(tmpFile, { encoding: 'utf8' }).length, BUFFER_SIZE);
|
|
@@ -73,8 +83,6 @@ const bufferTests = test.macro(
|
|
|
73
83
|
slogSender(null, 'PRE-SERIALIZED');
|
|
74
84
|
await slogSender.forceFlush();
|
|
75
85
|
t.truthy(fs.readFileSync(tmpFile).includes('PRE-SERIALIZED'));
|
|
76
|
-
// console.log({ tmpFile });
|
|
77
|
-
removeCallback();
|
|
78
86
|
},
|
|
79
87
|
);
|
|
80
88
|
|