A terminal reader, ipx; the server is ipxd (#437)
ipx-tui (crates/tui) is iPX's reader in ratatui: your feeds, a feed's items, an item's text as plain text, read and flagged as on the page, through the API with an API token. It installs as `ipx`, so the daemon's binary is now `ipxd`: the Dockerfile, release script, tests and every doc and message that names its commands follow. Naming the binary ipxd alone renamed its crate, and with it every log target (ipx::scan became ipxd::scan): the default filters are ipx=info, so nearly every line would have been dropped and the dashboard's queries on the targets gone blank. The daemon's code is now a library still called ipx, under a five-line ipxd main.rs, and the targets are as they were. ratatui is taken without its default features: 32 new packages in place of 78. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RqkrVDqdiQEMWAkNGQ2tYA
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
// It builds a release binary (debug Argon2 alone takes a second a sign-in, which would measure
|
||||
// the build, not ipx), serves generated feeds from this process, starts a daemon on its own
|
||||
// config and data under /tmp/ipx-load, wiped first, seeds listeners, then runs each k6 script.
|
||||
// While each runs, `ipx status` is run every second, and the run fails if any answer takes 5s.
|
||||
// While each runs, `ipxd status` is run every second, and the run fails if any answer takes 5s.
|
||||
//
|
||||
// The daemon is on SQLite unless --postgres, which puts it in IPX_TEST_DATABASE_URL, the
|
||||
// database the Rust tests use on Postgres too (ipodderx_test on the server production's is on, in
|
||||
@@ -30,7 +30,7 @@ const USERS = Number(process.env.IPX_LOAD_USERS || 100);
|
||||
const MEDIA = 4;
|
||||
const ITEMS = 20;
|
||||
const BASE = `http://127.0.0.1:${WEB}`;
|
||||
const bin = path.join(repo, 'target/release/ipx');
|
||||
const bin = path.join(repo, 'target/release/ipxd');
|
||||
const SCRIPTS = ['browse', 'listening', 'media', 'signin'];
|
||||
const POSTGRES = process.argv.includes('--postgres');
|
||||
const PG_URL = process.env.IPX_TEST_DATABASE_URL || '';
|
||||
@@ -202,13 +202,13 @@ async function seed() {
|
||||
if (entries.flatMap(e => e.enclosures).filter(x => x.path).length >= MEDIA) break;
|
||||
if (Date.now() - t > 120_000) throw new Error(`the listener's ${MEDIA} files did not download in 120s`);
|
||||
}
|
||||
// A password, for the sign-in test; the CLI hashes it as `ipx user add` always does.
|
||||
// A password, for the sign-in test; the CLI hashes it as `ipxd user add` always does.
|
||||
execFileSync(bin, ['user', 'add', 'piper'], { input: 'piperpassword', env });
|
||||
}
|
||||
|
||||
// ---- the run --------------------------------------------------------------------------------
|
||||
|
||||
/// `ipx status` once a second until stopped: the slowest answer, and any that failed. Not
|
||||
/// `ipxd status` once a second until stopped: the slowest answer, and any that failed. Not
|
||||
/// spawnSync: blocked in it, this process stops draining the daemon's log, the pipe fills, and
|
||||
/// the daemon stalls writing its next line, which is the test measuring itself.
|
||||
function watchHealth() {
|
||||
@@ -269,7 +269,7 @@ function k6(script: string) {
|
||||
const stop = watchHealth();
|
||||
const code = await k6(script);
|
||||
const health = stop();
|
||||
console.log(`ipx status: slowest ${health.slowest}ms, ${health.failed} failed`);
|
||||
console.log(`ipxd status: slowest ${health.slowest}ms, ${health.failed} failed`);
|
||||
if (code !== 0) { failed++; console.log(`${script}: thresholds failed (k6 exit ${code})`); }
|
||||
if (health.failed || health.slowest >= 5000) { failed++; console.log(`${script}: the healthcheck would have failed`); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user