signalk-questdb 2.1.0 → 2.1.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/dist/ilp-writer.d.ts +1 -0
- package/dist/ilp-writer.js +17 -1
- package/dist/ilp-writer.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/migration.js +40 -45
- package/dist/migration.js.map +1 -1
- package/dist/wal-monitor.js +1 -1
- package/dist/wal-monitor.js.map +1 -1
- package/package.json +2 -2
- package/dist/test/config.test.d.ts +0 -1
- package/dist/test/config.test.js +0 -161
- package/dist/test/config.test.js.map +0 -1
- package/dist/test/configpanel-responses.test.d.ts +0 -1
- package/dist/test/configpanel-responses.test.js +0 -197
- package/dist/test/configpanel-responses.test.js.map +0 -1
- package/dist/test/console-proxy.test.d.ts +0 -1
- package/dist/test/console-proxy.test.js +0 -664
- package/dist/test/console-proxy.test.js.map +0 -1
- package/dist/test/container-env.test.d.ts +0 -1
- package/dist/test/container-env.test.js +0 -70
- package/dist/test/container-env.test.js.map +0 -1
- package/dist/test/delta-routing.test.d.ts +0 -1
- package/dist/test/delta-routing.test.js +0 -258
- package/dist/test/delta-routing.test.js.map +0 -1
- package/dist/test/full-export-range.test.d.ts +0 -1
- package/dist/test/full-export-range.test.js +0 -78
- package/dist/test/full-export-range.test.js.map +0 -1
- package/dist/test/history-v1.test.d.ts +0 -1
- package/dist/test/history-v1.test.js +0 -676
- package/dist/test/history-v1.test.js.map +0 -1
- package/dist/test/history-v2.test.d.ts +0 -1
- package/dist/test/history-v2.test.js +0 -1001
- package/dist/test/history-v2.test.js.map +0 -1
- package/dist/test/host-limits.test.d.ts +0 -1
- package/dist/test/host-limits.test.js +0 -81
- package/dist/test/host-limits.test.js.map +0 -1
- package/dist/test/ilp-writer.test.d.ts +0 -1
- package/dist/test/ilp-writer.test.js +0 -419
- package/dist/test/ilp-writer.test.js.map +0 -1
- package/dist/test/influx-detect.test.d.ts +0 -1
- package/dist/test/influx-detect.test.js +0 -287
- package/dist/test/influx-detect.test.js.map +0 -1
- package/dist/test/migration.test.d.ts +0 -1
- package/dist/test/migration.test.js +0 -851
- package/dist/test/migration.test.js.map +0 -1
- package/dist/test/package-e2e.test.d.ts +0 -1
- package/dist/test/package-e2e.test.js +0 -306
- package/dist/test/package-e2e.test.js.map +0 -1
- package/dist/test/path-matcher.test.d.ts +0 -1
- package/dist/test/path-matcher.test.js +0 -224
- package/dist/test/path-matcher.test.js.map +0 -1
- package/dist/test/query-client.test.d.ts +0 -1
- package/dist/test/query-client.test.js +0 -299
- package/dist/test/query-client.test.js.map +0 -1
- package/dist/test/questdb-endpoint.test.d.ts +0 -1
- package/dist/test/questdb-endpoint.test.js +0 -297
- package/dist/test/questdb-endpoint.test.js.map +0 -1
- package/dist/test/restore.test.d.ts +0 -1
- package/dist/test/restore.test.js +0 -543
- package/dist/test/restore.test.js.map +0 -1
- package/dist/test/time-range.test.d.ts +0 -1
- package/dist/test/time-range.test.js +0 -53
- package/dist/test/time-range.test.js.map +0 -1
- package/dist/test/wal-monitor.test.d.ts +0 -1
- package/dist/test/wal-monitor.test.js +0 -405
- package/dist/test/wal-monitor.test.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"history-v2.test.js","sourceRoot":"","sources":["../../src/test/history-v2.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { mkdtemp, writeFile, rm } from "fs/promises";
|
|
4
|
-
import { tmpdir } from "os";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
import { nofileClampSatisfied, parseMaxMapCount, evaluateMaxMapCount, readMaxMapCount, RECOMMENDED_MAX_MAP_COUNT, } from "../host-limits.js";
|
|
7
|
-
describe("parseMaxMapCount", () => {
|
|
8
|
-
it("parses the proc file format (number + trailing newline)", () => {
|
|
9
|
-
assert.equal(parseMaxMapCount("65530\n"), 65530);
|
|
10
|
-
});
|
|
11
|
-
it("parses without a trailing newline", () => {
|
|
12
|
-
assert.equal(parseMaxMapCount("1048576"), 1048576);
|
|
13
|
-
});
|
|
14
|
-
it("rejects garbage", () => {
|
|
15
|
-
assert.equal(parseMaxMapCount(""), null);
|
|
16
|
-
assert.equal(parseMaxMapCount("not a number\n"), null);
|
|
17
|
-
assert.equal(parseMaxMapCount("-1\n"), null);
|
|
18
|
-
assert.equal(parseMaxMapCount("65530 65530\n"), null);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
describe("evaluateMaxMapCount", () => {
|
|
22
|
-
it("flags the stock Debian default as too low", () => {
|
|
23
|
-
const status = evaluateMaxMapCount(65530);
|
|
24
|
-
assert.equal(status.tooLow, true);
|
|
25
|
-
assert.equal(status.current, 65530);
|
|
26
|
-
assert.equal(status.recommended, RECOMMENDED_MAX_MAP_COUNT);
|
|
27
|
-
});
|
|
28
|
-
it("accepts exactly the recommended value", () => {
|
|
29
|
-
assert.equal(evaluateMaxMapCount(RECOMMENDED_MAX_MAP_COUNT).tooLow, false);
|
|
30
|
-
});
|
|
31
|
-
it("flags one below the recommended value", () => {
|
|
32
|
-
assert.equal(evaluateMaxMapCount(RECOMMENDED_MAX_MAP_COUNT - 1).tooLow, true);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
describe("readMaxMapCount", () => {
|
|
36
|
-
it("reads and evaluates a proc-style file", async () => {
|
|
37
|
-
const dir = await mkdtemp(join(tmpdir(), "host-limits-"));
|
|
38
|
-
try {
|
|
39
|
-
const file = join(dir, "max_map_count");
|
|
40
|
-
await writeFile(file, "65530\n");
|
|
41
|
-
const status = await readMaxMapCount(file);
|
|
42
|
-
assert.ok(status);
|
|
43
|
-
assert.equal(status.current, 65530);
|
|
44
|
-
assert.equal(status.tooLow, true);
|
|
45
|
-
}
|
|
46
|
-
finally {
|
|
47
|
-
await rm(dir, { recursive: true, force: true });
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
it("returns null when the file is missing (non-Linux hosts)", async () => {
|
|
51
|
-
const status = await readMaxMapCount("/nonexistent/max_map_count");
|
|
52
|
-
assert.equal(status, null);
|
|
53
|
-
});
|
|
54
|
-
it("returns null on unparseable content instead of a bogus warning", async () => {
|
|
55
|
-
const dir = await mkdtemp(join(tmpdir(), "host-limits-"));
|
|
56
|
-
try {
|
|
57
|
-
const file = join(dir, "max_map_count");
|
|
58
|
-
await writeFile(file, "garbage\n");
|
|
59
|
-
assert.equal(await readMaxMapCount(file), null);
|
|
60
|
-
}
|
|
61
|
-
finally {
|
|
62
|
-
await rm(dir, { recursive: true, force: true });
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
describe("nofileClampSatisfied", () => {
|
|
67
|
-
it("is satisfied when soft and hard both meet the request", () => {
|
|
68
|
-
assert.equal(nofileClampSatisfied(1048576, { soft: 1048576, hard: 1048576 }), true);
|
|
69
|
-
assert.equal(nofileClampSatisfied(1048576, { soft: 2097152, hard: 2097152 }), true);
|
|
70
|
-
});
|
|
71
|
-
it("is not satisfied while the container still runs on the clamped limit", () => {
|
|
72
|
-
assert.equal(nofileClampSatisfied(1048576, { soft: 524288, hard: 524288 }), false);
|
|
73
|
-
});
|
|
74
|
-
it("requires the SOFT limit too — that is what bounds fd allocation", () => {
|
|
75
|
-
assert.equal(nofileClampSatisfied(1048576, { soft: 1024, hard: 1048576 }), false);
|
|
76
|
-
});
|
|
77
|
-
it("treats an unknown live limit as not satisfied (advisory stays)", () => {
|
|
78
|
-
assert.equal(nofileClampSatisfied(1048576, null), false);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
//# sourceMappingURL=host-limits.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host-limits.test.js","sourceRoot":"","sources":["../../src/test/host-limits.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,419 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import * as net from "net";
|
|
4
|
-
import { ILPWriter, DEFAULT_FLUSH_INTERVAL_MS } from "../ilp-writer.js";
|
|
5
|
-
describe("ILPWriter", () => {
|
|
6
|
-
it("sends correctly formatted ILP lines over TCP", async () => {
|
|
7
|
-
const received = [];
|
|
8
|
-
const server = net.createServer((socket) => {
|
|
9
|
-
socket.on("data", (data) => {
|
|
10
|
-
received.push(data.toString());
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
14
|
-
const port = server.address().port;
|
|
15
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
16
|
-
flushIntervalMs: 100,
|
|
17
|
-
});
|
|
18
|
-
await writer.connect();
|
|
19
|
-
const ts = new Date("2024-06-15T12:00:00.000Z");
|
|
20
|
-
writer.write("navigation.speedOverGround", "self", 6.4, ts);
|
|
21
|
-
// Wait for flush timer
|
|
22
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
23
|
-
await writer.disconnect();
|
|
24
|
-
server.close();
|
|
25
|
-
const all = received.join("");
|
|
26
|
-
assert.ok(all.includes("signalk,path=navigation.speedOverGround,context=self value=6.4"), `Expected ILP line in: ${all}`);
|
|
27
|
-
assert.ok(all.endsWith("\n"), "ILP line must end with newline");
|
|
28
|
-
});
|
|
29
|
-
it("sends string values to signalk_str table", async () => {
|
|
30
|
-
const received = [];
|
|
31
|
-
const server = net.createServer((socket) => {
|
|
32
|
-
socket.on("data", (data) => {
|
|
33
|
-
received.push(data.toString());
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
37
|
-
const port = server.address().port;
|
|
38
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
39
|
-
flushIntervalMs: 100,
|
|
40
|
-
});
|
|
41
|
-
await writer.connect();
|
|
42
|
-
const ts = new Date("2024-06-15T12:00:00.000Z");
|
|
43
|
-
writer.writeString("navigation.state", "self", "motoring", ts);
|
|
44
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
45
|
-
await writer.disconnect();
|
|
46
|
-
server.close();
|
|
47
|
-
const all = received.join("");
|
|
48
|
-
assert.ok(all.includes('signalk_str,path=navigation.state,context=self value_str="motoring"'), `Expected string ILP line in: ${all}`);
|
|
49
|
-
});
|
|
50
|
-
// ILP is a LINE protocol. A raw newline inside a quoted value splits the
|
|
51
|
-
// row into two malformed lines and QuestDB silently stores NEITHER —
|
|
52
|
-
// verified against a live instance, which recorded 0 rows for such a write.
|
|
53
|
-
// Signal K string values do carry newlines (notification messages,
|
|
54
|
-
// free-text fields), and the failure is invisible: no error, no row.
|
|
55
|
-
it("encodes newlines in string values so the row stays one ILP line", async () => {
|
|
56
|
-
const received = [];
|
|
57
|
-
const server = net.createServer((socket) => {
|
|
58
|
-
socket.on("data", (data) => {
|
|
59
|
-
received.push(data.toString());
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
63
|
-
const port = server.address().port;
|
|
64
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
65
|
-
flushIntervalMs: 100,
|
|
66
|
-
});
|
|
67
|
-
await writer.connect();
|
|
68
|
-
const ts = new Date("2024-06-15T12:00:00.000Z");
|
|
69
|
-
writer.writeString("notifications.msg", "self", "line1\nline2\rmore", ts);
|
|
70
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
71
|
-
await writer.disconnect();
|
|
72
|
-
server.close();
|
|
73
|
-
const all = received.join("");
|
|
74
|
-
// Exactly one physical line reached the socket.
|
|
75
|
-
assert.strictEqual(all.split("\n").filter((l) => l.length > 0).length, 1, `Expected one ILP line, got: ${JSON.stringify(all)}`);
|
|
76
|
-
assert.ok(all.includes('value_str="line1\\nline2\\rmore"'), `Expected escaped newlines in: ${JSON.stringify(all)}`);
|
|
77
|
-
});
|
|
78
|
-
it("tags booleans with value_kind and leaves text untagged", async () => {
|
|
79
|
-
// value_kind is what keeps a recorded boolean distinguishable from a
|
|
80
|
-
// path whose text value is literally "true". Text must stay untagged so
|
|
81
|
-
// it reads back exactly like rows written before the column existed.
|
|
82
|
-
const received = [];
|
|
83
|
-
const server = net.createServer((socket) => {
|
|
84
|
-
socket.on("data", (chunk) => received.push(chunk.toString()));
|
|
85
|
-
});
|
|
86
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
87
|
-
const port = server.address().port;
|
|
88
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
89
|
-
flushIntervalMs: 100,
|
|
90
|
-
});
|
|
91
|
-
await writer.connect();
|
|
92
|
-
const ts = new Date("2024-06-15T12:00:00.000Z");
|
|
93
|
-
writer.writeString("switches.bilge.state", "self", "true", ts, "boolean");
|
|
94
|
-
writer.writeString("some.text.path", "self", "true", ts);
|
|
95
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
96
|
-
await writer.disconnect();
|
|
97
|
-
server.close();
|
|
98
|
-
const all = received.join("");
|
|
99
|
-
assert.ok(all.includes('signalk_str,path=switches.bilge.state,context=self,value_kind=boolean value_str="true"'), `Expected a tagged boolean line in: ${all}`);
|
|
100
|
-
assert.ok(all.includes('signalk_str,path=some.text.path,context=self value_str="true"'), `Expected an untagged text line in: ${all}`);
|
|
101
|
-
});
|
|
102
|
-
it("tags rows with their source and leaves sourceless writes untagged", async () => {
|
|
103
|
-
// The source tag is what lets interleaved multi-receiver streams be told
|
|
104
|
-
// apart afterwards. A write without one must omit the tag entirely so the
|
|
105
|
-
// column stays null, exactly like rows written before it existed.
|
|
106
|
-
const received = [];
|
|
107
|
-
const server = net.createServer((socket) => {
|
|
108
|
-
socket.on("data", (chunk) => received.push(chunk.toString()));
|
|
109
|
-
});
|
|
110
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
111
|
-
const port = server.address().port;
|
|
112
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
113
|
-
flushIntervalMs: 100,
|
|
114
|
-
});
|
|
115
|
-
await writer.connect();
|
|
116
|
-
const ts = new Date("2024-06-15T12:00:00.000Z");
|
|
117
|
-
writer.write("navigation.speedOverGround", "self", 6.4, ts, "gps.main");
|
|
118
|
-
writer.writeString("navigation.state", "self", "true", ts, "boolean", "n2k-on-ve.can0.115");
|
|
119
|
-
writer.writePosition("self", { latitude: 60.1, longitude: 24.9 }, ts, "gps.main");
|
|
120
|
-
writer.write("environment.depth.belowKeel", "self", 3.2, ts);
|
|
121
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
122
|
-
await writer.disconnect();
|
|
123
|
-
server.close();
|
|
124
|
-
const all = received.join("");
|
|
125
|
-
assert.ok(all.includes("signalk,path=navigation.speedOverGround,context=self,source=gps.main value=6.4"), `Expected a source-tagged numeric line in: ${all}`);
|
|
126
|
-
assert.ok(all.includes("signalk_str,path=navigation.state,context=self," +
|
|
127
|
-
'source=n2k-on-ve.can0.115,value_kind=boolean value_str="true"'), `Expected a source-tagged string line in: ${all}`);
|
|
128
|
-
assert.ok(all.includes("signalk_position,context=self,source=gps.main lat=60.1,lon=24.9"), `Expected a source-tagged position line in: ${all}`);
|
|
129
|
-
assert.ok(all.includes("signalk,path=environment.depth.belowKeel,context=self value=3.2"), `Expected the sourceless line to carry no source tag in: ${all}`);
|
|
130
|
-
});
|
|
131
|
-
it("sends position data to signalk_position table", async () => {
|
|
132
|
-
const received = [];
|
|
133
|
-
const server = net.createServer((socket) => {
|
|
134
|
-
socket.on("data", (data) => {
|
|
135
|
-
received.push(data.toString());
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
139
|
-
const port = server.address().port;
|
|
140
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
141
|
-
flushIntervalMs: 100,
|
|
142
|
-
});
|
|
143
|
-
await writer.connect();
|
|
144
|
-
const ts = new Date("2024-06-15T12:00:00.000Z");
|
|
145
|
-
writer.writePosition("self", { latitude: 52.5, longitude: 13.4 }, ts);
|
|
146
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
147
|
-
await writer.disconnect();
|
|
148
|
-
server.close();
|
|
149
|
-
const all = received.join("");
|
|
150
|
-
assert.ok(all.includes("signalk_position,context=self lat=52.5,lon=13.4"), `Expected position ILP line in: ${all}`);
|
|
151
|
-
});
|
|
152
|
-
it("retries a batch after the connection drops mid-flush", async () => {
|
|
153
|
-
const received = [];
|
|
154
|
-
let firstSocket = true;
|
|
155
|
-
// First connection accepts then immediately destroys the socket (mimicking
|
|
156
|
-
// an overloaded QuestDB dropping us mid-write); the second keeps the data.
|
|
157
|
-
const server = net.createServer((socket) => {
|
|
158
|
-
if (firstSocket) {
|
|
159
|
-
firstSocket = false;
|
|
160
|
-
socket.on("data", () => socket.destroy());
|
|
161
|
-
// Destroy shortly after connect even with no data, so a buffered batch
|
|
162
|
-
// written into this socket is lost and must be re-queued.
|
|
163
|
-
setTimeout(() => socket.destroy(), 50);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
socket.on("data", (data) => received.push(data.toString()));
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
170
|
-
const port = server.address().port;
|
|
171
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
172
|
-
flushIntervalMs: 100,
|
|
173
|
-
timing: { initialReconnectDelay: 100, stableConnectionMs: 50 },
|
|
174
|
-
});
|
|
175
|
-
await writer.connect();
|
|
176
|
-
const ts = new Date("2024-06-15T12:00:00.000Z");
|
|
177
|
-
writer.write("navigation.speedOverGround", "self", 6.4, ts);
|
|
178
|
-
// Long enough for: first socket destroyed, reconnect (100ms backoff),
|
|
179
|
-
// re-flush of the retained batch onto the second socket.
|
|
180
|
-
await new Promise((resolve) => setTimeout(resolve, 1200));
|
|
181
|
-
await writer.disconnect();
|
|
182
|
-
await new Promise((resolve) => server.close(() => resolve()));
|
|
183
|
-
const all = received.join("");
|
|
184
|
-
assert.ok(all.includes("signalk,path=navigation.speedOverGround,context=self value=6.4"), `Re-queued batch should arrive on reconnect, got: ${all}`);
|
|
185
|
-
});
|
|
186
|
-
it("reports unhealthy after repeated instant-drop flaps", async () => {
|
|
187
|
-
// Server accepts every connection then instantly destroys it — the exact
|
|
188
|
-
// flap pattern Kees saw (ILP connected, dropped, reconnected, on repeat).
|
|
189
|
-
const server = net.createServer((socket) => socket.destroy());
|
|
190
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
191
|
-
const port = server.address().port;
|
|
192
|
-
let unhealthyMsg = null;
|
|
193
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
194
|
-
onUnhealthy: (msg) => {
|
|
195
|
-
unhealthyMsg = msg;
|
|
196
|
-
},
|
|
197
|
-
timing: {
|
|
198
|
-
initialReconnectDelay: 20,
|
|
199
|
-
maxReconnectDelay: 40,
|
|
200
|
-
stableConnectionMs: 1000,
|
|
201
|
-
unhealthyAfterFlaps: 3,
|
|
202
|
-
},
|
|
203
|
-
});
|
|
204
|
-
await writer.connect().catch(() => { });
|
|
205
|
-
// 3 flaps at ~20-40ms backoff each resolve well within this window.
|
|
206
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
207
|
-
await writer.disconnect();
|
|
208
|
-
await new Promise((resolve) => server.close(() => resolve()));
|
|
209
|
-
assert.ok(unhealthyMsg !== null, "onUnhealthy should fire after repeated flaps");
|
|
210
|
-
assert.match(unhealthyMsg, /dropping the write connection/);
|
|
211
|
-
});
|
|
212
|
-
it("recovers health when a connection stays up, without a later close", async () => {
|
|
213
|
-
// First few connections instant-drop (driving the writer unhealthy), then
|
|
214
|
-
// the server stops dropping and just holds the socket open. Health must be
|
|
215
|
-
// restored by the stability timer alone — there is no subsequent close to
|
|
216
|
-
// trigger it. This is the exact regression CR caught: markHealthy gated on
|
|
217
|
-
// the close handler would leave the writer stuck unhealthy forever.
|
|
218
|
-
let connCount = 0;
|
|
219
|
-
const heldSockets = [];
|
|
220
|
-
const server = net.createServer((socket) => {
|
|
221
|
-
connCount++;
|
|
222
|
-
if (connCount <= 3) {
|
|
223
|
-
socket.destroy();
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
// Keep the socket open so the connection proves stable.
|
|
227
|
-
heldSockets.push(socket);
|
|
228
|
-
socket.on("data", () => { });
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
232
|
-
const port = server.address().port;
|
|
233
|
-
let unhealthyMsg = null;
|
|
234
|
-
let healthyFired = false;
|
|
235
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
236
|
-
onUnhealthy: (msg) => {
|
|
237
|
-
unhealthyMsg = msg;
|
|
238
|
-
},
|
|
239
|
-
onHealthy: () => {
|
|
240
|
-
healthyFired = true;
|
|
241
|
-
},
|
|
242
|
-
timing: {
|
|
243
|
-
initialReconnectDelay: 20,
|
|
244
|
-
maxReconnectDelay: 40,
|
|
245
|
-
stableConnectionMs: 150,
|
|
246
|
-
unhealthyAfterFlaps: 3,
|
|
247
|
-
},
|
|
248
|
-
});
|
|
249
|
-
await writer.connect().catch(() => { });
|
|
250
|
-
// Window covers: 3 flaps (~20-40ms each) → unhealthy, then a connection
|
|
251
|
-
// that survives stableConnectionMs (150ms) → onHealthy via the timer.
|
|
252
|
-
await new Promise((resolve) => setTimeout(resolve, 800));
|
|
253
|
-
await writer.disconnect();
|
|
254
|
-
await new Promise((resolve) => server.close(() => resolve()));
|
|
255
|
-
heldSockets.forEach((s) => s.destroy());
|
|
256
|
-
assert.ok(unhealthyMsg !== null, "writer should have gone unhealthy from the initial flaps");
|
|
257
|
-
assert.ok(healthyFired, "onHealthy should fire once a connection stays up past stableConnectionMs, with no subsequent close");
|
|
258
|
-
});
|
|
259
|
-
it("escapes special characters in tags", async () => {
|
|
260
|
-
const received = [];
|
|
261
|
-
const server = net.createServer((socket) => {
|
|
262
|
-
socket.on("data", (data) => {
|
|
263
|
-
received.push(data.toString());
|
|
264
|
-
});
|
|
265
|
-
});
|
|
266
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
267
|
-
const port = server.address().port;
|
|
268
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
269
|
-
flushIntervalMs: 100,
|
|
270
|
-
});
|
|
271
|
-
await writer.connect();
|
|
272
|
-
const ts = new Date("2024-06-15T12:00:00.000Z");
|
|
273
|
-
writer.write("path with spaces", "ctx,with,commas", 1.0, ts);
|
|
274
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
275
|
-
await writer.disconnect();
|
|
276
|
-
server.close();
|
|
277
|
-
const all = received.join("");
|
|
278
|
-
assert.ok(all.includes("path\\ with\\ spaces"), `Spaces should be escaped in: ${all}`);
|
|
279
|
-
assert.ok(all.includes("ctx\\,with\\,commas"), `Commas should be escaped in: ${all}`);
|
|
280
|
-
});
|
|
281
|
-
it("defaults the flush interval to 5s (batching, not the old 500ms)", async () => {
|
|
282
|
-
assert.equal(DEFAULT_FLUSH_INTERVAL_MS, 5000);
|
|
283
|
-
const received = [];
|
|
284
|
-
const server = net.createServer((socket) => {
|
|
285
|
-
socket.on("data", (data) => received.push(data.toString()));
|
|
286
|
-
});
|
|
287
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
288
|
-
const port = server.address().port;
|
|
289
|
-
// No flushIntervalMs option: nothing may be flushed inside a window that
|
|
290
|
-
// the previous 500ms default would have flushed in.
|
|
291
|
-
const writer = new ILPWriter("127.0.0.1", port);
|
|
292
|
-
await writer.connect();
|
|
293
|
-
writer.write("navigation.speedOverGround", "self", 6.4, new Date());
|
|
294
|
-
await new Promise((resolve) => setTimeout(resolve, 700));
|
|
295
|
-
assert.equal(received.join(""), "", "default-configured writer must not flush within 700ms");
|
|
296
|
-
await writer.disconnect();
|
|
297
|
-
await new Promise((resolve) => server.close(() => resolve()));
|
|
298
|
-
});
|
|
299
|
-
it("honors a custom flushIntervalMs", async () => {
|
|
300
|
-
const received = [];
|
|
301
|
-
const server = net.createServer((socket) => {
|
|
302
|
-
socket.on("data", (data) => received.push(data.toString()));
|
|
303
|
-
});
|
|
304
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
305
|
-
const port = server.address().port;
|
|
306
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
307
|
-
flushIntervalMs: 100,
|
|
308
|
-
});
|
|
309
|
-
await writer.connect();
|
|
310
|
-
writer.write("navigation.speedOverGround", "self", 6.4, new Date());
|
|
311
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
312
|
-
assert.ok(received.join("").includes("navigation.speedOverGround"), "custom 100ms interval should have flushed within 300ms");
|
|
313
|
-
await writer.disconnect();
|
|
314
|
-
await new Promise((resolve) => server.close(() => resolve()));
|
|
315
|
-
});
|
|
316
|
-
it("assigns strictly increasing microsecond timestamps to same-ms writes", async () => {
|
|
317
|
-
const received = [];
|
|
318
|
-
const server = net.createServer((socket) => {
|
|
319
|
-
socket.on("data", (data) => received.push(data.toString()));
|
|
320
|
-
});
|
|
321
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
322
|
-
const port = server.address().port;
|
|
323
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
324
|
-
flushIntervalMs: 100,
|
|
325
|
-
});
|
|
326
|
-
await writer.connect();
|
|
327
|
-
// A burst of writes to the SAME path within one tick. Without a monotonic
|
|
328
|
-
// tie-breaker these share a millisecond timestamp and collide on the
|
|
329
|
-
// signalk dedup key KEYS(ts, path, context); the later would upsert over
|
|
330
|
-
// the earlier. Each must get a distinct timestamp instead.
|
|
331
|
-
for (let i = 0; i < 5; i++) {
|
|
332
|
-
writer.write("navigation.speedOverGround", "self", i, undefined);
|
|
333
|
-
}
|
|
334
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
335
|
-
await writer.disconnect();
|
|
336
|
-
await new Promise((resolve) => server.close(() => resolve()));
|
|
337
|
-
// Parse the trailing nanosecond timestamp of each emitted line.
|
|
338
|
-
const timestamps = received
|
|
339
|
-
.join("")
|
|
340
|
-
.trim()
|
|
341
|
-
.split("\n")
|
|
342
|
-
.filter((l) => l.length > 0)
|
|
343
|
-
.map((l) => BigInt(l.slice(l.lastIndexOf(" ") + 1)));
|
|
344
|
-
assert.equal(timestamps.length, 5, "all five rows must be sent");
|
|
345
|
-
for (let i = 1; i < timestamps.length; i++) {
|
|
346
|
-
assert.ok(timestamps[i] > timestamps[i - 1], `timestamps must strictly increase, got ${timestamps[i - 1]} then ${timestamps[i]}`);
|
|
347
|
-
// Distinct at microsecond resolution (QuestDB's storage granularity),
|
|
348
|
-
// not merely at nanosecond resolution.
|
|
349
|
-
assert.ok(timestamps[i] / 1000n > timestamps[i - 1] / 1000n, "timestamps must differ by at least 1µs");
|
|
350
|
-
}
|
|
351
|
-
});
|
|
352
|
-
it("honours an explicit timestamp verbatim (no monotonic bump)", async () => {
|
|
353
|
-
const received = [];
|
|
354
|
-
const server = net.createServer((socket) => {
|
|
355
|
-
socket.on("data", (data) => received.push(data.toString()));
|
|
356
|
-
});
|
|
357
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
358
|
-
const port = server.address().port;
|
|
359
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
360
|
-
flushIntervalMs: 100,
|
|
361
|
-
});
|
|
362
|
-
await writer.connect();
|
|
363
|
-
const ts = new Date("2024-06-15T12:00:00.000Z");
|
|
364
|
-
writer.write("navigation.speedOverGround", "self", 6.4, ts);
|
|
365
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
366
|
-
await writer.disconnect();
|
|
367
|
-
await new Promise((resolve) => server.close(() => resolve()));
|
|
368
|
-
const expectedNanos = BigInt(ts.getTime()) * 1000000n;
|
|
369
|
-
assert.ok(received.join("").includes(` ${expectedNanos}\n`), `explicit timestamp must be used verbatim (${expectedNanos})`);
|
|
370
|
-
});
|
|
371
|
-
it("floors monotonic timestamps against a prior explicit timestamp", async () => {
|
|
372
|
-
const received = [];
|
|
373
|
-
const server = net.createServer((socket) => {
|
|
374
|
-
socket.on("data", (data) => received.push(data.toString()));
|
|
375
|
-
});
|
|
376
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
377
|
-
const port = server.address().port;
|
|
378
|
-
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
379
|
-
flushIntervalMs: 100,
|
|
380
|
-
});
|
|
381
|
-
await writer.connect();
|
|
382
|
-
// An explicit timestamp far in the future, then an omitted-timestamp
|
|
383
|
-
// write. The omitted write's receive-time ns is well below the explicit
|
|
384
|
-
// one, so without flooring it would emit a smaller ts and collide with a
|
|
385
|
-
// future replay. It must instead advance past the explicit value.
|
|
386
|
-
const future = new Date("2099-01-01T00:00:00.000Z");
|
|
387
|
-
writer.write("navigation.speedOverGround", "self", 1, future);
|
|
388
|
-
writer.write("navigation.speedOverGround", "self", 2, undefined);
|
|
389
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
390
|
-
await writer.disconnect();
|
|
391
|
-
await new Promise((resolve) => server.close(() => resolve()));
|
|
392
|
-
const timestamps = received
|
|
393
|
-
.join("")
|
|
394
|
-
.trim()
|
|
395
|
-
.split("\n")
|
|
396
|
-
.filter((l) => l.length > 0)
|
|
397
|
-
.map((l) => BigInt(l.slice(l.lastIndexOf(" ") + 1)));
|
|
398
|
-
assert.equal(timestamps.length, 2);
|
|
399
|
-
assert.ok(timestamps[1] > timestamps[0], `omitted-timestamp write must advance past a prior explicit one, got ${timestamps[0]} then ${timestamps[1]}`);
|
|
400
|
-
});
|
|
401
|
-
});
|
|
402
|
-
describe("ILPWriter droppedLineCount", () => {
|
|
403
|
-
it("counts buffer-overflow drops monotonically, never resetting", () => {
|
|
404
|
-
// The recorder's vessel-name dedupe treats an enqueued name as written;
|
|
405
|
-
// a buffer overflow silently discards enqueued lines, so the counter is
|
|
406
|
-
// its only signal to invalidate that assumption. It must only ever grow.
|
|
407
|
-
const writer = new ILPWriter("127.0.0.1", 1, undefined, {
|
|
408
|
-
maxBufferLines: 3,
|
|
409
|
-
});
|
|
410
|
-
assert.equal(writer.droppedLineCount, 0);
|
|
411
|
-
for (let i = 0; i < 5; i++) {
|
|
412
|
-
writer.write("a.b", "self", i, new Date());
|
|
413
|
-
}
|
|
414
|
-
assert.equal(writer.droppedLineCount, 2);
|
|
415
|
-
writer.write("a.b", "self", 9, new Date());
|
|
416
|
-
assert.equal(writer.droppedLineCount, 3, "monotonic across overflows");
|
|
417
|
-
});
|
|
418
|
-
});
|
|
419
|
-
//# sourceMappingURL=ilp-writer.test.js.map
|