@openmixer/plugin-qualify 0.5.1 → 0.6.0
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/README.md +17 -0
- package/dist/clap-qualify.js +8 -10
- package/dist/clap-qualify.js.map +1 -1
- package/dist/cost-fields.d.ts +46 -0
- package/dist/cost-fields.js +46 -0
- package/dist/cost-fields.js.map +1 -0
- package/dist/hosting-codes.d.ts +2 -0
- package/dist/hosting-codes.js +2 -0
- package/dist/hosting-codes.js.map +1 -1
- package/dist/hosting-suitability.d.ts +15 -2
- package/dist/hosting-suitability.js +44 -12
- package/dist/hosting-suitability.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/measure-host.d.ts +21 -0
- package/dist/measure-host.js +124 -0
- package/dist/measure-host.js.map +1 -0
- package/dist/measurement/cli.d.ts +47 -7
- package/dist/measurement/cli.js +117 -9
- package/dist/measurement/cli.js.map +1 -1
- package/dist/measurement/format.d.ts +5 -0
- package/dist/measurement/format.js +2 -0
- package/dist/measurement/format.js.map +1 -1
- package/dist/measurement/vocabulary.d.ts +7 -2
- package/dist/measurement/vocabulary.js +7 -2
- package/dist/measurement/vocabulary.js.map +1 -1
- package/dist/qualify-declarations.d.ts +43 -5
- package/dist/qualify-declarations.js +44 -5
- package/dist/qualify-declarations.js.map +1 -1
- package/dist/tool-paths.d.ts +11 -0
- package/dist/tool-paths.js +18 -1
- package/dist/tool-paths.js.map +1 -1
- package/package.json +1 -1
- package/src/clap-qualify.ts +6 -11
- package/src/cost-fields.ts +72 -0
- package/src/hosting-codes.ts +2 -0
- package/src/hosting-suitability.ts +58 -12
- package/src/index.ts +2 -0
- package/src/measure-host.ts +112 -0
- package/src/measurement/cli.ts +146 -15
- package/src/measurement/format.ts +7 -0
- package/src/measurement/vocabulary.ts +8 -2
- package/src/qualify-declarations.ts +49 -5
- package/src/tool-paths.ts +29 -1
- package/tools/benchmark.py +126 -6
- package/tools/lv2-measure.mjs +76 -9
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
// Copyright (C) 2026 Pau Aliagas <linuxnow@gmail.com>
|
|
3
|
+
/**
|
|
4
|
+
* Reading what the measuring host (`lv2_measure`) prints and supervising how long it may take
|
|
5
|
+
* (`2026-09-25-plugin-qualify.md` §2a). Pure functions: the runner spawns, these decide.
|
|
6
|
+
*/
|
|
7
|
+
import { isRecord } from "./measurement/guards.js";
|
|
8
|
+
import { SOAK_SWEEP_DB, SOAK_SWEEP_RATIO, SOAK_TIMEOUT_FLOOR_S, SOAK_TIMEOUT_MARGIN } from "./qualify-declarations.js";
|
|
9
|
+
/**
|
|
10
|
+
* Where `text` stops being JSON, scanning ONE value from `i`; returns the index just past the
|
|
11
|
+
* value, or `-(failing index) - 1` when it is not (negative means failure). A tolerant reader
|
|
12
|
+
* has to know the exact offset of the first bad character, which `JSON.parse` does not report
|
|
13
|
+
* portably.
|
|
14
|
+
*/
|
|
15
|
+
function scanValue(t, i) {
|
|
16
|
+
const ws = (k) => {
|
|
17
|
+
while (k < t.length && (t[k] === " " || t[k] === "\t" || t[k] === "\r" || t[k] === "\n"))
|
|
18
|
+
k++;
|
|
19
|
+
return k;
|
|
20
|
+
};
|
|
21
|
+
i = ws(i);
|
|
22
|
+
const c = t[i];
|
|
23
|
+
if (c === "{" || c === "[") {
|
|
24
|
+
const close = c === "{" ? "}" : "]";
|
|
25
|
+
let k = ws(i + 1);
|
|
26
|
+
if (t[k] === close)
|
|
27
|
+
return k + 1;
|
|
28
|
+
for (;;) {
|
|
29
|
+
if (c === "{") {
|
|
30
|
+
if (t[k] !== '"')
|
|
31
|
+
return -k - 1;
|
|
32
|
+
const key = scanValue(t, k);
|
|
33
|
+
if (key < 0)
|
|
34
|
+
return key;
|
|
35
|
+
k = ws(key);
|
|
36
|
+
if (t[k] !== ":")
|
|
37
|
+
return -k - 1;
|
|
38
|
+
k++;
|
|
39
|
+
}
|
|
40
|
+
const v = scanValue(t, k);
|
|
41
|
+
if (v < 0)
|
|
42
|
+
return v;
|
|
43
|
+
k = ws(v);
|
|
44
|
+
if (t[k] === close)
|
|
45
|
+
return k + 1;
|
|
46
|
+
if (t[k] !== ",")
|
|
47
|
+
return -k - 1;
|
|
48
|
+
k = ws(k + 1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (c === '"') {
|
|
52
|
+
let k = i + 1;
|
|
53
|
+
while (k < t.length) {
|
|
54
|
+
if (t[k] === "\\")
|
|
55
|
+
k += 2;
|
|
56
|
+
else if (t[k] === '"')
|
|
57
|
+
return k + 1;
|
|
58
|
+
else if (t[k] === "\n")
|
|
59
|
+
return -k - 1;
|
|
60
|
+
else
|
|
61
|
+
k++;
|
|
62
|
+
}
|
|
63
|
+
return -t.length - 1;
|
|
64
|
+
}
|
|
65
|
+
const lit = /^(?:-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)/.exec(t.slice(i, i + 40));
|
|
66
|
+
return lit === null ? -i - 1 : i + lit[0].length;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The tool's one JSON record out of a stdout a plugin has also printed on (Guitarix:
|
|
70
|
+
* `using block size: 0`, `convolver disabled`, written by the plugin into the middle of the
|
|
71
|
+
* tool's own buffered line). The record is the last `{`-leading line that repairs to one valid
|
|
72
|
+
* object: wherever the text stops being JSON, drop through the end of that line — the
|
|
73
|
+
* plugin's banner — and join what follows. `undefined` when nothing repairs: the caller
|
|
74
|
+
* reports a `parse-error`, never a death.
|
|
75
|
+
*/
|
|
76
|
+
export function extractJsonRecord(stdout) {
|
|
77
|
+
const lines = stdout.split("\n");
|
|
78
|
+
let offset = 0;
|
|
79
|
+
const starts = [];
|
|
80
|
+
for (const line of lines) {
|
|
81
|
+
if (line.startsWith("{"))
|
|
82
|
+
starts.push(offset);
|
|
83
|
+
offset += line.length + 1;
|
|
84
|
+
}
|
|
85
|
+
for (const start of starts.reverse()) {
|
|
86
|
+
let text = stdout.slice(start);
|
|
87
|
+
for (let repairs = 0; repairs < 64; repairs++) {
|
|
88
|
+
const end = scanValue(text, 0);
|
|
89
|
+
if (end >= 0) {
|
|
90
|
+
try {
|
|
91
|
+
const parsed = JSON.parse(text.slice(0, end));
|
|
92
|
+
return isRecord(parsed) ? parsed : undefined;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const bad = -end - 1;
|
|
99
|
+
const eol = text.indexOf("\n", bad);
|
|
100
|
+
if (eol < 0)
|
|
101
|
+
break;
|
|
102
|
+
text = text.slice(0, bad) + text.slice(eol + 1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The wall-clock limit for a soak of `soakAudioS` audio seconds, from the calibration soak's
|
|
109
|
+
* measured speed: `wallPerAudio * soakAudioS * SOAK_TIMEOUT_MARGIN + SOAK_TIMEOUT_FLOOR_S`,
|
|
110
|
+
* rounded up. Refuses (throws) on a calibration that measured nothing: a guessed limit is the
|
|
111
|
+
* fixed 900 s again.
|
|
112
|
+
*/
|
|
113
|
+
export function soakTimeoutSeconds(calibration, soakAudioS) {
|
|
114
|
+
const { wallSeconds, audioSeconds } = calibration;
|
|
115
|
+
if (!(wallSeconds > 0) || !(audioSeconds > 0) || !(soakAudioS > 0)) {
|
|
116
|
+
throw new Error("soakTimeoutSeconds: calibration measured no speed");
|
|
117
|
+
}
|
|
118
|
+
return Math.ceil((wallSeconds / audioSeconds) * soakAudioS * SOAK_TIMEOUT_MARGIN + SOAK_TIMEOUT_FLOOR_S);
|
|
119
|
+
}
|
|
120
|
+
/** The environment that bounds the host's soak sweep to the declared ranges. */
|
|
121
|
+
export function soakSweepEnv() {
|
|
122
|
+
return { OMX_SWEEP_DB: String(SOAK_SWEEP_DB), OMX_SWEEP_RATIO: String(SOAK_SWEEP_RATIO) };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=measure-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure-host.js","sourceRoot":"","sources":["../src/measure-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,13 @@
|
|
|
21
21
|
* mildly hazardous thing to start by accident — a plugin can and does crash its host — so it
|
|
22
22
|
* is gated behind `--run` (or `LV2_MEASURE_RUN=1`), exactly as `benchmark.py` gates itself.
|
|
23
23
|
* `--dry-run` prints the plan and probes nothing.
|
|
24
|
+
*
|
|
25
|
+
* ## The hosting pass
|
|
26
|
+
*
|
|
27
|
+
* `stability`, `rtSafety` and `features` are measured by the native measurer (`native/lv2-measure.c`,
|
|
28
|
+
* `lv2_measure`), run once per plugin under the interposer, in its own process so a crash is a
|
|
29
|
+
* reading and never the run's end. Its lines are the hosting sweep's, read by `sweep-jsonl.ts`.
|
|
30
|
+
* The plugins are the scan's, or exactly the `--plugins` named, which needs no scan.
|
|
24
31
|
*/
|
|
25
32
|
import type { MeasurementDocument } from "./format.js";
|
|
26
33
|
import type { MeasurementHost, LatencyMethod } from "./format.js";
|
|
@@ -41,6 +48,8 @@ export interface MeasureOptions {
|
|
|
41
48
|
readonly dimensions: readonly MeasurementDimension[];
|
|
42
49
|
/** An existing prober scan to reuse instead of scanning. */
|
|
43
50
|
readonly scanPath?: string;
|
|
51
|
+
/** The plugins the hosting pass measures, instead of every plugin the scan finds. */
|
|
52
|
+
readonly plugins?: readonly string[];
|
|
44
53
|
/** Where intermediates are written. */
|
|
45
54
|
readonly workDir: string;
|
|
46
55
|
/** Also sweep latency-bearing controls to find parameter-dependent latency. */
|
|
@@ -59,11 +68,15 @@ export interface MeasureOptions {
|
|
|
59
68
|
}
|
|
60
69
|
/** One subprocess the pipeline runs, and what it leaves behind. */
|
|
61
70
|
export interface PipelineStep {
|
|
62
|
-
/** Stable id: `scan` / `latency-declared` / `latency-measured` / `cost`. */
|
|
71
|
+
/** Stable id: `scan` / `latency-declared` / `latency-measured` / `cost` / `hosting`. */
|
|
63
72
|
readonly id: string;
|
|
64
73
|
readonly command: string;
|
|
65
74
|
readonly args: readonly string[];
|
|
66
|
-
/**
|
|
75
|
+
/** Run once per plugin, the plugin's URI before `args` (the hosting pass). */
|
|
76
|
+
readonly perPlugin?: boolean;
|
|
77
|
+
/** Set in the step's environment, over the caller's. */
|
|
78
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
79
|
+
/** The catalog JSON this step writes — the next step's input; the hosting pass's JSONL. */
|
|
67
80
|
readonly produces: string;
|
|
68
81
|
/** The dimension this step measures, when it measures one. */
|
|
69
82
|
readonly dimension?: MeasurementDimension;
|
|
@@ -71,8 +84,10 @@ export interface PipelineStep {
|
|
|
71
84
|
/** The full plan: the steps, and where the run's artefacts land. */
|
|
72
85
|
export interface Pipeline {
|
|
73
86
|
readonly steps: readonly PipelineStep[];
|
|
74
|
-
/** The catalog JSON carrying every annotation once the last step has run. */
|
|
75
|
-
readonly finalCatalog
|
|
87
|
+
/** The catalog JSON carrying every annotation once the last step has run; absent when nothing is scanned. */
|
|
88
|
+
readonly finalCatalog?: string;
|
|
89
|
+
/** The scan the hosting pass takes its plugins from, when `--plugins` does not name them. */
|
|
90
|
+
readonly hostingScan?: string;
|
|
76
91
|
/** Where the cost pass writes its machine provenance, when cost is measured. */
|
|
77
92
|
readonly costProvenance?: string;
|
|
78
93
|
}
|
|
@@ -84,7 +99,28 @@ export interface Pipeline {
|
|
|
84
99
|
* ends with one file carrying both — which is also why `finalCatalog` is a property of the
|
|
85
100
|
* pipeline rather than a fixed name.
|
|
86
101
|
*/
|
|
87
|
-
export declare function buildPipeline(options: MeasureOptions): Pipeline;
|
|
102
|
+
export declare function buildPipeline(options: MeasureOptions, native?: HostingTools): Pipeline;
|
|
103
|
+
/** The native measurer and the interposer it runs under, as located for this run. */
|
|
104
|
+
export interface HostingTools {
|
|
105
|
+
readonly tool: string;
|
|
106
|
+
readonly interposer: string;
|
|
107
|
+
}
|
|
108
|
+
/** The plugin URIs of a scan (a flat array of descriptors), in its order, each once. */
|
|
109
|
+
export declare function urisFromScan(scan: unknown): string[];
|
|
110
|
+
/** How one run of the native measurer ended. `signal` is a death, `timedOut` the run killed for its time. */
|
|
111
|
+
export interface HostingRunResult {
|
|
112
|
+
readonly status: number | null;
|
|
113
|
+
readonly signalNumber?: number;
|
|
114
|
+
readonly timedOut?: boolean;
|
|
115
|
+
readonly stdout: string;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* One plugin's run of the native measurer as the hosting sweep's JSONL line: the LAST line of its
|
|
119
|
+
* stdout that is a JSON object (a plugin may print its own banner first), with the exit status
|
|
120
|
+
* beside it, a death written as 128 + its signal and a timeout as 124. A run that printed no line
|
|
121
|
+
* is `crashed`, its exit kept: what that exit means is the reader's (`sweep-jsonl.ts`) to say.
|
|
122
|
+
*/
|
|
123
|
+
export declare function hostingLine(uri: string, run: HostingRunResult): Record<string, unknown>;
|
|
88
124
|
/** A parsed command line, or the reason it could not be parsed. */
|
|
89
125
|
export type ArgParseResult = {
|
|
90
126
|
readonly ok: true;
|
|
@@ -93,6 +129,8 @@ export type ArgParseResult = {
|
|
|
93
129
|
readonly ok: false;
|
|
94
130
|
readonly error: string;
|
|
95
131
|
};
|
|
132
|
+
/** What `--dimensions` takes: the prober's, and the hosting pass's. */
|
|
133
|
+
export declare const MEASURED_DIMENSIONS: readonly MeasurementDimension[];
|
|
96
134
|
/**
|
|
97
135
|
* Parse `lv2-measure`'s command line.
|
|
98
136
|
*
|
|
@@ -143,8 +181,10 @@ export declare function advanceProgress(state: ProgressState, event: ProbeProgre
|
|
|
143
181
|
/** Everything {@link assembleDocument} needs beyond the probe output. */
|
|
144
182
|
export interface AssemblyInput {
|
|
145
183
|
readonly options: MeasureOptions;
|
|
146
|
-
/** The final catalog JSON, already parsed. */
|
|
147
|
-
readonly catalog
|
|
184
|
+
/** The final catalog JSON, already parsed. Absent when the run measured no prober dimension. */
|
|
185
|
+
readonly catalog?: unknown;
|
|
186
|
+
/** The hosting pass's lines ({@link hostingLine}), one per plugin. Absent when it did not run. */
|
|
187
|
+
readonly hosting?: readonly unknown[];
|
|
148
188
|
/** The cost pass's provenance JSON, already parsed. Absent on a latency-only run. */
|
|
149
189
|
readonly costProvenance?: unknown;
|
|
150
190
|
/** Host facts, for a run whose provenance the cost pass did not write. */
|
package/dist/measurement/cli.js
CHANGED
|
@@ -23,12 +23,22 @@
|
|
|
23
23
|
* mildly hazardous thing to start by accident — a plugin can and does crash its host — so it
|
|
24
24
|
* is gated behind `--run` (or `LV2_MEASURE_RUN=1`), exactly as `benchmark.py` gates itself.
|
|
25
25
|
* `--dry-run` prints the plan and probes nothing.
|
|
26
|
+
*
|
|
27
|
+
* ## The hosting pass
|
|
28
|
+
*
|
|
29
|
+
* `stability`, `rtSafety` and `features` are measured by the native measurer (`native/lv2-measure.c`,
|
|
30
|
+
* `lv2_measure`), run once per plugin under the interposer, in its own process so a crash is a
|
|
31
|
+
* reading and never the run's end. Its lines are the hosting sweep's, read by `sweep-jsonl.ts`.
|
|
32
|
+
* The plugins are the scan's, or exactly the `--plugins` named, which needs no scan.
|
|
26
33
|
*/
|
|
27
34
|
import { join } from "node:path";
|
|
28
35
|
import { buildMeasurementDocument } from "./format.js";
|
|
29
36
|
import { measuredPluginsFromProbeOutput } from "./probe-json.js";
|
|
30
37
|
import { buildRun, costMethodFromProbeProvenance, hostFromProbeProvenance } from "./provenance.js";
|
|
31
|
-
import {
|
|
38
|
+
import { measuredPluginsFromSweep } from "./sweep-jsonl.js";
|
|
39
|
+
import { isRecord, nonEmptyString } from "./guards.js";
|
|
40
|
+
import { HOSTING_PASS_DIMENSIONS, PROBED_DIMENSIONS } from "./vocabulary.js";
|
|
41
|
+
import { LV2_HOSTING_BLOCK_FRAMES, LV2_HOSTING_LIFECYCLES, LV2_HOSTING_REPEATS } from "../qualify-declarations.js";
|
|
32
42
|
/** Name and version this tool stamps into every document it writes. */
|
|
33
43
|
export const TOOL_NAME = "lv2-measure";
|
|
34
44
|
/**
|
|
@@ -45,12 +55,16 @@ export const TOOL_VERSION = "0.1.0";
|
|
|
45
55
|
* ends with one file carrying both — which is also why `finalCatalog` is a property of the
|
|
46
56
|
* pipeline rather than a fixed name.
|
|
47
57
|
*/
|
|
48
|
-
export function buildPipeline(options) {
|
|
58
|
+
export function buildPipeline(options, native) {
|
|
49
59
|
const steps = [];
|
|
50
60
|
const benchmark = join(options.toolDir, "benchmark.py");
|
|
51
61
|
const rates = [...options.rates].sort((a, b) => a - b).join(",");
|
|
62
|
+
const probed = options.dimensions.some((d) => PROBED_DIMENSIONS.includes(d));
|
|
63
|
+
const hosting = options.dimensions.some((d) => HOSTING_PASS_DIMENSIONS.includes(d));
|
|
64
|
+
if (hosting && native === undefined)
|
|
65
|
+
throw new Error("the hosting pass needs the native measurer and the interposer");
|
|
52
66
|
let current = options.scanPath;
|
|
53
|
-
if (current === undefined) {
|
|
67
|
+
if (current === undefined && (probed || options.plugins === undefined)) {
|
|
54
68
|
current = join(options.workDir, "scan.json");
|
|
55
69
|
steps.push({
|
|
56
70
|
id: "scan",
|
|
@@ -59,7 +73,8 @@ export function buildPipeline(options) {
|
|
|
59
73
|
produces: current,
|
|
60
74
|
});
|
|
61
75
|
}
|
|
62
|
-
|
|
76
|
+
// a prober dimension always has a scan: --plugins is refused beside one
|
|
77
|
+
if (options.dimensions.includes("latency") && current !== undefined) {
|
|
63
78
|
// Declared first: the measured pass sizes its capture window from this figure and
|
|
64
79
|
// computes declaredMismatch against it. Reversing the two silently degrades both.
|
|
65
80
|
const declared = join(options.workDir, "latency-declared.json");
|
|
@@ -92,7 +107,7 @@ export function buildPipeline(options) {
|
|
|
92
107
|
current = measured;
|
|
93
108
|
}
|
|
94
109
|
let costProvenance;
|
|
95
|
-
if (options.dimensions.includes("cost")) {
|
|
110
|
+
if (options.dimensions.includes("cost") && current !== undefined) {
|
|
96
111
|
costProvenance = join(options.workDir, "cost-provenance.json");
|
|
97
112
|
const cost = join(options.workDir, "cost.json");
|
|
98
113
|
steps.push({
|
|
@@ -117,12 +132,62 @@ export function buildPipeline(options) {
|
|
|
117
132
|
});
|
|
118
133
|
current = cost;
|
|
119
134
|
}
|
|
135
|
+
if (hosting && native !== undefined) {
|
|
136
|
+
steps.push({
|
|
137
|
+
id: "hosting",
|
|
138
|
+
command: native.tool,
|
|
139
|
+
args: [
|
|
140
|
+
String(Math.max(...options.rates)),
|
|
141
|
+
String(LV2_HOSTING_BLOCK_FRAMES),
|
|
142
|
+
String(LV2_HOSTING_LIFECYCLES),
|
|
143
|
+
String(LV2_HOSTING_REPEATS),
|
|
144
|
+
],
|
|
145
|
+
perPlugin: true,
|
|
146
|
+
env: { LD_PRELOAD: native.interposer, OMX_STIM: "noise" },
|
|
147
|
+
produces: join(options.workDir, "hosting.jsonl"),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
120
150
|
return {
|
|
121
151
|
steps,
|
|
122
|
-
finalCatalog: current,
|
|
152
|
+
...(probed && current !== undefined ? { finalCatalog: current } : {}),
|
|
153
|
+
...(hosting && options.plugins === undefined && current !== undefined ? { hostingScan: current } : {}),
|
|
123
154
|
...(costProvenance === undefined ? {} : { costProvenance }),
|
|
124
155
|
};
|
|
125
156
|
}
|
|
157
|
+
/** The plugin URIs of a scan (a flat array of descriptors), in its order, each once. */
|
|
158
|
+
export function urisFromScan(scan) {
|
|
159
|
+
if (!Array.isArray(scan))
|
|
160
|
+
return [];
|
|
161
|
+
const uris = scan.flatMap((entry) => {
|
|
162
|
+
const uri = isRecord(entry) ? nonEmptyString(entry.uri) : undefined;
|
|
163
|
+
return uri === undefined ? [] : [uri];
|
|
164
|
+
});
|
|
165
|
+
return [...new Set(uris)];
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* One plugin's run of the native measurer as the hosting sweep's JSONL line: the LAST line of its
|
|
169
|
+
* stdout that is a JSON object (a plugin may print its own banner first), with the exit status
|
|
170
|
+
* beside it, a death written as 128 + its signal and a timeout as 124. A run that printed no line
|
|
171
|
+
* is `crashed`, its exit kept: what that exit means is the reader's (`sweep-jsonl.ts`) to say.
|
|
172
|
+
*/
|
|
173
|
+
export function hostingLine(uri, run) {
|
|
174
|
+
const exit = run.timedOut === true ? 124 : run.signalNumber !== undefined ? 128 + run.signalNumber : (run.status ?? 1);
|
|
175
|
+
const last = run.stdout
|
|
176
|
+
.split("\n")
|
|
177
|
+
.filter((line) => line.startsWith("{"))
|
|
178
|
+
.pop();
|
|
179
|
+
if (last !== undefined) {
|
|
180
|
+
try {
|
|
181
|
+
const row = JSON.parse(last);
|
|
182
|
+
if (isRecord(row))
|
|
183
|
+
return { ...row, exit };
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return { uri, exit, parseError: true };
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return { uri, exit, crashed: true };
|
|
190
|
+
}
|
|
126
191
|
function parseRates(text) {
|
|
127
192
|
const rates = text
|
|
128
193
|
.split(",")
|
|
@@ -130,9 +195,11 @@ function parseRates(text) {
|
|
|
130
195
|
.filter((rate) => Number.isFinite(rate) && rate > 0);
|
|
131
196
|
return rates.length > 0 ? [...new Set(rates)].sort((a, b) => a - b) : undefined;
|
|
132
197
|
}
|
|
198
|
+
/** What `--dimensions` takes: the prober's, and the hosting pass's. */
|
|
199
|
+
export const MEASURED_DIMENSIONS = [...PROBED_DIMENSIONS, ...HOSTING_PASS_DIMENSIONS];
|
|
133
200
|
function parseDimensions(text) {
|
|
134
201
|
const wanted = text.split(",").map((part) => part.trim());
|
|
135
|
-
const dimensions =
|
|
202
|
+
const dimensions = MEASURED_DIMENSIONS.filter((d) => wanted.includes(d));
|
|
136
203
|
return dimensions.length === wanted.filter((w) => w.length > 0).length && dimensions.length > 0
|
|
137
204
|
? [...dimensions]
|
|
138
205
|
: undefined;
|
|
@@ -149,6 +216,7 @@ export function parseMeasureArgs(argv, env = {}, defaults) {
|
|
|
149
216
|
let rates;
|
|
150
217
|
let dimensions = PROBED_DIMENSIONS;
|
|
151
218
|
let scanPath;
|
|
219
|
+
let plugins;
|
|
152
220
|
let workDir = defaults.workDir;
|
|
153
221
|
let sweep = false;
|
|
154
222
|
let costCpu;
|
|
@@ -183,7 +251,7 @@ export function parseMeasureArgs(argv, env = {}, defaults) {
|
|
|
183
251
|
const value = next();
|
|
184
252
|
const parsed = value === undefined ? undefined : parseDimensions(value);
|
|
185
253
|
if (parsed === undefined) {
|
|
186
|
-
return { ok: false, error: `--dimensions accepts ${
|
|
254
|
+
return { ok: false, error: `--dimensions accepts ${MEASURED_DIMENSIONS.join(",")}` };
|
|
187
255
|
}
|
|
188
256
|
dimensions = parsed;
|
|
189
257
|
break;
|
|
@@ -195,6 +263,14 @@ export function parseMeasureArgs(argv, env = {}, defaults) {
|
|
|
195
263
|
scanPath = value;
|
|
196
264
|
break;
|
|
197
265
|
}
|
|
266
|
+
case "--plugins": {
|
|
267
|
+
const value = next();
|
|
268
|
+
const uris = value === undefined ? [] : [...new Set(value.split(",").map((u) => u.trim()).filter((u) => u !== ""))];
|
|
269
|
+
if (uris.length === 0)
|
|
270
|
+
return { ok: false, error: "--plugins needs a comma-separated list of plugin URIs" };
|
|
271
|
+
plugins = uris;
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
198
274
|
case "--work-dir": {
|
|
199
275
|
const value = next();
|
|
200
276
|
if (value === undefined)
|
|
@@ -250,6 +326,12 @@ export function parseMeasureArgs(argv, env = {}, defaults) {
|
|
|
250
326
|
error: "--rates is required: a measurement with no stated rate is not a measurement",
|
|
251
327
|
};
|
|
252
328
|
}
|
|
329
|
+
if (plugins !== undefined && dimensions.some((d) => PROBED_DIMENSIONS.includes(d))) {
|
|
330
|
+
return {
|
|
331
|
+
ok: false,
|
|
332
|
+
error: `--plugins names the hosting pass's plugins; ${PROBED_DIMENSIONS.join(" and ")} measure every plugin the scan finds`,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
253
335
|
return {
|
|
254
336
|
ok: true,
|
|
255
337
|
options: {
|
|
@@ -263,6 +345,7 @@ export function parseMeasureArgs(argv, env = {}, defaults) {
|
|
|
263
345
|
dryRun,
|
|
264
346
|
...(outPath === undefined ? {} : { outPath }),
|
|
265
347
|
...(scanPath === undefined ? {} : { scanPath }),
|
|
348
|
+
...(plugins === undefined ? {} : { plugins }),
|
|
266
349
|
...(costCpu === undefined ? {} : { costCpu }),
|
|
267
350
|
...(label === undefined ? {} : { label }),
|
|
268
351
|
},
|
|
@@ -331,7 +414,10 @@ export const DEFAULT_LATENCY_BLOCK_FRAMES = 512;
|
|
|
331
414
|
* no cost pass do the caller's collected facts stand in.
|
|
332
415
|
*/
|
|
333
416
|
export function assembleDocument(input) {
|
|
334
|
-
const
|
|
417
|
+
const probed = input.options.dimensions.filter((d) => PROBED_DIMENSIONS.includes(d));
|
|
418
|
+
const plugins = probed.length > 0 && input.catalog !== undefined ? measuredPluginsFromProbeOutput(input.catalog, probed) : [];
|
|
419
|
+
if (input.hosting !== undefined)
|
|
420
|
+
mergeHosting(plugins, measuredPluginsFromSweep({ measurements: input.hosting }), input.options.dimensions);
|
|
335
421
|
const costMethod = costMethodFromProbeProvenance(input.costProvenance);
|
|
336
422
|
const host = hostFromProbeProvenance(input.costProvenance) ?? input.host;
|
|
337
423
|
const run = buildRun({
|
|
@@ -350,4 +436,26 @@ export function assembleDocument(input) {
|
|
|
350
436
|
});
|
|
351
437
|
return buildMeasurementDocument(run, plugins);
|
|
352
438
|
}
|
|
439
|
+
/**
|
|
440
|
+
* The hosting pass's plugins folded into the prober's, by URI: each keeps the hosting dimensions the
|
|
441
|
+
* run asked for and the pin, and a plugin only the hosting pass measured joins with its own topology.
|
|
442
|
+
*/
|
|
443
|
+
function mergeHosting(plugins, hosted, dimensions) {
|
|
444
|
+
for (const h of hosted) {
|
|
445
|
+
const blocks = {
|
|
446
|
+
...(dimensions.includes("stability") && h.stability !== undefined ? { stability: h.stability } : {}),
|
|
447
|
+
...(dimensions.includes("rtSafety") && h.rtSafety !== undefined ? { rtSafety: h.rtSafety } : {}),
|
|
448
|
+
...(dimensions.includes("features") && h.features !== undefined ? { features: h.features } : {}),
|
|
449
|
+
...(h.integrity === undefined ? {} : { integrity: h.integrity }),
|
|
450
|
+
};
|
|
451
|
+
const at = plugins.findIndex((p) => p.uri === h.uri);
|
|
452
|
+
if (at < 0) {
|
|
453
|
+
plugins.push({ uri: h.uri, ...(h.version === undefined ? {} : { version: h.version }), topology: h.topology, ...blocks });
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
const p = plugins[at];
|
|
457
|
+
plugins[at] = { ...p, ...(p.version === undefined && h.version !== undefined ? { version: h.version } : {}), ...blocks };
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
353
461
|
//# sourceMappingURL=cli.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/measurement/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/measurement/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -278,6 +278,11 @@ export interface SoakAtRate {
|
|
|
278
278
|
/** The process died at this rate. Every other field is then absent. */
|
|
279
279
|
readonly died?: boolean;
|
|
280
280
|
readonly instantiated?: boolean;
|
|
281
|
+
/** The SUPERVISOR stopped the render at its wall-clock limit: a fact about the harness, never a
|
|
282
|
+
* failure of the plugin (and never `died`). */
|
|
283
|
+
readonly timedOut?: boolean;
|
|
284
|
+
/** The wall-clock limit that cut it, in seconds. */
|
|
285
|
+
readonly timeoutSeconds?: number;
|
|
281
286
|
readonly seconds?: number;
|
|
282
287
|
readonly blockFrames?: number;
|
|
283
288
|
readonly windows?: number;
|
|
@@ -428,6 +428,8 @@ export function readSoakAtRate(value) {
|
|
|
428
428
|
return {
|
|
429
429
|
...optional("died", booleanValue(value.died)),
|
|
430
430
|
...optional("instantiated", booleanValue(value.instantiated)),
|
|
431
|
+
...optional("timedOut", booleanValue(value.timedOut)),
|
|
432
|
+
...optional("timeoutSeconds", finiteNumber(value.timeoutSeconds)),
|
|
431
433
|
...optional("seconds", finiteNumber(value.seconds)),
|
|
432
434
|
...optional("blockFrames", positiveNumber(value.blockFrames)),
|
|
433
435
|
...optional("windows", finiteNumber(value.windows)),
|