diff --git a/app/modules/crawler/lib/sync.ts b/app/modules/crawler/lib/sync.ts index 02dc0cf56e1f6bc115ba64842f3398e37f392e28..949b5e1f6086e9262ed760786b1eba0c368dcb40 100644 --- a/app/modules/crawler/lib/sync.ts +++ b/app/modules/crawler/lib/sync.ts @@ -60,6 +60,7 @@ export class Synchroniser extends stream.Duplex { this.watcher.onEvent('storageChange', (pct: number) => this.push({ saved: pct })) this.watcher.onEvent('appliedChange', (pct: number) => this.push({ applied: pct })) this.watcher.onEvent('sbxChange', (pct: number) => this.push({ sandbox: pct })) + this.watcher.onEvent('peersChange', (pct: number) => this.push({ peersSync: pct })) if (interactive) { this.logger.mute(); @@ -366,8 +367,9 @@ export class Synchroniser extends stream.Duplex { leavesToAdd.push(leaf); } }); - for (const leaf of leavesToAdd) { + for (let i = 0; i < leavesToAdd.length; i++) { try { + const leaf = leavesToAdd[i] const json3 = await getPeers({ "leaf": leaf }); const jsonEntry = json3.leaf.value; const sign = json3.leaf.value.signature; @@ -379,11 +381,13 @@ export class Synchroniser extends stream.Duplex { entry.block = jsonEntry.block entry.signature = sign; this.watcher.writeStatus('Peer ' + entry.pubkey); + this.watcher.peersPercent((i + 1) / leavesToAdd.length * 100) await this.PeeringService.submitP(entry, false, to === undefined); } catch (e) { this.logger.warn(e && e.message || e) } } + this.watcher.peersPercent(100) } else { this.watcher.writeStatus('Peers already known'); diff --git a/app/modules/crawler/lib/sync/Watcher.ts b/app/modules/crawler/lib/sync/Watcher.ts index ae11418a78a6fa7455f7747e73a4ea33daba3e18..0b328c6400e307e9499c1de629fc27b1cebaefcf 100644 --- a/app/modules/crawler/lib/sync/Watcher.ts +++ b/app/modules/crawler/lib/sync/Watcher.ts @@ -1,4 +1,5 @@ import * as events from "events" +import {cliprogram} from "../../../../lib/common-libs/programOptions" const multimeter = require('multimeter') @@ -8,10 +9,11 @@ export interface Watcher { storagePercent(pct?: number): number appliedPercent(pct?: number): number sbxPercent(pct?: number): number + peersPercent(pct?: number): number end(): void } -export type EventName = 'downloadChange'|'storageChange'|'appliedChange'|'sbxChange' +export type EventName = 'downloadChange'|'storageChange'|'appliedChange'|'sbxChange'|'peersChange' export class EventWatcher extends events.EventEmitter implements Watcher { @@ -39,6 +41,10 @@ export class EventWatcher extends events.EventEmitter implements Watcher { return this.change('sbxChange', (pct) => this.innerWatcher.sbxPercent(pct), pct) } + peersPercent(pct?: number): number { + return this.change('peersChange', (pct) => this.innerWatcher.peersPercent(pct), pct) + } + change(changeName: EventName, method: (pct?: number) => number, pct?: number) { if (pct !== undefined && method() < pct) { this.emit(changeName, pct || 0) @@ -65,6 +71,7 @@ export class MultimeterWatcher implements Watcher { private savedBar:any private downloadBar:any private sbxBar:any + private peersBar:any private writtens:string[] = [] constructor() { @@ -80,6 +87,10 @@ export class MultimeterWatcher implements Watcher { this.appliedBar = this.createBar('Apply', 5) this.sbxBar = this.createBar('Sandbox', 6) + if (!cliprogram.nopeers) { + this.peersBar = this.createBar('Peers', 7) + } + this.multi.write('\nStatus: '); this.charm.position( (x:number, y:number) => { @@ -93,6 +104,9 @@ export class MultimeterWatcher implements Watcher { this.savedBar.percent(0); this.appliedBar.percent(0); this.sbxBar.percent(0); + if (!cliprogram.nopeers) { + this.peersBar.percent(0); + } } writeStatus(str:string) { @@ -120,6 +134,13 @@ export class MultimeterWatcher implements Watcher { return this.sbxBar.percent(pct) } + peersPercent(pct:number) { + if (!cliprogram.nopeers) { + return this.peersBar.percent(pct) + } + return 0 + } + end() { this.multi.write('\nAll done.\n'); this.multi.destroy(); @@ -177,6 +198,10 @@ export class LoggerWatcher implements Watcher { return 0 } + peersPercent(pct:number) { + return 0 + } + change(prop: 'downPct'|'savedPct'|'appliedPct', pct:number) { if (pct !== undefined) { let changed = pct > this[prop]