No new range while the database's NVMe part or the hdd tablespace is over BACKFILL_MAX_NVME_GB / BACKFILL_MAX_HDD_GB; nodes ask again a minute later. seed:status says when leasing is paused. The NVMe part was at 47 GB of 50 with a plan for all of a.b.ath queued. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 lines
1.3 KiB
TypeScript
27 lines
1.3 KiB
TypeScript
import { BaseCommand } from '@adonisjs/core/ace'
|
|
import { CommandOptions } from '@adonisjs/core/types/ace'
|
|
import SeedOrchestrator from '#services/SeedOrchestrator'
|
|
|
|
/** Seeding progress per range status and per node (CONCEPT.md D38). */
|
|
export default class SeedStatus extends BaseCommand {
|
|
public static commandName = 'seed:status'
|
|
public static description = 'Shows seeding progress per range status and per node.'
|
|
|
|
public static options: CommandOptions = {
|
|
startApp: true,
|
|
}
|
|
|
|
public async run() {
|
|
const status = await SeedOrchestrator.status()
|
|
const n = (x: unknown) => Number(x ?? 0).toLocaleString('en')
|
|
for (const r of status.ranges) {
|
|
this.logger.info(`${r.status}: ${n(r.ranges)} ranges, ${n(r.reached)} of ${n(r.articles)} articles reached, ${n(r.headers)} headers, ${n(r.files)} files`)
|
|
}
|
|
for (const node of status.nodes) {
|
|
this.logger.info(`node ${node.name}${node.disabled ? ' (disabled)' : ''}: ${node.leases} leases, ${n(node.headers)} headers, last seen ${node.last_seen_at ?? 'never'}`)
|
|
}
|
|
this.logger.info(`Headers in ranges finished in the last hour: ${n(status.headersDoneLastHour)}`)
|
|
if (status.paused) this.logger.warning(`No new leases: ${status.paused} (BACKFILL_MAX_NVME_GB / BACKFILL_MAX_HDD_GB).`)
|
|
}
|
|
}
|