signalk-questdb 2.0.1 → 2.1.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/.coderabbit.yaml +4 -3
- package/README.md +151 -5
- package/dist/api-contract.d.ts +62 -0
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.js +5 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/configpanel/responses.d.ts +33 -1
- package/dist/configpanel/responses.js +89 -0
- package/dist/configpanel/responses.js.map +1 -1
- package/dist/history-v1.js +12 -9
- package/dist/history-v1.js.map +1 -1
- package/dist/history-v2.d.ts +18 -6
- package/dist/history-v2.js +275 -41
- package/dist/history-v2.js.map +1 -1
- package/dist/ilp-writer.d.ts +22 -0
- package/dist/ilp-writer.js +76 -4
- package/dist/ilp-writer.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +326 -58
- package/dist/index.js.map +1 -1
- package/dist/influx-detect.d.ts +19 -0
- package/dist/influx-detect.js +165 -0
- package/dist/influx-detect.js.map +1 -0
- package/dist/migration.d.ts +147 -0
- package/dist/migration.js +819 -0
- package/dist/migration.js.map +1 -0
- package/dist/query-client.d.ts +9 -0
- package/dist/query-client.js +11 -0
- package/dist/query-client.js.map +1 -1
- package/dist/restore.js +9 -0
- package/dist/restore.js.map +1 -1
- package/dist/schema-errors.d.ts +15 -0
- package/dist/schema-errors.js +38 -0
- package/dist/schema-errors.js.map +1 -0
- package/package.json +5 -4
- package/public/assets/PluginConfigurationPanel-CR4mD9IH.js +9 -0
- package/public/assets/{index-Z7eUk0W6.js → index-CyI4zKUm.js} +1 -1
- package/public/assets/{virtualExposes-CyrNon4j.js → virtualExposes-BBIkbTtD.js} +1 -1
- package/public/remoteEntry.js +1 -1
- 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 -108
- 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 -563
- 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 -391
- package/dist/test/ilp-writer.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 -496
- 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
- package/public/assets/PluginConfigurationPanel-CyS3A7gD.js +0 -9
package/dist/history-v2.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ interface PathSpec {
|
|
|
4
4
|
aggregate: string;
|
|
5
5
|
parameter: string[];
|
|
6
6
|
sourceRef?: string;
|
|
7
|
+
unattributed?: boolean;
|
|
7
8
|
}
|
|
8
9
|
interface ValuesRequest {
|
|
9
10
|
from?: {
|
|
@@ -18,19 +19,30 @@ interface ValuesRequest {
|
|
|
18
19
|
duration?: unknown;
|
|
19
20
|
context?: string;
|
|
20
21
|
resolution?: number;
|
|
22
|
+
sourcePolicy?: string;
|
|
21
23
|
pathSpecs: PathSpec[];
|
|
22
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* One column of the response.
|
|
27
|
+
*
|
|
28
|
+
* The metadata key is `$source`, not `sourceRef` — signalk-server #2817
|
|
29
|
+
* renamed it on the RESPONSE side while `PathSpec.sourceRef` (the request
|
|
30
|
+
* side) kept its name. The two are deliberately different words for the same
|
|
31
|
+
* thing, and nothing validates the response, so emitting the old key simply
|
|
32
|
+
* left every consumer unable to tell the columns apart.
|
|
33
|
+
*/
|
|
34
|
+
interface ValueColumn {
|
|
35
|
+
path: string;
|
|
36
|
+
method: string;
|
|
37
|
+
$source?: string;
|
|
38
|
+
}
|
|
23
39
|
interface ValuesResponse {
|
|
24
40
|
context: string;
|
|
25
41
|
range: {
|
|
26
42
|
from: string;
|
|
27
43
|
to: string;
|
|
28
44
|
};
|
|
29
|
-
values:
|
|
30
|
-
path: string;
|
|
31
|
-
method: string;
|
|
32
|
-
sourceRef?: string;
|
|
33
|
-
}[];
|
|
45
|
+
values: ValueColumn[];
|
|
34
46
|
data: [string, ...unknown[]][];
|
|
35
47
|
}
|
|
36
48
|
type PathsRequest = {
|
|
@@ -44,7 +56,7 @@ type PathsRequest = {
|
|
|
44
56
|
duration?: unknown;
|
|
45
57
|
};
|
|
46
58
|
type ContextsRequest = PathsRequest;
|
|
47
|
-
export declare function createHistoryProviderV2(queryClient: QueryClient, selfContext: string): {
|
|
59
|
+
export declare function createHistoryProviderV2(queryClient: QueryClient, selfContext: string, sourcePolicyAllEnabled?: boolean, debug?: (msg: string) => void): {
|
|
48
60
|
getValues: (query: ValuesRequest) => Promise<ValuesResponse>;
|
|
49
61
|
getPaths: (query: PathsRequest) => Promise<string[]>;
|
|
50
62
|
getContexts: (query: ContextsRequest) => Promise<string[]>;
|
package/dist/history-v2.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { validateIdentifier, validateTimestamp, } from "./query-client.js";
|
|
1
|
+
import { isSafeIdentifier, validateIdentifier, validateTimestamp, } from "./query-client.js";
|
|
2
2
|
import { resolveTimeRange } from "./time-range.js";
|
|
3
|
+
import { isMissingKindColumn, isMissingSourceColumn, isMissingTable, } from "./schema-errors.js";
|
|
3
4
|
function aggregateToSql(method) {
|
|
4
5
|
switch (method) {
|
|
5
6
|
case "average":
|
|
@@ -67,8 +68,15 @@ function buildRangeWhere(range, context) {
|
|
|
67
68
|
// predate the `source` column (external QuestDB the migration could not
|
|
68
69
|
// touch): returning all sources when one was asked for would silently
|
|
69
70
|
// reintroduce exactly the mixed-source ambiguity the filter exists to remove.
|
|
70
|
-
function buildSourceWhere(
|
|
71
|
-
|
|
71
|
+
function buildSourceWhere(spec) {
|
|
72
|
+
if (spec.sourceRef) {
|
|
73
|
+
return ` AND source = '${validateIdentifier(spec.sourceRef)}'`;
|
|
74
|
+
}
|
|
75
|
+
// `source IS NULL` selects ONLY the unattributed rows. Returning "" here
|
|
76
|
+
// would select every source instead — see PathSpec.unattributed.
|
|
77
|
+
if (spec.unattributed)
|
|
78
|
+
return " AND source IS NULL";
|
|
79
|
+
return "";
|
|
72
80
|
}
|
|
73
81
|
/**
|
|
74
82
|
* Map a Signal K context value to the storage form used by signalk-questdb.
|
|
@@ -94,59 +102,277 @@ function normalizeContext(context, selfContext) {
|
|
|
94
102
|
// well-behaved clients budget ~2000 points per request; a million covers any
|
|
95
103
|
// sane chart while keeping the worst case bounded.
|
|
96
104
|
const MAX_SAMPLE_BUCKETS = 1_000_000;
|
|
105
|
+
// Upper bound on columns ONE path may expand into under sourcePolicy=all.
|
|
106
|
+
// The bucket cap above only applies to requests that named a resolution, so
|
|
107
|
+
// these are the only things bounding an unresolved expansion.
|
|
108
|
+
const MAX_EXPANDED_SOURCES = 16;
|
|
109
|
+
// Upper bound on the columns a whole REQUEST may expand into. The per-path
|
|
110
|
+
// cap alone is not enough: twenty paths at sixteen sources each is 320
|
|
111
|
+
// columns and 320 queries from one HTTP request. Exceeding this fails the
|
|
112
|
+
// request rather than truncating it — silently returning some of the asked-for
|
|
113
|
+
// series would be worse than saying the request is too broad.
|
|
114
|
+
const MAX_EXPANDED_COLUMNS = 64;
|
|
97
115
|
// Effective SAMPLE BY period: QuestDB rejects `SAMPLE BY 0s`, so fractional
|
|
98
116
|
// resolutions (e.g. 0.5) must clamp up to 1s instead of flooring to zero.
|
|
99
117
|
function effectiveResolution(resolution) {
|
|
100
118
|
return Math.max(1, Math.floor(resolution));
|
|
101
119
|
}
|
|
102
|
-
export function createHistoryProviderV2(queryClient, selfContext
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
120
|
+
export function createHistoryProviderV2(queryClient, selfContext,
|
|
121
|
+
// Opt-in, default off. Expansion multiplies one requested path into one
|
|
122
|
+
// query and one column PER recording source, so a request that was cheap
|
|
123
|
+
// becomes N times the work — on a Pi-class host that is the difference
|
|
124
|
+
// between a responsive chart and a stalled one. Callers that name a source
|
|
125
|
+
// explicitly are unaffected either way.
|
|
126
|
+
sourcePolicyAllEnabled = false,
|
|
127
|
+
// Degrading must be visible. Defaults to a no-op so existing callers and
|
|
128
|
+
// tests need no change.
|
|
129
|
+
debug = () => { }) {
|
|
130
|
+
/**
|
|
131
|
+
* Distinct sources that recorded `path` inside the range.
|
|
132
|
+
*
|
|
133
|
+
* All three tables are consulted because a path lives in whichever one
|
|
134
|
+
* matches its value type — numeric in `signalk`, text/boolean in
|
|
135
|
+
* `signalk_str`, and navigation.position in its own table — and the caller
|
|
136
|
+
* has no way to know which before querying. Asking only the numeric table
|
|
137
|
+
* would expand a boolean channel into nothing and silently collapse it back
|
|
138
|
+
* to one merged column.
|
|
139
|
+
*
|
|
140
|
+
* Returns `null` for rows whose `source` is unset (recorded before the
|
|
141
|
+
* column existed, or from a delta carrying no sourceRef): that is a real
|
|
142
|
+
* series, distinct from any named source, and gets its own column.
|
|
143
|
+
*
|
|
144
|
+
* A database whose tables predate the `source` column has no such column to
|
|
145
|
+
* select, so the query errors; that is reported as "no sources", which
|
|
146
|
+
* leaves the path as a single unexpanded column rather than failing the
|
|
147
|
+
* whole request.
|
|
148
|
+
*/
|
|
149
|
+
async function distinctSources(path, range, safeContext) {
|
|
150
|
+
const safePath = validateIdentifier(path);
|
|
151
|
+
const rangeWhere = buildRangeWhere(range, safeContext);
|
|
152
|
+
const tables = path === "navigation.position"
|
|
153
|
+
? [`SELECT DISTINCT source FROM signalk_position WHERE ${rangeWhere}`]
|
|
154
|
+
: [
|
|
155
|
+
`SELECT DISTINCT source FROM signalk WHERE ${rangeWhere} AND path = '${safePath}'`,
|
|
156
|
+
`SELECT DISTINCT source FROM signalk_str WHERE ${rangeWhere} AND path = '${safePath}'`,
|
|
157
|
+
];
|
|
158
|
+
const found = new Set();
|
|
159
|
+
for (const sql of tables) {
|
|
160
|
+
try {
|
|
161
|
+
const result = await queryClient.exec(sql);
|
|
162
|
+
for (const row of result.dataset) {
|
|
163
|
+
const value = row[0];
|
|
164
|
+
found.add(typeof value === "string" ? value : null);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
const table = /FROM (\w+)/.exec(sql)?.[1] ?? "unknown";
|
|
169
|
+
if (isMissingSourceColumn(err)) {
|
|
170
|
+
// A legacy table predating the `source` migration. Real for
|
|
171
|
+
// databases the plugin did not create, so the request still
|
|
172
|
+
// succeeds with one unexpanded column — but SAYING SO matters:
|
|
173
|
+
// silently returning one column makes sourcePolicy=all look like
|
|
174
|
+
// it did nothing, which is indistinguishable from a path that
|
|
175
|
+
// genuinely has one source.
|
|
176
|
+
debug(`sourcePolicy=all: ${table} has no 'source' column, so ` +
|
|
177
|
+
`${path} cannot be split by source — returning one merged ` +
|
|
178
|
+
`column. Re-create or migrate the table to enable expansion.`);
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (isMissingTable(err)) {
|
|
182
|
+
// Nothing recorded of this value type yet. Not a fault, and the
|
|
183
|
+
// other table may still answer.
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
// A timeout, a 5xx, a dropped connection: NOT "no sources". Reporting
|
|
187
|
+
// those as an empty result would hand the caller a plausible-looking
|
|
188
|
+
// single column built on a failure nobody saw.
|
|
189
|
+
throw err;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Named sources first and sorted, so column order is stable across
|
|
193
|
+
// requests — a caller charting several receivers should not see the
|
|
194
|
+
// series swap places between refreshes. The unattributed column goes
|
|
195
|
+
// last, where it reads as the leftover it is.
|
|
196
|
+
const named = [...found].filter((s) => s !== null).sort();
|
|
197
|
+
const all = found.has(null) ? [...named, null] : named;
|
|
198
|
+
// Hard ceiling on fan-out. The sample-bucket cap only bites when the
|
|
199
|
+
// caller asked for a resolution; an unresolved request runs one raw query
|
|
200
|
+
// per source with no cap at all, so a path that accumulated dozens of
|
|
201
|
+
// sourceRefs (a bus with many transmitters, or churn in generated refs)
|
|
202
|
+
// would schedule dozens of queries from a single HTTP request.
|
|
203
|
+
if (all.length > MAX_EXPANDED_SOURCES) {
|
|
204
|
+
debug(`sourcePolicy=all: ${path} has ${all.length} sources in range; ` +
|
|
205
|
+
`expanding the first ${MAX_EXPANDED_SOURCES} (sorted) only.`);
|
|
206
|
+
return all.slice(0, MAX_EXPANDED_SOURCES);
|
|
207
|
+
}
|
|
208
|
+
return all;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Read a path's rows from `signalk_str`.
|
|
212
|
+
*
|
|
213
|
+
* Numeric aggregates do not apply to text, so a downsampled request takes
|
|
214
|
+
* one representative value per bucket (`last` = the state in force at the
|
|
215
|
+
* bucket's end, which is what a state channel means) instead of averaging.
|
|
216
|
+
* Values are returned verbatim: booleans were stored as "true"/"false", so
|
|
217
|
+
* a consumer can tell them apart from real numbers, and Grafana value
|
|
218
|
+
* mappings work directly.
|
|
219
|
+
*
|
|
220
|
+
* Returns the rows plus whether the source predicate had to be dropped.
|
|
221
|
+
* The two value tables migrate independently, so `signalk` can have a
|
|
222
|
+
* `source` column while `signalk_str` does not — and under sourcePolicy=all
|
|
223
|
+
* the expansion is driven by whichever table answered, then applied to
|
|
224
|
+
* both. Without this the fallback query carried `AND source = '...'` into a
|
|
225
|
+
* table with no such column and failed the WHOLE request with
|
|
226
|
+
* "Invalid column: source" (verified against a live QuestDB). The caller
|
|
227
|
+
* uses `sourceDropped` to withdraw the column's `$source` claim, because
|
|
228
|
+
* rows that were never filtered by source must not be labelled as one
|
|
229
|
+
* source's.
|
|
230
|
+
*/
|
|
109
231
|
async function readStringRows(where, resolution) {
|
|
110
232
|
// `value_kind` marks rows that were recorded as booleans, so v2 replays
|
|
111
233
|
// them as real booleans exactly like v1 — otherwise the same path would
|
|
112
234
|
// read `true` through one API and `"true"` through the other. Untagged
|
|
113
235
|
// rows (plain text, and everything written before the column existed)
|
|
114
236
|
// stay strings; the text is never guessed at.
|
|
115
|
-
const sql = (withKind) => {
|
|
237
|
+
const sql = (withKind, withSource) => {
|
|
116
238
|
const kind = withKind ? "value_kind" : "NULL";
|
|
239
|
+
// Strip the source predicate for the no-source retry. It is always the
|
|
240
|
+
// trailing ` AND source = '...'` / ` AND source IS NULL` that
|
|
241
|
+
// buildSourceWhere appended, so removing it leaves the range, context
|
|
242
|
+
// and path filters intact.
|
|
243
|
+
const clause = withSource
|
|
244
|
+
? where
|
|
245
|
+
: where.replace(/ AND source (?:= '[^']*'|IS NULL)/g, "");
|
|
117
246
|
return resolution && resolution > 0
|
|
118
|
-
? `SELECT ts, last(value_str) as value_str, last(${kind}) as value_kind FROM signalk_str WHERE ${
|
|
119
|
-
: `SELECT ts, value_str, ${kind} as value_kind FROM signalk_str WHERE ${
|
|
247
|
+
? `SELECT ts, last(value_str) as value_str, last(${kind}) as value_kind FROM signalk_str WHERE ${clause} SAMPLE BY ${effectiveResolution(resolution)}s FILL(NULL) ORDER BY ts`
|
|
248
|
+
: `SELECT ts, value_str, ${kind} as value_kind FROM signalk_str WHERE ${clause} ORDER BY ts LIMIT 10000`;
|
|
120
249
|
};
|
|
121
250
|
// A read racing ensureTables()'s migration — or an external QuestDB the
|
|
122
|
-
// plugin does not own — must degrade
|
|
123
|
-
|
|
124
|
-
|
|
251
|
+
// plugin does not own — must degrade, not fail the request. Two columns
|
|
252
|
+
// can be missing independently: `value_kind` (degrade to text) and
|
|
253
|
+
// `source` (degrade to unfiltered, and say so).
|
|
254
|
+
let sourceDropped = false;
|
|
255
|
+
const run = async (withKind, withSource) => {
|
|
256
|
+
try {
|
|
257
|
+
return await queryClient.exec(sql(withKind, withSource));
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
if (withKind && isMissingKindColumn(err))
|
|
261
|
+
return run(false, withSource);
|
|
262
|
+
if (withSource && isMissingSourceColumn(err)) {
|
|
263
|
+
sourceDropped = true;
|
|
264
|
+
debug(`signalk_str has no 'source' column, so this path cannot be ` +
|
|
265
|
+
`filtered by source there — returning its rows unfiltered and ` +
|
|
266
|
+
`dropping the source attribution for that column.`);
|
|
267
|
+
return run(withKind, false);
|
|
268
|
+
}
|
|
125
269
|
throw err;
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
const result = await run(true, true);
|
|
273
|
+
return {
|
|
274
|
+
rows: result.dataset.map((row) => [
|
|
275
|
+
row[0],
|
|
276
|
+
row[2] === "boolean" ? row[1] === "true" : row[1],
|
|
277
|
+
]),
|
|
278
|
+
sourceDropped,
|
|
279
|
+
};
|
|
132
280
|
}
|
|
133
281
|
async function getValues(query) {
|
|
134
282
|
const range = resolveTimeRange(query);
|
|
135
|
-
//
|
|
283
|
+
// Two gates, both required. The caller asks with sourcePolicy=all; the
|
|
284
|
+
// operator has to have allowed it. An unknown policy string is treated as
|
|
285
|
+
// absent — the server validates the value before a provider ever sees it,
|
|
286
|
+
// so guessing at anything else here would only invent behaviour.
|
|
287
|
+
const expandBySource = sourcePolicyAllEnabled && query.sourcePolicy === "all";
|
|
288
|
+
const requestedContext = query.context ?? "vessels.self";
|
|
289
|
+
const storedContext = normalizeContext(requestedContext, selfContext);
|
|
290
|
+
const safeContext = validateIdentifier(storedContext);
|
|
291
|
+
// Expand each spec into the COLUMNS it will produce. Under
|
|
292
|
+
// sourcePolicy=all a path with no explicit sourceRef becomes one column
|
|
293
|
+
// per distinct source that actually recorded it in range; everything else
|
|
294
|
+
// stays a single column. Doing this before the query loop is what lets
|
|
295
|
+
// the loop, the bucket budget and the row assembly all agree on how many
|
|
296
|
+
// columns exist — the pre-#2817 code could assume one column per spec.
|
|
297
|
+
const columns = [];
|
|
298
|
+
for (const spec of query.pathSpecs) {
|
|
299
|
+
if (!expandBySource || spec.sourceRef) {
|
|
300
|
+
// An explicit sourceRef stays a FILTER and takes precedence over the
|
|
301
|
+
// policy, per the upstream contract.
|
|
302
|
+
columns.push(spec);
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
// Checked BEFORE the probe, not only after the loop: discovery is a
|
|
306
|
+
// query per path per table, so a request far past the ceiling would
|
|
307
|
+
// otherwise issue hundreds of DISTINCT probes and only then be told it
|
|
308
|
+
// was too broad. Stopping here makes the reported count a lower bound,
|
|
309
|
+
// which the message says.
|
|
310
|
+
if (columns.length > MAX_EXPANDED_COLUMNS) {
|
|
311
|
+
throw new Error(`sourcePolicy=all expands these paths into more than ` +
|
|
312
|
+
`${MAX_EXPANDED_COLUMNS} columns — request fewer paths, or name ` +
|
|
313
|
+
`the sources explicitly with paths=<path>|<sourceRef>`);
|
|
314
|
+
}
|
|
315
|
+
const sources = await distinctSources(spec.path, range, safeContext);
|
|
316
|
+
if (sources.length === 0) {
|
|
317
|
+
// Nothing recorded in range, or a database with no `source` column:
|
|
318
|
+
// keep the unexpanded column so the caller still gets the series
|
|
319
|
+
// (empty, or mixed-source on a pre-source database) instead of the
|
|
320
|
+
// path silently vanishing from the response.
|
|
321
|
+
columns.push(spec);
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
const before = columns.length;
|
|
325
|
+
for (const source of sources) {
|
|
326
|
+
// `null` source = rows recorded before the column existed, or by a
|
|
327
|
+
// delta that carried no sourceRef. They are a real series and get
|
|
328
|
+
// their own unattributed column rather than being dropped.
|
|
329
|
+
if (source === null) {
|
|
330
|
+
columns.push({ ...spec, unattributed: true });
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
// A STORED sourceRef is not guaranteed to satisfy the identifier
|
|
334
|
+
// guard — a delta can carry something like "tcp://gw:2000", which is
|
|
335
|
+
// a perfectly ordinary Signal K source but contains characters the
|
|
336
|
+
// guard rejects. Letting it reach buildSourceWhere throws and takes
|
|
337
|
+
// the WHOLE request down, so expansion would turn a query that works
|
|
338
|
+
// today into a hard failure. Skip the column and say so instead.
|
|
339
|
+
if (!isSafeIdentifier(source)) {
|
|
340
|
+
debug(`sourcePolicy=all: skipping source '${source}' for ${spec.path} — ` +
|
|
341
|
+
`it contains characters that cannot be used in a query filter.`);
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
columns.push({ ...spec, sourceRef: source });
|
|
345
|
+
}
|
|
346
|
+
// Every source was unusable: keep the path as one merged column rather
|
|
347
|
+
// than dropping it from the response entirely.
|
|
348
|
+
if (columns.length === before)
|
|
349
|
+
columns.push(spec);
|
|
350
|
+
}
|
|
351
|
+
if (columns.length > MAX_EXPANDED_COLUMNS) {
|
|
352
|
+
throw new Error(`sourcePolicy=all expands these paths into ${columns.length} columns ` +
|
|
353
|
+
`(max ${MAX_EXPANDED_COLUMNS}) — request fewer paths, or name the ` +
|
|
354
|
+
`sources explicitly with paths=<path>|<sourceRef>`);
|
|
355
|
+
}
|
|
356
|
+
// The bucket budget is checked HERE, after expansion, not before it.
|
|
357
|
+
// Under sourcePolicy=all one requested path becomes one SAMPLE BY query
|
|
358
|
+
// per source, so counting requested paths would let a four-receiver path
|
|
359
|
+
// run at four times the ceiling this cap exists to enforce — precisely
|
|
360
|
+
// the case the cap is for.
|
|
361
|
+
//
|
|
362
|
+
// Only columns that actually run a SAMPLE BY query fabricate buckets:
|
|
136
363
|
// client-side aggregates (sma/ema/middle_index) read raw rows under a
|
|
137
|
-
// LIMIT and must not trip the cap.
|
|
138
|
-
// SAMPLE BY, so the fabricated total scales with their count.
|
|
364
|
+
// LIMIT and must not trip the cap.
|
|
139
365
|
//
|
|
140
366
|
// A non-numeric path costs TWO such queries: the numeric one comes back
|
|
141
367
|
// empty and the string-table fallback repeats it against signalk_str.
|
|
142
368
|
// Which paths those are is only known after querying, so the budget
|
|
143
|
-
// assumes the worst case — every sampled
|
|
144
|
-
// letting a request built entirely of boolean/string paths quietly
|
|
145
|
-
// twice the ceiling
|
|
146
|
-
const sampledSpecs =
|
|
369
|
+
// assumes the worst case — every sampled column falling back — rather
|
|
370
|
+
// than letting a request built entirely of boolean/string paths quietly
|
|
371
|
+
// run at twice the ceiling.
|
|
372
|
+
const sampledSpecs = columns.filter((spec) => spec.path === "navigation.position" ||
|
|
147
373
|
!needsClientSideAggregation(spec.aggregate)).length;
|
|
148
374
|
// navigation.position is served by its own table and never falls back.
|
|
149
|
-
const fallbackCapableSpecs =
|
|
375
|
+
const fallbackCapableSpecs = columns.filter((spec) => spec.path !== "navigation.position" &&
|
|
150
376
|
!needsClientSideAggregation(spec.aggregate)).length;
|
|
151
377
|
if (sampledSpecs > 0 && query.resolution && query.resolution > 0) {
|
|
152
378
|
const rangeSec = (Date.parse(range.to) - Date.parse(range.from)) / 1000;
|
|
@@ -160,24 +386,24 @@ export function createHistoryProviderV2(queryClient, selfContext) {
|
|
|
160
386
|
`a shorter range`);
|
|
161
387
|
}
|
|
162
388
|
}
|
|
163
|
-
const requestedContext = query.context ?? "vessels.self";
|
|
164
|
-
const storedContext = normalizeContext(requestedContext, selfContext);
|
|
165
|
-
const safeContext = validateIdentifier(storedContext);
|
|
166
389
|
const valuesList = [];
|
|
167
|
-
// Keyed by
|
|
168
|
-
//
|
|
169
|
-
// path-keyed map would let the second
|
|
390
|
+
// Keyed by COLUMN INDEX, not path: source filtering and source expansion
|
|
391
|
+
// both make the same path appear more than once in one request (one
|
|
392
|
+
// column per receiver), and a path-keyed map would let the second
|
|
393
|
+
// column's rows overwrite the first's.
|
|
170
394
|
const columnData = new Map();
|
|
171
|
-
for (const [specIndex, spec] of
|
|
395
|
+
for (const [specIndex, spec] of columns.entries()) {
|
|
172
396
|
const safePath = validateIdentifier(spec.path);
|
|
173
397
|
const entry = {
|
|
174
398
|
path: spec.path,
|
|
175
399
|
method: spec.aggregate,
|
|
176
400
|
};
|
|
401
|
+
// Only source-specific columns carry `$source`. An unexpanded column is
|
|
402
|
+
// "all sources merged", which is not the same claim as "this source".
|
|
177
403
|
if (spec.sourceRef)
|
|
178
|
-
entry
|
|
404
|
+
entry.$source = spec.sourceRef;
|
|
179
405
|
valuesList.push(entry);
|
|
180
|
-
const sourceWhere = buildSourceWhere(spec
|
|
406
|
+
const sourceWhere = buildSourceWhere(spec);
|
|
181
407
|
const isPosition = spec.path === "navigation.position";
|
|
182
408
|
const table = isPosition ? "signalk_position" : "signalk";
|
|
183
409
|
if (isPosition) {
|
|
@@ -258,7 +484,15 @@ export function createHistoryProviderV2(queryClient, selfContext) {
|
|
|
258
484
|
if (query.resolution && query.resolution > 0) {
|
|
259
485
|
valuesList[specIndex].method = "last";
|
|
260
486
|
}
|
|
261
|
-
|
|
487
|
+
const strResult = await readStringRows(where, query.resolution);
|
|
488
|
+
if (strResult.sourceDropped) {
|
|
489
|
+
// The rows came back unfiltered because signalk_str has no `source`
|
|
490
|
+
// column. They are every source's rows, so the column must stop
|
|
491
|
+
// claiming to be one source's — labelling unfiltered data with a
|
|
492
|
+
// $source would be a lie the caller cannot detect.
|
|
493
|
+
delete valuesList[specIndex].$source;
|
|
494
|
+
}
|
|
495
|
+
columnData.set(specIndex, strResult.rows);
|
|
262
496
|
continue;
|
|
263
497
|
}
|
|
264
498
|
columnData.set(specIndex, rows);
|
|
@@ -280,7 +514,7 @@ export function createHistoryProviderV2(queryClient, selfContext) {
|
|
|
280
514
|
}
|
|
281
515
|
const data = sortedTimestamps.map((ts) => {
|
|
282
516
|
const row = [ts];
|
|
283
|
-
for (let i = 0; i <
|
|
517
|
+
for (let i = 0; i < columns.length; i++) {
|
|
284
518
|
const m = indexMaps.get(i);
|
|
285
519
|
row.push(m?.get(ts) ?? null);
|
|
286
520
|
}
|
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":"AAAA,OAAO,EAEL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,gBAAgB,EAAiB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAoE5B,SAAS,cAAc,CAAC,MAAc;IACpC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,YAAY,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,YAAY,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,cAAc,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,aAAa,CAAC;QACvB,KAAK,KAAK;YACR,OAAO,+BAA+B,CAAC;QACzC;YACE,OAAO,YAAY,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAc;IAChD,OAAO,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,CAAC;AAC3E,CAAC;AAED,SAAS,UAAU,CAAC,MAAyB,EAAE,CAAS;IACtD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CACjB,MAAyB,EACzB,KAAa;IAEb,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;QACxC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,KAAoB,EAAE,OAAgB;IAC7D,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,UAAU,IAAI,gBAAgB,EAAE,GAAG,CAAC;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,IAAI,mBAAmB,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC;IAC7D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,sEAAsE;AACtE,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,IAGzB;IACC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,kBAAkB,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IACjE,CAAC;IACD,yEAAyE;IACzE,iEAAiE;IACjE,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,qBAAqB,CAAC;IACpD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAC,OAAe,EAAE,WAAmB;IAC5D,IACE,OAAO,KAAK,MAAM;QAClB,OAAO,KAAK,cAAc;QAC1B,OAAO,KAAK,WAAW,EACvB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,sEAAsE;AACtE,4EAA4E;AAC5E,4EAA4E;AAC5E,wEAAwE;AACxE,2EAA2E;AAC3E,6EAA6E;AAC7E,mDAAmD;AACnD,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAErC,0EAA0E;AAC1E,4EAA4E;AAC5E,8DAA8D;AAC9D,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,2EAA2E;AAC3E,uEAAuE;AACvE,0EAA0E;AAC1E,+EAA+E;AAC/E,8DAA8D;AAC9D,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,4EAA4E;AAC5E,0EAA0E;AAC1E,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,WAAwB,EACxB,WAAmB;AACnB,wEAAwE;AACxE,yEAAyE;AACzE,uEAAuE;AACvE,2EAA2E;AAC3E,wCAAwC;AACxC,sBAAsB,GAAG,KAAK;AAC9B,yEAAyE;AACzE,wBAAwB;AACxB,QAA+B,GAAG,EAAE,GAAE,CAAC;IAEvC;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,UAAU,eAAe,CAC5B,IAAY,EACZ,KAAoB,EACpB,WAAmB;QAEnB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACvD,MAAM,MAAM,GACV,IAAI,KAAK,qBAAqB;YAC5B,CAAC,CAAC,CAAC,sDAAsD,UAAU,EAAE,CAAC;YACtE,CAAC,CAAC;gBACE,6CAA6C,UAAU,gBAAgB,QAAQ,GAAG;gBAClF,iDAAiD,UAAU,gBAAgB,QAAQ,GAAG;aACvF,CAAC;QAER,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACrB,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;gBACvD,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,4DAA4D;oBAC5D,4DAA4D;oBAC5D,+DAA+D;oBAC/D,iEAAiE;oBACjE,8DAA8D;oBAC9D,4BAA4B;oBAC5B,KAAK,CACH,qBAAqB,KAAK,8BAA8B;wBACtD,GAAG,IAAI,oDAAoD;wBAC3D,6DAA6D,CAChE,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,gEAAgE;oBAChE,gCAAgC;oBAChC,SAAS;gBACX,CAAC;gBACD,sEAAsE;gBACtE,qEAAqE;gBACrE,+CAA+C;gBAC/C,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,oEAAoE;QACpE,qEAAqE;QACrE,8CAA8C;QAC9C,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,MAAM,GAAG,GAAsB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAE1E,qEAAqE;QACrE,0EAA0E;QAC1E,sEAAsE;QACtE,wEAAwE;QACxE,+DAA+D;QAC/D,IAAI,GAAG,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;YACtC,KAAK,CACH,qBAAqB,IAAI,QAAQ,GAAG,CAAC,MAAM,qBAAqB;gBAC9D,uBAAuB,oBAAoB,iBAAiB,CAC/D,CAAC;YACF,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,UAAU,cAAc,CAC3B,KAAa,EACb,UAAmB;QAEnB,wEAAwE;QACxE,wEAAwE;QACxE,uEAAuE;QACvE,sEAAsE;QACtE,8CAA8C;QAC9C,MAAM,GAAG,GAAG,CAAC,QAAiB,EAAE,UAAmB,EAAE,EAAE;YACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9C,uEAAuE;YACvE,8DAA8D;YAC9D,sEAAsE;YACtE,2BAA2B;YAC3B,MAAM,MAAM,GAAG,UAAU;gBACvB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;YAC5D,OAAO,UAAU,IAAI,UAAU,GAAG,CAAC;gBACjC,CAAC,CAAC,iDAAiD,IAAI,0CAA0C,MAAM,cAAc,mBAAmB,CAAC,UAAU,CAAC,0BAA0B;gBAC9K,CAAC,CAAC,yBAAyB,IAAI,yCAAyC,MAAM,0BAA0B,CAAC;QAC7G,CAAC,CAAC;QACF,wEAAwE;QACxE,wEAAwE;QACxE,mEAAmE;QACnE,gDAAgD;QAChD,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,MAAM,GAAG,GAAG,KAAK,EACf,QAAiB,EACjB,UAAmB,EACK,EAAE;YAC1B,IAAI,CAAC;gBACH,OAAO,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,QAAQ,IAAI,mBAAmB,CAAC,GAAG,CAAC;oBAAE,OAAO,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBACxE,IAAI,UAAU,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7C,aAAa,GAAG,IAAI,CAAC;oBACrB,KAAK,CACH,6DAA6D;wBAC3D,+DAA+D;wBAC/D,kDAAkD,CACrD,CAAC;oBACF,OAAO,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC9B,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAc,EAAE,EAAE,CAAC;gBAC3C,GAAG,CAAC,CAAC,CAAW;gBAChB,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aAClD,CAAC;YACF,aAAa;SACd,CAAC;IACJ,CAAC;IAED,KAAK,UAAU,SAAS,CAAC,KAAoB;QAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAY,CAAC,CAAC;QAE7C,uEAAuE;QACvE,0EAA0E;QAC1E,0EAA0E;QAC1E,iEAAiE;QACjE,MAAM,cAAc,GAClB,sBAAsB,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC;QAEzD,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC;QACzD,MAAM,aAAa,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAEtD,2DAA2D;QAC3D,wEAAwE;QACxE,0EAA0E;QAC1E,uEAAuE;QACvE,yEAAyE;QACzE,uEAAuE;QACvE,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtC,qEAAqE;gBACrE,qCAAqC;gBACrC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,SAAS;YACX,CAAC;YACD,oEAAoE;YACpE,oEAAoE;YACpE,uEAAuE;YACvE,uEAAuE;YACvE,0BAA0B;YAC1B,IAAI,OAAO,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,sDAAsD;oBACpD,GAAG,oBAAoB,0CAA0C;oBACjE,sDAAsD,CACzD,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;YACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,oEAAoE;gBACpE,iEAAiE;gBACjE,mEAAmE;gBACnE,6CAA6C;gBAC7C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,mEAAmE;gBACnE,kEAAkE;gBAClE,2DAA2D;gBAC3D,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACpB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC9C,SAAS;gBACX,CAAC;gBACD,iEAAiE;gBACjE,qEAAqE;gBACrE,mEAAmE;gBACnE,oEAAoE;gBACpE,qEAAqE;gBACrE,iEAAiE;gBACjE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9B,KAAK,CACH,sCAAsC,MAAM,SAAS,IAAI,CAAC,IAAI,KAAK;wBACjE,+DAA+D,CAClE,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,uEAAuE;YACvE,+CAA+C;YAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,6CAA6C,OAAO,CAAC,MAAM,WAAW;gBACpE,QAAQ,oBAAoB,uCAAuC;gBACnE,kDAAkD,CACrD,CAAC;QACJ,CAAC;QAED,qEAAqE;QACrE,wEAAwE;QACxE,yEAAyE;QACzE,uEAAuE;QACvE,2BAA2B;QAC3B,EAAE;QACF,sEAAsE;QACtE,sEAAsE;QACtE,mCAAmC;QACnC,EAAE;QACF,wEAAwE;QACxE,sEAAsE;QACtE,oEAAoE;QACpE,sEAAsE;QACtE,wEAAwE;QACxE,4BAA4B;QAC5B,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CACjC,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,IAAI,KAAK,qBAAqB;YACnC,CAAC,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,CAC9C,CAAC,MAAM,CAAC;QACT,uEAAuE;QACvE,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,CACzC,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,IAAI,KAAK,qBAAqB;YACnC,CAAC,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,CAC9C,CAAC,MAAM,CAAC;QAET,IAAI,YAAY,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACjE,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;YACxE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,CACjD,CAAC;YACF,MAAM,gBAAgB,GAAG,YAAY,GAAG,oBAAoB,CAAC;YAC7D,MAAM,OAAO,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;YACpD,IAAI,OAAO,GAAG,kBAAkB,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,cAAc,KAAK,CAAC,UAAU,mCAAmC;oBAC/D,GAAG,OAAO,0BAA0B,YAAY,SAAS;oBACzD,QAAQ,kBAAkB,kCAAkC;oBAC5D,iBAAiB,CACpB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAkB,EAAE,CAAC;QACrC,yEAAyE;QACzE,oEAAoE;QACpE,kEAAkE;QAClE,uCAAuC;QACvC,MAAM,UAAU,GAAqC,IAAI,GAAG,EAAE,CAAC;QAE/D,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAgB;gBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,SAAS;aACvB,CAAC;YACF,wEAAwE;YACxE,sEAAsE;YACtE,IAAI,IAAI,CAAC,SAAS;gBAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YACnD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEvB,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,qBAAqB,CAAC;YACvD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;YAE1D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,WAAW,CAAC;gBAChE,oEAAoE;gBACpE,+DAA+D;gBAC/D,oEAAoE;gBACpE,+DAA+D;gBAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC5D,IAAI,GAAW,CAAC;gBAChB,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;oBAC7C,GAAG,GAAG,cAAc,MAAM,iBAAiB,MAAM,qBAAqB,KAAK,UAAU,KAAK,cAAc,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,0BAA0B,CAAC;gBAC1K,CAAC;qBAAM,CAAC;oBACN,GAAG,GAAG,4BAA4B,KAAK,UAAU,KAAK,0BAA0B,CAAC;gBACnF,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3C,MAAM,IAAI,GAAwB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;oBAC5D,GAAG,CAAC,CAAC,CAAW;oBAChB,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;wBAChC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;wBACzC,CAAC,CAAC,IAAI;iBACT,CAAC,CAAC;gBACH,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAChC,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,QAAQ,IAAI,WAAW,EAAE,CAAC;YAE9F,IAAI,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/C,MAAM,GAAG,GAAG,yBAAyB,KAAK,UAAU,KAAK,0BAA0B,CAAC;gBACpF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;gBAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAkB,CAAC,CAAC;gBAEnE,IAAI,QAA2B,CAAC;gBAChC,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;oBAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;oBACjD,QAAQ,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBACtC,CAAC;qBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;oBACpC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;oBACrD,QAAQ,GAAG,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC7C,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxE,CAAC;gBAED,MAAM,IAAI,GAAwB,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1D,EAAE;oBACF,QAAQ,CAAC,CAAC,CAAC;iBACZ,CAAC,CAAC;gBACH,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAChC,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,GAAW,CAAC;YAChB,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBAC7C,GAAG,GAAG,cAAc,OAAO,sBAAsB,KAAK,UAAU,KAAK,cAAc,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,0BAA0B,CAAC;YACrJ,CAAC;iBAAM,CAAC;gBACN,GAAG,GAAG,yBAAyB,KAAK,UAAU,KAAK,0BAA0B,CAAC;YAChF,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAwB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;gBAC5D,GAAG,CAAC,CAAC,CAAW;gBAChB,GAAG,CAAC,CAAC,CAAC;aACP,CAAC,CAAC;YAEH,qEAAqE;YACrE,qEAAqE;YACrE,oEAAoE;YACpE,gEAAgE;YAChE,iEAAiE;YACjE,mEAAmE;YACnE,gCAAgC;YAChC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC9C,qEAAqE;gBACrE,sEAAsE;gBACtE,gEAAgE;gBAChE,6CAA6C;gBAC7C,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;oBAC7C,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxC,CAAC;gBACD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAChE,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;oBAC5B,oEAAoE;oBACpE,gEAAgE;oBAChE,iEAAiE;oBACjE,mDAAmD;oBACnD,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;gBACvC,CAAC;gBACD,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC1C,SAAS;YACX,CAAC;YAED,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;gBACxB,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;QAE1D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;QAC1D,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,IAAI,GAAG,EAAmB,CAAC;YACrC,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC7B,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,IAAI,GAA6B,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACjE,MAAM,GAAG,GAA2B,CAAC,EAAE,CAAC,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,gBAAgB;YACzB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;YACzC,MAAM,EAAE,UAAU;YAClB,IAAI;SACL,CAAC;IACJ,CAAC;IAED,KAAK,UAAU,QAAQ,CAAC,KAAmB;QACzC,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAY,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAErC,6DAA6D;QAC7D,0EAA0E;QAC1E,sEAAsE;QACtE,0EAA0E;QAC1E,+BAA+B;QAC/B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CACnC,2CAA2C,KAAK;;qDAED,KAAK;;gFAEsB,KAAK;qBAChE,CAChB,CAAC;QAEF,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAW,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,KAAsB;QAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAY,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAErC,wEAAwE;QACxE,wEAAwE;QACxE,uDAAuD;QACvD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CACnC,8CAA8C,KAAK;;wDAED,KAAK;;6DAEA,KAAK;wBAC1C,CACnB,CAAC;QAEF,oEAAoE;QACpE,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAChC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;YAC7B,OAAO,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC9C,CAAC"}
|
package/dist/ilp-writer.d.ts
CHANGED
|
@@ -45,6 +45,28 @@ export declare class ILPWriter {
|
|
|
45
45
|
private markHealthy;
|
|
46
46
|
private scheduleReconnect;
|
|
47
47
|
private nextNanos;
|
|
48
|
+
writeAtNanos(path: string, context: string, value: number, tsNanos: bigint, source?: string): void;
|
|
49
|
+
writeStringAtNanos(path: string, context: string, value: string, tsNanos: bigint, kind?: "boolean" | "identity", source?: string): void;
|
|
50
|
+
writePositionAtNanos(context: string, position: {
|
|
51
|
+
latitude: number;
|
|
52
|
+
longitude: number;
|
|
53
|
+
}, tsNanos: bigint, source?: string): void;
|
|
54
|
+
/**
|
|
55
|
+
* Roughly how much is still in flight, so a bulk importer can apply
|
|
56
|
+
* backpressure instead of queueing an entire InfluxDB into memory.
|
|
57
|
+
*
|
|
58
|
+
* Counts BOTH the unflushed lines and what is still sitting inside the
|
|
59
|
+
* socket. flush() clears `buffer` even when `socket.write()` returns false
|
|
60
|
+
* (the data is handed to the kernel queue, not yet on the wire), so counting
|
|
61
|
+
* only `buffer` would report an idle writer while the socket backs up — and
|
|
62
|
+
* the importer would keep reading until MAX_BUFFER_LINES started dropping
|
|
63
|
+
* the OLDEST lines, silently losing the history being copied.
|
|
64
|
+
*
|
|
65
|
+
* The socket side is an estimate: `writableLength` is bytes, converted at a
|
|
66
|
+
* nominal line size. The importer only needs an order of magnitude to decide
|
|
67
|
+
* whether to pause, not an exact count.
|
|
68
|
+
*/
|
|
69
|
+
get pendingLines(): number;
|
|
48
70
|
write(path: string, context: string, value: number, timestamp?: Date, source?: string): void;
|
|
49
71
|
writeString(path: string, context: string, value: string, timestamp?: Date, kind?: "boolean" | "identity", source?: string): void;
|
|
50
72
|
writePosition(context: string, position: {
|