mirror of
https://github.com/pezkuwichain/pezkuwi-telemetry.git
synced 2026-06-12 22:41:01 +00:00
59 lines
1.9 KiB
JavaScript
59 lines
1.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const EventEmitter = require("events");
|
|
const feed_1 = require("./feed");
|
|
const common_1 = require("@dotstats/common");
|
|
class Aggregator extends EventEmitter {
|
|
constructor() {
|
|
super();
|
|
this.nodes = new common_1.IdSet();
|
|
this.feeds = new common_1.IdSet();
|
|
this.height = 0;
|
|
setInterval(() => this.timeoutCheck(), 10000);
|
|
}
|
|
addNode(node) {
|
|
this.nodes.add(node);
|
|
this.broadcast(feed_1.default.addedNode(node));
|
|
node.once('disconnect', () => {
|
|
node.removeAllListeners('block');
|
|
this.nodes.remove(node);
|
|
this.broadcast(feed_1.default.removedNode(node));
|
|
});
|
|
node.on('block', () => this.updateBlock(node));
|
|
}
|
|
addFeed(feed) {
|
|
this.feeds.add(feed);
|
|
feed.send(feed_1.default.bestBlock(this.height));
|
|
for (const node of this.nodes.entries) {
|
|
feed.send(feed_1.default.addedNode(node));
|
|
}
|
|
feed.once('disconnect', () => {
|
|
this.feeds.remove(feed);
|
|
});
|
|
}
|
|
nodeList() {
|
|
return this.nodes.entries;
|
|
}
|
|
broadcast(data) {
|
|
for (const feed of this.feeds.entries) {
|
|
feed.send(data);
|
|
}
|
|
}
|
|
timeoutCheck() {
|
|
const now = Date.now();
|
|
for (const node of this.nodes.entries) {
|
|
node.timeoutCheck(now);
|
|
}
|
|
}
|
|
updateBlock(node) {
|
|
if (node.height > this.height) {
|
|
this.height = node.height;
|
|
this.broadcast(feed_1.default.bestBlock(this.height));
|
|
console.log(`New block ${this.height}`);
|
|
}
|
|
this.broadcast(feed_1.default.imported(node));
|
|
console.log(`${node.name} imported ${node.height}, block time: ${node.blockTime / 1000}s, average: ${node.average / 1000}s | latency ${node.latency}`);
|
|
}
|
|
}
|
|
exports.default = Aggregator;
|
|
//# sourceMappingURL=aggregator.js.map
|