Files
bare-operating-system/packages/bare-os-booter/lib/p2p/bare-os-replication-proc-live.js
T
2026-08-18 18:11:28 -04:00

91 lines
2.9 KiB
JavaScript

/**
* Live Hyperdrive / core length hints for `/proc/bare_os/replication` and
* `metrics_live.replicationLive` (non-secret progress; not full per-peer throughput).
*
* @param {{ drive?: unknown, personalDrive?: unknown } | null | undefined} disk
* @param {number} peerCount
*/
export function buildBareOsReplicationLiveSketch(disk, peerCount) {
let systemCoreLength = null
let personalCoreLength = null
try {
const c =
disk &&
disk.drive &&
/** @type {{ core?: { length?: number } }} */ (disk.drive).core
if (c && typeof c.length === 'number') systemCoreLength = c.length
} catch {
systemCoreLength = null
}
try {
const c =
disk &&
disk.personalDrive &&
/** @type {{ core?: { length?: number } }} */ (disk.personalDrive).core
if (c && typeof c.length === 'number') personalCoreLength = c.length
} catch {
personalCoreLength = null
}
let auxiliaryDriveCount = 0
try {
if (disk && Array.isArray(disk.auxiliaryDrives))
auxiliaryDriveCount = disk.auxiliaryDrives.length
} catch {
auxiliaryDriveCount = 0
}
const stallHint =
peerCount === 0
? 'no_peers'
: systemCoreLength == null
? 'length_unavailable'
: 'ok'
/** @type {{ schema: number, download?: number, upload?: number, peers?: number, source?: string } | null} */
let monitorProgress = null
try {
const m = disk && disk.drive && typeof disk.drive.monitor === 'function'
? disk.drive.monitor()
: null
if (m && typeof m === 'object') {
const dl =
typeof m.downloadedBlocks === 'number'
? m.downloadedBlocks
: typeof m.download === 'number'
? m.download
: null
const ul =
typeof m.uploadedBlocks === 'number'
? m.uploadedBlocks
: typeof m.upload === 'number'
? m.upload
: null
const peers = typeof m.peers === 'number' ? m.peers : null
if (dl != null || ul != null || peers != null) {
monitorProgress = {
schema: 1,
...(dl != null ? { download: dl } : {}),
...(ul != null ? { upload: ul } : {}),
...(peers != null ? { peers } : {}),
source: 'hyperdrive.monitor'
}
}
}
} catch {
monitorProgress = null
}
return {
schema: 4,
systemCoreLength,
personalCoreLength,
auxiliaryDriveCount,
stallHint,
...(monitorProgress ? { monitorProgress } : {}),
corestoreSnapshotSurface: {
schema: 1,
operatorWorkflow:
'Pause or quiesce writers → replicate cores → export snapshot (corestore-snapshot style). Guest **`guestSuspendResume`** remains **ENOTSUP** unless the host registers Corestore suspend/resume hooks.',
readOnly: true
},
note: 'Schema 4 keeps schema 3 fields and optionally exposes monitorProgress when Hyperdrive monitor() returns counters (download/upload/peers).'
}
}