signalk-questdb 2.1.10 → 2.2.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.
- package/.release-please-manifest.json +1 -1
- package/README.md +91 -28
- package/dist/change-gate.d.ts +26 -0
- package/dist/change-gate.js +118 -0
- package/dist/change-gate.js.map +1 -0
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.js +13 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/container-env.d.ts +1 -0
- package/dist/container-env.js +26 -0
- package/dist/container-env.js.map +1 -1
- package/dist/delta-routing.d.ts +5 -0
- package/dist/delta-routing.js +40 -4
- package/dist/delta-routing.js.map +1 -1
- package/dist/history-v2.d.ts +1 -1
- package/dist/history-v2.js +180 -35
- package/dist/history-v2.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +42 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/public/assets/AppPanel-Fvhb8xTK.js +1 -0
- package/public/assets/PluginConfigurationPanel-JR1rvS7f.js +9 -0
- package/public/assets/_virtual_mf-localSharedImportMap___mfe_internal__signalk_questdb__mf_owner__1-D-Le-Wxu.js +1 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_questdb__mf_owner__196689844091135__loadShare__shared-BRI06Lxu.js +8 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_questdb__mf_owner__196689844091135__prebuild__react__prebuild__-eQjVI-Oj.js +1 -0
- package/public/assets/{dist-BK97MX24.js → dist-BI-Ygd_Z.js} +1 -1
- package/public/assets/helpers-CsBAxMau.js +1 -0
- package/public/assets/hostInit-CdqUOHAJ.js +1 -0
- package/public/assets/{index-bERRzqQZ.js → index-mvK71Kw7.js} +2 -2
- package/public/assets/pendingShares-BI6kviiM.js +2 -0
- package/public/assets/utils-BRGuweMc.js +4 -0
- package/public/assets/vite-preload-helper-CRzLMJPS.js +1 -0
- package/public/remoteEntry.js +2 -2
- package/release-please-config.json +0 -1
- package/public/assets/AppPanel-p27aQlBS.js +0 -1
- package/public/assets/PluginConfigurationPanel-DWDBvXxG.js +0 -9
- package/public/assets/_virtual_mf-localSharedImportMap___mfe_internal__signalk_questdb__mf_owner__1-BiBqFhVp.js +0 -1
- package/public/assets/_virtual_mf___mfe_internal__signalk_questdb__mf_owner__275086164343916__loadShare__react__loadShare__.js-BWO9MGdR.js +0 -1
- package/public/assets/_virtual_mf___mfe_internal__signalk_questdb__mf_owner__275086164343916__prebuild__react__prebuild__-D2g10OtU.js +0 -1
- package/public/assets/helpers-Bizl8Raj.js +0 -1
- package/public/assets/hostInit-BFZIDSUI.js +0 -1
- package/public/assets/pendingShares-BS4kO2ec.js +0 -2
- package/public/assets/utils-jR9fY54i.js +0 -4
- package/public/assets/vite-preload-helper-uBIymjUX.js +0 -1
package/dist/history-v2.js
CHANGED
|
@@ -28,9 +28,11 @@ function aggregateToSql(method) {
|
|
|
28
28
|
* the range is read under the LIMIT every raw read here has, so a long
|
|
29
29
|
* range is not staged whole for a single row.
|
|
30
30
|
*/
|
|
31
|
-
function middleRowSql(table, columns, where, resolution) {
|
|
31
|
+
function middleRowSql(table, columns, where, range, resolution) {
|
|
32
32
|
if (resolution && resolution > 0) {
|
|
33
|
-
|
|
33
|
+
// Floored from the range start, on the grid sampleBy() puts every other
|
|
34
|
+
// column on.
|
|
35
|
+
const bucket = `timestamp_floor('${effectiveResolution(resolution)}s', ts, '${validateTimestamp(range.from)}')`;
|
|
34
36
|
return `SELECT b AS ts, ${columns} FROM (SELECT b, ts, ${columns}, row_number() OVER (PARTITION BY b ORDER BY ts) AS rn, count(*) OVER (PARTITION BY b) AS n FROM (SELECT ${bucket} AS b, ts, ${columns} FROM ${table} WHERE ${where})) WHERE rn = n / 2 + 1 ORDER BY ts`;
|
|
35
37
|
}
|
|
36
38
|
return `SELECT ts, ${columns} FROM (SELECT ts, ${columns}, row_number() OVER (ORDER BY ts) AS rn, count(*) OVER () AS n FROM (SELECT ts, ${columns} FROM ${table} WHERE ${where} ORDER BY ts LIMIT 50000)) WHERE rn = n / 2 + 1`;
|
|
@@ -184,6 +186,47 @@ function computeAngularEMA(values, alpha, nonNegative) {
|
|
|
184
186
|
}
|
|
185
187
|
return result;
|
|
186
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* Carry a held value across the empty buckets after it.
|
|
191
|
+
*
|
|
192
|
+
* The recorder skips a value equal to the last one it wrote until the
|
|
193
|
+
* unchanged-value heartbeat is due (see ChangeGate), so a bucket with no row
|
|
194
|
+
* usually means "unchanged", not "no data" — a switch that has been on for an
|
|
195
|
+
* hour has one row in that hour, and FILL(NULL) alone would chart it as off
|
|
196
|
+
* the air. Each empty bucket takes the last sample before it, but only while
|
|
197
|
+
* that sample is younger than `holdMs`: a live path writes at least once per
|
|
198
|
+
* heartbeat, so a longer silence is a real gap — a sensor gone stale, the
|
|
199
|
+
* recorder stopped — and stays one.
|
|
200
|
+
*
|
|
201
|
+
* Every row ends in the bucket's `last(ts)` — when its last sample was
|
|
202
|
+
* taken, null for an empty bucket — and the hold is measured from that, not
|
|
203
|
+
* from the bucket start: at a resolution near the hold, a sample late in its
|
|
204
|
+
* bucket would otherwise count as a whole bucket older than it is. `seed` is
|
|
205
|
+
* the last row before the range in the same shape, so the first buckets of a
|
|
206
|
+
* range are held too.
|
|
207
|
+
*
|
|
208
|
+
* Never into a bucket that starts after `now`: a held value says the value
|
|
209
|
+
* had not changed, which nothing can say about a time still to come.
|
|
210
|
+
*/
|
|
211
|
+
function holdThroughEmptyBuckets(rows, seed, holdMs, carry, now = Date.now()) {
|
|
212
|
+
if (holdMs <= 0)
|
|
213
|
+
return rows;
|
|
214
|
+
const sampledAt = (row) => row[row.length - 1];
|
|
215
|
+
let held = seed;
|
|
216
|
+
return rows.map((row) => {
|
|
217
|
+
if (sampledAt(row) !== null) {
|
|
218
|
+
held = row;
|
|
219
|
+
return row;
|
|
220
|
+
}
|
|
221
|
+
const bucketStart = Date.parse(row[0]);
|
|
222
|
+
if (held === null ||
|
|
223
|
+
bucketStart > now ||
|
|
224
|
+
bucketStart - Date.parse(sampledAt(held)) >= holdMs) {
|
|
225
|
+
return row;
|
|
226
|
+
}
|
|
227
|
+
return carry(row, held);
|
|
228
|
+
});
|
|
229
|
+
}
|
|
187
230
|
function buildRangeWhere(range, context) {
|
|
188
231
|
const from = validateTimestamp(range.from);
|
|
189
232
|
const to = validateTimestamp(range.to);
|
|
@@ -243,9 +286,27 @@ const MAX_EXPANDED_SOURCES = 16;
|
|
|
243
286
|
const MAX_EXPANDED_COLUMNS = 64;
|
|
244
287
|
// Effective SAMPLE BY period: QuestDB rejects `SAMPLE BY 0s`, so fractional
|
|
245
288
|
// resolutions (e.g. 0.5) must clamp up to 1s instead of flooring to zero.
|
|
289
|
+
// Trailing columns of every numeric bucket read, for holdNumericBuckets: the
|
|
290
|
+
// bucket's last sample and when it was taken.
|
|
291
|
+
const HELD_SQL = "last(value) as held, last(ts) as held_ts";
|
|
246
292
|
function effectiveResolution(resolution) {
|
|
247
293
|
return Math.max(1, Math.floor(resolution));
|
|
248
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* The SAMPLE BY clause every bucketed read uses. FROM … TO makes FILL(NULL)
|
|
297
|
+
* fabricate the WHOLE grid of the range: without it QuestDB only fills
|
|
298
|
+
* between the first and last bucket that has a row, so leading and trailing
|
|
299
|
+
* empty buckets were missing from the response — and a change-only recorded
|
|
300
|
+
* switch, one row in the middle of the range, came back as a single bucket
|
|
301
|
+
* with nothing to hold across. It also aligns buckets to the range start
|
|
302
|
+
* rather than the calendar. TO is exclusive: a row stamped exactly at the
|
|
303
|
+
* range end starts a bucket past it and is left out.
|
|
304
|
+
*/
|
|
305
|
+
function sampleBy(range, resolution) {
|
|
306
|
+
const from = validateTimestamp(range.from);
|
|
307
|
+
const to = validateTimestamp(range.to);
|
|
308
|
+
return `SAMPLE BY ${effectiveResolution(resolution)}s FROM '${from}' TO '${to}' FILL(NULL)`;
|
|
309
|
+
}
|
|
249
310
|
export function createHistoryProviderV2(queryClient, selfContext,
|
|
250
311
|
// Opt-in, default off. Expansion multiplies one requested path into one
|
|
251
312
|
// query and one column PER recording source, so a request that was cheap
|
|
@@ -258,7 +319,51 @@ sourcePolicyAllEnabled = false,
|
|
|
258
319
|
debug = () => { },
|
|
259
320
|
// A path's units per the server's metadata, in the request's context.
|
|
260
321
|
// Unknown means linear, which is right for everything but radians.
|
|
261
|
-
unitsOf = () => undefined
|
|
322
|
+
unitsOf = () => undefined,
|
|
323
|
+
// How long an empty bucket may carry the last sample before it (see
|
|
324
|
+
// holdThroughEmptyBuckets). 0 leaves empty buckets null, as FILL(NULL)
|
|
325
|
+
// makes them.
|
|
326
|
+
holdMs = 0) {
|
|
327
|
+
/**
|
|
328
|
+
* The range's context predicate over the `holdMs` just before it — where
|
|
329
|
+
* the row a range's first buckets are held from lives, if there is one.
|
|
330
|
+
*/
|
|
331
|
+
function seedRangeWhere(range, safeContext) {
|
|
332
|
+
const from = validateTimestamp(range.from);
|
|
333
|
+
const since = new Date(Date.parse(from) - holdMs).toISOString();
|
|
334
|
+
return `ts >= '${since}' AND ts < '${from}' AND context = '${safeContext}'`;
|
|
335
|
+
}
|
|
336
|
+
/** The numeric table's last `[value, ts]` before the range, or null. */
|
|
337
|
+
async function numericSeed(seedWhere) {
|
|
338
|
+
const result = await queryClient.exec(`SELECT value, ts FROM signalk WHERE ${seedWhere} LIMIT -1`);
|
|
339
|
+
return result.dataset[0] ?? null;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Hold a numeric SAMPLE BY result whose last two columns are the bucket's
|
|
343
|
+
* `last(value)` and `last(ts)` (HELD_SQL). Every aggregate of a bucket
|
|
344
|
+
* that held one unchanged value is that value, so an empty bucket takes the
|
|
345
|
+
* held sample in every column. The seed is only fetched when the range
|
|
346
|
+
* opens on an empty bucket.
|
|
347
|
+
*/
|
|
348
|
+
async function holdNumericBuckets(dataset, seedWhere) {
|
|
349
|
+
if (holdMs <= 0 || dataset.length === 0)
|
|
350
|
+
return dataset;
|
|
351
|
+
const width = dataset[0].length;
|
|
352
|
+
let seed = null;
|
|
353
|
+
if (dataset[0][width - 1] === null) {
|
|
354
|
+
const found = await numericSeed(seedWhere);
|
|
355
|
+
// Shaped like a bucket row: the value in every value column, the
|
|
356
|
+
// sample's time last.
|
|
357
|
+
if (found) {
|
|
358
|
+
seed = [
|
|
359
|
+
found[1],
|
|
360
|
+
...Array(width - 2).fill(found[0]),
|
|
361
|
+
found[1],
|
|
362
|
+
];
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return holdThroughEmptyBuckets(dataset, seed, holdMs, (row, held) => row.map((cell, i) => i === 0 ? cell : i === width - 1 ? null : held[width - 2]));
|
|
366
|
+
}
|
|
262
367
|
/**
|
|
263
368
|
* Distinct sources that recorded `path` inside the range.
|
|
264
369
|
*
|
|
@@ -364,23 +469,22 @@ unitsOf = () => undefined) {
|
|
|
364
469
|
* rows that were never filtered by source must not be labelled as one
|
|
365
470
|
* source's.
|
|
366
471
|
*/
|
|
367
|
-
async function readStringRows(where, resolution) {
|
|
472
|
+
async function readStringRows(where, range, resolution, seedWhere) {
|
|
368
473
|
// `value_kind` marks rows that were recorded as booleans, so v2 replays
|
|
369
474
|
// them as real booleans exactly like v1 — otherwise the same path would
|
|
370
475
|
// read `true` through one API and `"true"` through the other. Untagged
|
|
371
476
|
// rows (plain text, and everything written before the column existed)
|
|
372
477
|
// stay strings; the text is never guessed at.
|
|
478
|
+
// Strip the source predicate for the no-source retry. It is always the
|
|
479
|
+
// trailing ` AND source = '...'` / ` AND source IS NULL` that
|
|
480
|
+
// buildSourceWhere appended, so removing it leaves the range, context
|
|
481
|
+
// and path filters intact.
|
|
482
|
+
const withoutSource = (clause) => clause.replace(/ AND source (?:= '[^']*'|IS NULL)/g, "");
|
|
373
483
|
const sql = (withKind, withSource) => {
|
|
374
484
|
const kind = withKind ? "value_kind" : "NULL";
|
|
375
|
-
|
|
376
|
-
// trailing ` AND source = '...'` / ` AND source IS NULL` that
|
|
377
|
-
// buildSourceWhere appended, so removing it leaves the range, context
|
|
378
|
-
// and path filters intact.
|
|
379
|
-
const clause = withSource
|
|
380
|
-
? where
|
|
381
|
-
: where.replace(/ AND source (?:= '[^']*'|IS NULL)/g, "");
|
|
485
|
+
const clause = withSource ? where : withoutSource(where);
|
|
382
486
|
return resolution && resolution > 0
|
|
383
|
-
? `SELECT ts, last(value_str) as value_str, last(${kind}) as value_kind FROM signalk_str WHERE ${clause}
|
|
487
|
+
? `SELECT ts, last(value_str) as value_str, last(${kind}) as value_kind, last(ts) as held_ts FROM signalk_str WHERE ${clause} ${sampleBy(range, resolution)} ORDER BY ts`
|
|
384
488
|
: `SELECT ts, value_str, ${kind} as value_kind FROM signalk_str WHERE ${clause} ORDER BY ts LIMIT 10000`;
|
|
385
489
|
};
|
|
386
490
|
// A read racing ensureTables()'s migration — or an external QuestDB the
|
|
@@ -388,9 +492,13 @@ unitsOf = () => undefined) {
|
|
|
388
492
|
// can be missing independently: `value_kind` (degrade to text) and
|
|
389
493
|
// `source` (degrade to unfiltered, and say so).
|
|
390
494
|
let sourceDropped = false;
|
|
495
|
+
// The column set the query ran with, for the seed to run with the same.
|
|
496
|
+
let ranWithKind = true;
|
|
391
497
|
const run = async (withKind, withSource) => {
|
|
392
498
|
try {
|
|
393
|
-
|
|
499
|
+
const result = await queryClient.exec(sql(withKind, withSource));
|
|
500
|
+
ranWithKind = withKind;
|
|
501
|
+
return result;
|
|
394
502
|
}
|
|
395
503
|
catch (err) {
|
|
396
504
|
if (withKind && isMissingKindColumn(err))
|
|
@@ -406,8 +514,26 @@ unitsOf = () => undefined) {
|
|
|
406
514
|
}
|
|
407
515
|
};
|
|
408
516
|
const result = await run(true, true);
|
|
517
|
+
let dataset = result.dataset;
|
|
518
|
+
// A text bucket's value is already its last sample, so an empty bucket
|
|
519
|
+
// takes the held row's text and kind as they are.
|
|
520
|
+
if (resolution && resolution > 0 && seedWhere && holdMs > 0) {
|
|
521
|
+
let seed = null;
|
|
522
|
+
if (dataset.length > 0 && dataset[0][3] === null) {
|
|
523
|
+
const kind = ranWithKind ? "value_kind" : "NULL";
|
|
524
|
+
const clause = sourceDropped ? withoutSource(seedWhere) : seedWhere;
|
|
525
|
+
const seedResult = await queryClient.exec(`SELECT ts, value_str, ${kind} as value_kind, ts as held_ts FROM signalk_str WHERE ${clause} LIMIT -1`);
|
|
526
|
+
seed = seedResult.dataset[0] ?? null;
|
|
527
|
+
}
|
|
528
|
+
dataset = holdThroughEmptyBuckets(dataset, seed, holdMs, (row, held) => [
|
|
529
|
+
row[0],
|
|
530
|
+
held[1],
|
|
531
|
+
held[2],
|
|
532
|
+
null,
|
|
533
|
+
]);
|
|
534
|
+
}
|
|
409
535
|
return {
|
|
410
|
-
rows:
|
|
536
|
+
rows: dataset.map((row) => [
|
|
411
537
|
row[0],
|
|
412
538
|
row[2] === "boolean" ? row[1] === "true" : row[1],
|
|
413
539
|
]),
|
|
@@ -562,10 +688,10 @@ unitsOf = () => undefined) {
|
|
|
562
688
|
valuesList[specIndex].method = "first";
|
|
563
689
|
let sql;
|
|
564
690
|
if (posAgg === "middle_index") {
|
|
565
|
-
sql = middleRowSql(table, "lat, lon", where, query.resolution);
|
|
691
|
+
sql = middleRowSql(table, "lat, lon", where, range, query.resolution);
|
|
566
692
|
}
|
|
567
693
|
else if (query.resolution && query.resolution > 0) {
|
|
568
|
-
sql = `SELECT ts, ${posAgg}(lat) as lat, ${posAgg}(lon) as lon FROM ${table} WHERE ${where}
|
|
694
|
+
sql = `SELECT ts, ${posAgg}(lat) as lat, ${posAgg}(lon) as lon FROM ${table} WHERE ${where} ${sampleBy(range, query.resolution)} ORDER BY ts`;
|
|
569
695
|
}
|
|
570
696
|
else {
|
|
571
697
|
sql = `SELECT ts, lat, lon FROM ${table} WHERE ${where} ORDER BY ts LIMIT 10000`;
|
|
@@ -582,6 +708,7 @@ unitsOf = () => undefined) {
|
|
|
582
708
|
continue;
|
|
583
709
|
}
|
|
584
710
|
const where = `${buildRangeWhere(range, safeContext)} AND path = '${safePath}'${sourceWhere}`;
|
|
711
|
+
const seedWhere = `${seedRangeWhere(range, safeContext)} AND path = '${safePath}'${sourceWhere}`;
|
|
585
712
|
if (isMovingAverage(spec.aggregate)) {
|
|
586
713
|
// The window runs over the series at the requested resolution — one
|
|
587
714
|
// averaged bucket per sample, the grid every other column is on — so
|
|
@@ -594,17 +721,25 @@ unitsOf = () => undefined) {
|
|
|
594
721
|
const window = movingAverageWindow(spec);
|
|
595
722
|
const angular = isAngular(unitsOf(spec.path, requestedContext));
|
|
596
723
|
const bucket = angular ? ANGULAR_BUCKET_SQL : "avg(value) as agg_value";
|
|
597
|
-
const
|
|
598
|
-
|
|
724
|
+
const sampled = !!query.resolution && query.resolution > 0;
|
|
725
|
+
const sql = sampled
|
|
726
|
+
? `SELECT ts, ${bucket}, ${HELD_SQL} FROM ${table} WHERE ${where} ${sampleBy(range, query.resolution)} ORDER BY ts`
|
|
599
727
|
: `SELECT ts, value FROM ${table} WHERE ${where} ORDER BY ts LIMIT 10000`;
|
|
600
728
|
const result = await queryClient.exec(sql);
|
|
729
|
+
// Held before averaging: an unchanged value is still a sample of
|
|
730
|
+
// the window, not a hole in it.
|
|
731
|
+
const dataset = sampled
|
|
732
|
+
? await holdNumericBuckets(result.dataset, seedWhere)
|
|
733
|
+
: result.dataset;
|
|
601
734
|
// An angular series keeps one convention throughout: [0, 2π) unless
|
|
602
735
|
// a sample (or a bucket's lowest sample) was negative.
|
|
603
|
-
const floors =
|
|
736
|
+
const floors = dataset.map((r) => angular && sampled
|
|
737
|
+
? r[2]
|
|
738
|
+
: r[1]);
|
|
604
739
|
const nonNegative = floors.every((f) => f === null || f >= 0);
|
|
605
|
-
const series =
|
|
740
|
+
const series = dataset.map((r) => {
|
|
606
741
|
const v = r[1];
|
|
607
|
-
return v !== null && angular &&
|
|
742
|
+
return v !== null && angular && sampled
|
|
608
743
|
? normaliseAngle(v, r[2] >= 0)
|
|
609
744
|
: v;
|
|
610
745
|
});
|
|
@@ -615,7 +750,7 @@ unitsOf = () => undefined) {
|
|
|
615
750
|
: "samples" in window
|
|
616
751
|
? computeSMA(series, window.samples)
|
|
617
752
|
: computeEMA(series, window.alpha);
|
|
618
|
-
const rows =
|
|
753
|
+
const rows = dataset.map((r, i) => [
|
|
619
754
|
r[0],
|
|
620
755
|
computed[i],
|
|
621
756
|
]);
|
|
@@ -625,7 +760,7 @@ unitsOf = () => undefined) {
|
|
|
625
760
|
if (spec.aggregate === "middle_index") {
|
|
626
761
|
// A text path has rows in signalk_str only; this reads the numeric
|
|
627
762
|
// table and leaves the column empty for one, like a moving average.
|
|
628
|
-
const result = await queryClient.exec(middleRowSql(table, "value", where, query.resolution));
|
|
763
|
+
const result = await queryClient.exec(middleRowSql(table, "value", where, range, query.resolution));
|
|
629
764
|
const rows = result.dataset.map((r) => [
|
|
630
765
|
r[0],
|
|
631
766
|
r[1],
|
|
@@ -640,15 +775,15 @@ unitsOf = () => undefined) {
|
|
|
640
775
|
const aggExpr = angularMean
|
|
641
776
|
? ANGULAR_BUCKET_SQL
|
|
642
777
|
: `${aggregateToSql(spec.aggregate)} as agg_value`;
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
else {
|
|
648
|
-
sql = `SELECT ts, value FROM ${table} WHERE ${where} ORDER BY ts LIMIT 10000`;
|
|
649
|
-
}
|
|
778
|
+
const sampled = !!query.resolution && query.resolution > 0;
|
|
779
|
+
const sql = sampled
|
|
780
|
+
? `SELECT ts, ${aggExpr}, ${HELD_SQL} FROM ${table} WHERE ${where} ${sampleBy(range, query.resolution)} ORDER BY ts`
|
|
781
|
+
: `SELECT ts, value FROM ${table} WHERE ${where} ORDER BY ts LIMIT 10000`;
|
|
650
782
|
const result = await queryClient.exec(sql);
|
|
651
|
-
const
|
|
783
|
+
const dataset = sampled
|
|
784
|
+
? await holdNumericBuckets(result.dataset, seedWhere)
|
|
785
|
+
: result.dataset;
|
|
786
|
+
const rows = dataset.map((row) => [
|
|
652
787
|
row[0],
|
|
653
788
|
angularMean && row.length > 2 && row[1] !== null
|
|
654
789
|
? normaliseAngle(row[1], row[2] >= 0)
|
|
@@ -671,7 +806,7 @@ unitsOf = () => undefined) {
|
|
|
671
806
|
if (query.resolution && query.resolution > 0) {
|
|
672
807
|
valuesList[specIndex].method = "last";
|
|
673
808
|
}
|
|
674
|
-
const strResult = await readStringRows(where, query.resolution);
|
|
809
|
+
const strResult = await readStringRows(where, range, query.resolution, seedWhere);
|
|
675
810
|
if (strResult.sourceDropped) {
|
|
676
811
|
// The rows came back unfiltered because signalk_str has no `source`
|
|
677
812
|
// column. They are every source's rows, so the column must stop
|
|
@@ -736,11 +871,21 @@ unitsOf = () => undefined) {
|
|
|
736
871
|
// Include the track table: a vessel can be position-only (an AIS target
|
|
737
872
|
// whose other paths are filtered out, or a receiver sending nothing but
|
|
738
873
|
// fixes), and omitting it hides that context entirely.
|
|
739
|
-
|
|
874
|
+
//
|
|
875
|
+
// LATEST ON, not DISTINCT: DISTINCT reads the context column of every row
|
|
876
|
+
// in range, while LATEST ON walks back from the newest row and stops once
|
|
877
|
+
// each context in the symbol table has been seen. Callers probe with
|
|
878
|
+
// epoch-wide ranges (the tracks plugin asks "is this vessel known at
|
|
879
|
+
// all?" from 1970), and on a 2-billion-row install DISTINCT took >30s per
|
|
880
|
+
// probe — abandoned probes piled up until the JVM ran out of heap — where
|
|
881
|
+
// LATEST ON answers in tens of milliseconds. Applied per table and
|
|
882
|
+
// unioned, as in history-v1's snapshot, so each table can stop early.
|
|
883
|
+
const latest = ` LATEST ON ts PARTITION BY context`;
|
|
884
|
+
const result = await queryClient.exec(`(SELECT context FROM signalk WHERE ${where}${latest})
|
|
740
885
|
UNION
|
|
741
|
-
SELECT
|
|
886
|
+
(SELECT context FROM signalk_str WHERE ${where}${latest})
|
|
742
887
|
UNION
|
|
743
|
-
SELECT
|
|
888
|
+
(SELECT context FROM signalk_position WHERE ${where}${latest})
|
|
744
889
|
ORDER BY context`);
|
|
745
890
|
// Translate stored "self" back to the spec-canonical "vessels.self"
|
|
746
891
|
return result.dataset.map((row) => {
|
package/dist/history-v2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-v2.js","sourceRoot":"","sources":["../src/history-v2.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"history-v2.js","sourceRoot":"","sources":["../src/history-v2.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ declare const _default: (app: App) => {
|
|
|
43
43
|
defaultSamplingRate: import("typebox").TNumber;
|
|
44
44
|
ilpFlushIntervalMs: import("typebox").TNumber;
|
|
45
45
|
samplingRates: import("typebox").TRecord<"^.*$", import("typebox").TNumber>;
|
|
46
|
+
unchangedHeartbeatSeconds: import("typebox").TNumber;
|
|
46
47
|
recordSelf: import("typebox").TBoolean;
|
|
47
48
|
recordOthers: import("typebox").TBoolean;
|
|
48
49
|
restoreOnStart: import("typebox").TBoolean;
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,7 @@ import { QUESTDB_INTERNAL_HTTP_PORT, QUESTDB_INTERNAL_ILP_PORT, QUESTDB_INTERNAL
|
|
|
20
20
|
import { nofileClampSatisfied, readMaxMapCount } from "./host-limits.js";
|
|
21
21
|
import { buildContainerEnv } from "./container-env.js";
|
|
22
22
|
import { PathMatcher, RateMatcher, Throttle } from "./path-matcher.js";
|
|
23
|
+
import { ChangeGate } from "./change-gate.js";
|
|
23
24
|
// signalk-container's API, imported rather than mirrored. The 156-line
|
|
24
25
|
// hand-written copy that used to live here drifted by construction: it was
|
|
25
26
|
// only ever updated when this plugin happened to need a new member, so
|
|
@@ -476,6 +477,12 @@ export default (app) => {
|
|
|
476
477
|
// 100% CPU with an 89-pattern filter list.
|
|
477
478
|
let pathFilterMatcher = null;
|
|
478
479
|
let rateMatcher = null;
|
|
480
|
+
// Built per config like the matchers, since the heartbeat is config. Its
|
|
481
|
+
// record of what was written is only true while the writer has dropped
|
|
482
|
+
// nothing — same invalidation as the vessel-name dedupe below, through
|
|
483
|
+
// `changeGateDropMark`.
|
|
484
|
+
let changeGate = null;
|
|
485
|
+
let changeGateDropMark = 0;
|
|
479
486
|
// Paths carrying a value with no representation in any table: arrays, and
|
|
480
487
|
// objects nested below the one level `flattenObjectValue` descends. These
|
|
481
488
|
// used to vanish without any trace at all — the whole reason
|
|
@@ -675,6 +682,8 @@ export default (app) => {
|
|
|
675
682
|
// restarts the plugin).
|
|
676
683
|
pathFilterMatcher = new PathMatcher(config.pathFilter?.paths ?? []);
|
|
677
684
|
rateMatcher = new RateMatcher(config.samplingRates ?? {});
|
|
685
|
+
changeGate = new ChangeGate(config.unchangedHeartbeatSeconds * 1000);
|
|
686
|
+
changeGateDropMark = 0;
|
|
678
687
|
// A start may connect to a different QuestDB than the previous run —
|
|
679
688
|
// notably external mode repointed at a new host/build — so drop any cached
|
|
680
689
|
// wal_tables() capability flag and let /api/status re-probe. The
|
|
@@ -864,7 +873,10 @@ export default (app) => {
|
|
|
864
873
|
queryClient = null;
|
|
865
874
|
return;
|
|
866
875
|
}
|
|
867
|
-
const v2Provider = createHistoryProviderV2(queryClient, app.selfContext, config.historySourcePolicyAll ?? false, (msg) => app.debug(msg), unitsResolver(app)
|
|
876
|
+
const v2Provider = createHistoryProviderV2(queryClient, app.selfContext, config.historySourcePolicyAll ?? false, (msg) => app.debug(msg), unitsResolver(app),
|
|
877
|
+
// Twice the heartbeat: a path that updates at least once per heartbeat
|
|
878
|
+
// gets a row within heartbeat + its own interval of the previous one.
|
|
879
|
+
config.unchangedHeartbeatSeconds * 2000);
|
|
868
880
|
app.registerHistoryApiProvider(v2Provider);
|
|
869
881
|
const v1Provider = createHistoryProviderV1(queryClient, app.selfContext, (msg) => app.debug(msg));
|
|
870
882
|
app.registerHistoryProvider(v1Provider);
|
|
@@ -932,8 +944,20 @@ export default (app) => {
|
|
|
932
944
|
}
|
|
933
945
|
return;
|
|
934
946
|
}
|
|
947
|
+
// A path going stale arrives as null. Nothing is written for it, but
|
|
948
|
+
// the change gate must forget the path, so the first reading after the
|
|
949
|
+
// gap is recorded even when it equals the last one before it.
|
|
950
|
+
if (path && value === null) {
|
|
951
|
+
changeGate?.forget(path, context === app.selfContext ? "self" : context);
|
|
952
|
+
}
|
|
935
953
|
if (!path || value === undefined || value === null)
|
|
936
954
|
return;
|
|
955
|
+
// Lines the writer dropped were never stored, so the gate's record of
|
|
956
|
+
// what was written is wrong from that point on: start it over.
|
|
957
|
+
if (writer.droppedLineCount !== changeGateDropMark) {
|
|
958
|
+
changeGateDropMark = writer.droppedLineCount;
|
|
959
|
+
changeGate?.clear();
|
|
960
|
+
}
|
|
937
961
|
const isSelf = context === app.selfContext;
|
|
938
962
|
if (isSelf && !config.recordSelf)
|
|
939
963
|
return;
|
|
@@ -956,9 +980,19 @@ export default (app) => {
|
|
|
956
980
|
noteUnstorable(path);
|
|
957
981
|
return;
|
|
958
982
|
}
|
|
983
|
+
// Positions are never gated: the track table is small, and a vessel
|
|
984
|
+
// lying still is exactly when a restored or replayed track needs its
|
|
985
|
+
// fixes. Everything else skips a value it already wrote, BEFORE the
|
|
986
|
+
// throttle — a repeat must not take the throttle slot of the change
|
|
987
|
+
// that follows it.
|
|
988
|
+
const gated = route !== "position" && route !== "flatten";
|
|
989
|
+
const ctx = isSelf ? "self" : context;
|
|
990
|
+
const now = Date.now();
|
|
959
991
|
if (route !== "flatten") {
|
|
960
992
|
if (!shouldRecord(path, config.pathFilter.mode))
|
|
961
993
|
return;
|
|
994
|
+
if (gated && changeGate?.isRepeat(path, ctx, source, value, now))
|
|
995
|
+
return;
|
|
962
996
|
// Throttled per path AND context: the sampling rate bounds each
|
|
963
997
|
// vessel's stream, not the fleet's (issue #93). The stored context
|
|
964
998
|
// ("self" vs raw) is the key, matching what the rows carry. The key
|
|
@@ -982,7 +1016,6 @@ export default (app) => {
|
|
|
982
1016
|
// key), so every commit is a pure append. A device with a broken clock
|
|
983
1017
|
// even gets *more* accurate history. Re-sent ILP batches keep their
|
|
984
1018
|
// original stamps (baked at write() time), so replay-idempotency holds.
|
|
985
|
-
const ctx = isSelf ? "self" : context;
|
|
986
1019
|
if (route === "number") {
|
|
987
1020
|
writer.write(path, ctx, value, undefined, source);
|
|
988
1021
|
}
|
|
@@ -995,7 +1028,9 @@ export default (app) => {
|
|
|
995
1028
|
// is that word.
|
|
996
1029
|
writer.writeString(path, ctx, value ? "true" : "false", undefined, "boolean", source);
|
|
997
1030
|
}
|
|
998
|
-
|
|
1031
|
+
if (gated)
|
|
1032
|
+
changeGate?.wrote(path, ctx, source, value, now);
|
|
1033
|
+
if (route === "position") {
|
|
999
1034
|
writer.writePosition(ctx, value, undefined, source);
|
|
1000
1035
|
}
|
|
1001
1036
|
else if (route === "flatten") {
|
|
@@ -1019,8 +1054,11 @@ export default (app) => {
|
|
|
1019
1054
|
// consumed by whichever key happened to be written first.
|
|
1020
1055
|
if (!shouldRecord(leaf.path, config.pathFilter.mode))
|
|
1021
1056
|
continue;
|
|
1057
|
+
if (changeGate?.isRepeat(leaf.path, ctx, source, leaf.value, now))
|
|
1058
|
+
continue;
|
|
1022
1059
|
if (isThrottled(leaf.path, ctx, config.defaultSamplingRate ?? 2000))
|
|
1023
1060
|
continue;
|
|
1061
|
+
changeGate?.wrote(leaf.path, ctx, source, leaf.value, now);
|
|
1024
1062
|
if (typeof leaf.value === "number") {
|
|
1025
1063
|
writer.write(leaf.path, ctx, leaf.value, undefined, source);
|
|
1026
1064
|
}
|
|
@@ -1287,6 +1325,7 @@ export default (app) => {
|
|
|
1287
1325
|
// with different patterns cannot match against the previous run's.
|
|
1288
1326
|
pathFilterMatcher = null;
|
|
1289
1327
|
rateMatcher = null;
|
|
1328
|
+
changeGate = null;
|
|
1290
1329
|
queryClient = null;
|
|
1291
1330
|
questdbEndpoints = null;
|
|
1292
1331
|
// Stop the managed container when plugin is disabled
|