Skip to content
Snippets Groups Projects
Commit e324c04b authored by Cédric Moreau's avatar Cédric Moreau
Browse files

[enh] sync: add peers watching

parent 4bccd7d6
No related branches found
No related tags found
No related merge requests found
......@@ -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');
......
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]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment