diff --git a/package-lock.json b/package-lock.json index 76a13b2..f304887 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.12", "license": "MIT", "dependencies": { + "@pushrocks/smartdelay": "^2.0.13", "@pushrocks/smartnetwork": "^2.0.14", "@pushrocks/smartrequest": "^1.1.56" }, @@ -2459,10 +2460,8 @@ }, "node_modules/@pushrocks/smartdelay": { "version": "2.0.13", - "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartdelay/-/smartdelay-2.0.13.tgz", + "resolved": "https://registry.npmjs.org/@pushrocks/smartdelay/-/smartdelay-2.0.13.tgz", "integrity": "sha512-s6Wh0BHWMfZ5VYONQwpxOYX1JeC9RKA0O9TxEzfZ6FCw2oNQb2QUPCixT9rsceKwva4+atKRw/RfU+Z7aJDmsA==", - "dev": true, - "license": "MIT", "dependencies": { "@pushrocks/smartpromise": "^3.0.6" } @@ -17522,9 +17521,8 @@ }, "@pushrocks/smartdelay": { "version": "2.0.13", - "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartdelay/-/smartdelay-2.0.13.tgz", + "resolved": "https://registry.npmjs.org/@pushrocks/smartdelay/-/smartdelay-2.0.13.tgz", "integrity": "sha512-s6Wh0BHWMfZ5VYONQwpxOYX1JeC9RKA0O9TxEzfZ6FCw2oNQb2QUPCixT9rsceKwva4+atKRw/RfU+Z7aJDmsA==", - "dev": true, "requires": { "@pushrocks/smartpromise": "^3.0.6" } diff --git a/package.json b/package.json index 052722b..4cf8ff8 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "readme.md" ], "dependencies": { + "@pushrocks/smartdelay": "^2.0.13", "@pushrocks/smartnetwork": "^2.0.14", "@pushrocks/smartrequest": "^1.1.56" } diff --git a/ts/bobcat.classes.bobcat.ts b/ts/bobcat.classes.bobcat.ts index 7328064..6320383 100644 --- a/ts/bobcat.classes.bobcat.ts +++ b/ts/bobcat.classes.bobcat.ts @@ -23,6 +23,7 @@ export class Bobcat { public latestMinerDetails: interfaces.IMinerDetailsResponse constructor(networkAddressArg: string) { + console.log(`adding bobcat at ${networkAddressArg}`); this.networkAddress = networkAddressArg; } @@ -30,7 +31,9 @@ export class Bobcat { * checks the status of the miner */ public async checkMinerStatus() { - const response = await plugins.smartrequest.getJson(`http://${this.networkAddress}/status.json`); + const response = await plugins.smartrequest.getJson(`http://${this.networkAddress}/status.json`, { + timeout: 30000 + }); const body: interfaces.IMinerStatus = response.body; this.latestStatus = body; return this.latestStatus; @@ -40,7 +43,9 @@ export class Bobcat { * gathers the miner details */ public async gatherMinerDetails() { - const response = await plugins.smartrequest.getJson(`http://${this.networkAddress}/miner.json`); + const response = await plugins.smartrequest.getJson(`http://${this.networkAddress}/miner.json`, { + timeout: 30000 + }); const body: interfaces.IMinerDetailsResponse = response.body; this.latestMinerDetails = body; return this.latestMinerDetails; @@ -52,18 +57,35 @@ export class Bobcat { public async runMaintenance() { await this.checkMinerStatus(); await this.gatherMinerDetails(); + if (this.latestStatus.status === 'Synced') { + console.log(`Miner ${this.latestMinerDetails.animal} at ${this.networkAddress} is Synced. ok!`) + return; + } + + if (this.latestStatus.status === 'Syncing') { + console.log(`Miner ${this.latestMinerDetails.animal} at ${this.networkAddress} is Syncing... ok!`) + return; + } + if (this.latestStatus.status !== 'Synced') { console.log(`Miner ${this.latestMinerDetails.animal} is not synced. Restarting now!`); - await this.restart().catch(); + try { + await this.restart() + } catch (err) { + + } } } public async restart() { + console.log(`cooling down before restart`); + await plugins.smartdelay.delayFor(10000); const response = await plugins.smartrequest.request(`http://${this.networkAddress}/admin/reboot`, { method: 'POST', headers: { Authorization: 'Basic ' + Buffer.from('bobcat:miner').toString('base64') - } + }, + timeout: 30000 }); console.log(response.statusCode); } diff --git a/ts/bobcat.classes.bobcatmanager.ts b/ts/bobcat.classes.bobcatmanager.ts index d9e16c5..a01f218 100644 --- a/ts/bobcat.classes.bobcatmanager.ts +++ b/ts/bobcat.classes.bobcatmanager.ts @@ -10,6 +10,7 @@ export class BobcatManager { public async addBobcat(networkAddressArg: string) { const newBobcat = await Bobcat.createFromNetworkAddress(networkAddressArg); this.bobcats.push(newBobcat); + console.log(`added ${newBobcat.latestMinerDetails.animal} at ${newBobcat.networkAddress}`); } /** @@ -17,7 +18,10 @@ export class BobcatManager { */ public async runMaintenance() { console.log(`now running maintenance on ${this.bobcats.length} bobcats!`); + console.log(`cooling down for 10 seconds`); + await plugins.smartdelay.delayFor(10000); for (const bobcat of this.bobcats) { + console.log(`now running maintenance on ${bobcat.latestMinerDetails.animal} at ${bobcat.networkAddress}`); await bobcat.runMaintenance(); } }; diff --git a/ts/bobcat.plugins.ts b/ts/bobcat.plugins.ts index a29a06f..4667b07 100644 --- a/ts/bobcat.plugins.ts +++ b/ts/bobcat.plugins.ts @@ -1,7 +1,9 @@ +import * as smartdelay from '@pushrocks/smartdelay'; import * as smartnetwork from '@pushrocks/smartnetwork'; import * as smartrequest from '@pushrocks/smartrequest'; export { + smartdelay, smartnetwork, smartrequest }