async function run(ctx, argv) { const argv0 = argv[0] || 'corestorectl' const parsed = bareP2pParseCommonFlags(argv.slice(1)) const args = parsed.rest const opt = parsed.opt if (opt.help || args.length === 0) { ctx.console.log( bareP2pHelpText( argv0, 'Inspect Corestore and Hyperdrive storage plane views from /proc.', argv0 + ' status | namespaces | mounts | replication', ['status --summary', 'namespaces', 'mounts --json'], ['routeview', 'swarmtop'] ) ) if (args.length === 0) ctx.exitCode = 1 return } const sub = String(args[0] || '').trim() if (sub === 'status') { const replication = await bareP2pReadProcJson(ctx, '/proc/bare_os/replication') const sparseIndex = await bareP2pReadProcJson( ctx, '/proc/bare_os/hyperdrive_sparse_index.json' ) const out = { schema: 1, replicationHealth: replication.health || 'unknown', replicatedKeys: Array.isArray(replication.keys) ? replication.keys.length : null, sparseBlocks: typeof sparseIndex.blockCount === 'number' ? sparseIndex.blockCount : null } bareP2pPrint( ctx, opt.summary ? { health: out.replicationHealth, keys: out.replicatedKeys } : out, opt ) return } if (sub === 'namespaces') { const hints = await bareP2pReadProcJson(ctx, '/proc/bare_os/snapshot_hints.json') const namespaces = hints.corestoreNamespaces || [ 'system', 'user', 'app', 'service', 'temporary', 'test' ] bareP2pPrint(ctx, { schema: 1, namespaces }, opt) return } if (sub === 'mounts') { const union = await bareP2pReadProcJson(ctx, '/proc/bare_os/union.json') const out = { schema: 1, hyperdriveMounts: union.mounts || [], note: 'Use /proc/bare_os/union.json and /proc/bare_os/replication for full detail.' } bareP2pPrint(ctx, out, opt) return } if (sub === 'replication') { const replication = await bareP2pReadProcJson(ctx, '/proc/bare_os/replication') bareP2pPrint(ctx, replication, opt) return } const sug = bareP2pSuggestSubcommand(sub, [ 'status', 'namespaces', 'mounts', 'replication' ]) bareP2pError( ctx, argv0, 'unsupported subcommand' + (sug ? ' (did you mean ' + sug + '?)' : ''), argv0 + ' --help', opt ) }