diff --git a/launcher/package.json b/launcher/package.json index 3aa8670be..d7a9900e8 100755 --- a/launcher/package.json +++ b/launcher/package.json @@ -26,7 +26,7 @@ "stereum": "concurrently \"npm:electron:serve\" \"npm:watch:css\"", "backend:watch": "nodemon --watch 'src/backend' --exec 'npm run electron:serve'", "format": "prettier . --write", - "format:check": "prettier . --check" + "format:check": "prettier . --check" }, "dependencies": { "@headlessui/vue": "^1.7.23", diff --git a/launcher/src/backend/NodeConnection.js b/launcher/src/backend/NodeConnection.js index 6fc30380e..904aa6912 100755 --- a/launcher/src/backend/NodeConnection.js +++ b/launcher/src/backend/NodeConnection.js @@ -2111,10 +2111,10 @@ export class NodeConnection { this.taskManager.otherTasksHandler(ref, "trigger restart", true); await this.sshService.disconnect(); await new Promise((resolve) => setTimeout(resolve, 10000)); // Wait for the disconnect to be fully done - const retry = { connected: false, counter: 0, maxTries: 300 }; + const retry = { connected: false, counter: 0, maxTries: 60 }; log.info("Connecting via SSH"); - while (!retry.connected && retry.counter < retry.maxTries) { + while (!retry.connected && retry.counter <= retry.maxTries) { try { retry.counter++; log.info(`Trying to connect (${retry.counter})`); @@ -2131,10 +2131,11 @@ export class NodeConnection { true, err + "\n\n" + (retry.maxTries - retry.counter) + " tries left." ); - log.info(" Could not connect.\n" + (retry.maxTries - retry.counter) + " tries left."); + log.info("Could not connect. " + (retry.maxTries - retry.counter) + " tries left."); + await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait 5 seconds before retrying } } - log.info("OUT OF WHILE LOOP"); + if (retry.connected) { await this.establish(this.taskManager); this.taskManager.otherTasksHandler(ref, "Connected", true); diff --git a/launcher/src/backend/ethereum-services/BesuService.js b/launcher/src/backend/ethereum-services/BesuService.js index c77412200..6431565cc 100755 --- a/launcher/src/backend/ethereum-services/BesuService.js +++ b/launcher/src/backend/ethereum-services/BesuService.js @@ -80,10 +80,6 @@ export class BesuService extends NodeService { return "stereum-" + this.id + ":9545"; } - buildPrometheusJob() { - return `\n - job_name: stereum-${this.id}\n static_configs:\n - targets: [${this.buildExecutionClientMetricsEndpoint()}]`; - } - getDataDir() { return this.volumes.find((volume) => volume.servicePath === "/opt/app/data")?.destinationPath; } diff --git a/launcher/src/backend/ethereum-services/ErigonService.js b/launcher/src/backend/ethereum-services/ErigonService.js index c62768a60..5a4ba627c 100755 --- a/launcher/src/backend/ethereum-services/ErigonService.js +++ b/launcher/src/backend/ethereum-services/ErigonService.js @@ -87,12 +87,6 @@ export class ErigonService extends NodeService { return "stereum-" + this.id + ":6060"; } - buildPrometheusJob() { - return `\n - job_name: stereum-${ - this.id - }\n metrics_path: /debug/metrics/prometheus\n static_configs:\n - targets: [${this.buildExecutionClientMetricsEndpoint()}]`; - } - getDataDir() { return this.volumes.find((volume) => volume.servicePath === "/opt/data/erigon")?.destinationPath; } diff --git a/launcher/src/backend/ethereum-services/GethService.js b/launcher/src/backend/ethereum-services/GethService.js index d826891a0..f18a3844c 100755 --- a/launcher/src/backend/ethereum-services/GethService.js +++ b/launcher/src/backend/ethereum-services/GethService.js @@ -97,12 +97,6 @@ export class GethService extends NodeService { return "stereum-" + this.id + ":6060"; } - buildPrometheusJob() { - return `\n - job_name: stereum-${ - this.id - }\n metrics_path: /debug/metrics/prometheus\n static_configs:\n - targets: [${this.buildExecutionClientMetricsEndpoint()}]`; - } - getDataDir() { return this.volumes.find((volume) => volume.servicePath === "/opt/data/geth")?.destinationPath; } diff --git a/launcher/src/backend/ethereum-services/GrandineBeaconService.js b/launcher/src/backend/ethereum-services/GrandineBeaconService.js index ada5e50fa..a581f885d 100644 --- a/launcher/src/backend/ethereum-services/GrandineBeaconService.js +++ b/launcher/src/backend/ethereum-services/GrandineBeaconService.js @@ -103,10 +103,6 @@ export class GrandineBeaconService extends NodeService { return "stereum-" + this.id + ":5054"; } - buildPrometheusJob() { - return `\n - job_name: stereum-${this.id}\n static_configs:\n - targets: [${this.buildConsensusClientMetricsEndpoint()}]`; - } - getDataDir() { return this.volumes.find((volume) => volume.servicePath === "/opt/app/data")?.destinationPath; } diff --git a/launcher/src/backend/ethereum-services/LighthouseBeaconService.js b/launcher/src/backend/ethereum-services/LighthouseBeaconService.js index 60bca7f8f..9e6c7b621 100755 --- a/launcher/src/backend/ethereum-services/LighthouseBeaconService.js +++ b/launcher/src/backend/ethereum-services/LighthouseBeaconService.js @@ -107,10 +107,6 @@ export class LighthouseBeaconService extends NodeService { return "stereum-" + this.id + ":5054"; } - buildPrometheusJob() { - return `\n - job_name: stereum-${this.id}\n static_configs:\n - targets: [${this.buildConsensusClientMetricsEndpoint()}]`; - } - getDataDir() { return this.volumes.find((volume) => volume.servicePath === "/opt/app/beacon")?.destinationPath; } diff --git a/launcher/src/backend/ethereum-services/LodestarBeaconService.js b/launcher/src/backend/ethereum-services/LodestarBeaconService.js index 461fd9699..d5cdf2fdc 100755 --- a/launcher/src/backend/ethereum-services/LodestarBeaconService.js +++ b/launcher/src/backend/ethereum-services/LodestarBeaconService.js @@ -99,12 +99,6 @@ export class LodestarBeaconService extends NodeService { return "stereum-" + this.id + ":8008"; } - buildPrometheusJob() { - return `\n - job_name: stereum-${ - this.id - }\n metrics_path: /metrics\n static_configs:\n - targets: [${this.buildConsensusClientMetricsEndpoint()}]`; - } - getDataDir() { return this.volumes.find((volume) => volume.servicePath === "/opt/app/beacon")?.destinationPath; } diff --git a/launcher/src/backend/ethereum-services/NethermindService.js b/launcher/src/backend/ethereum-services/NethermindService.js index 81ebdebe6..56808ac8d 100755 --- a/launcher/src/backend/ethereum-services/NethermindService.js +++ b/launcher/src/backend/ethereum-services/NethermindService.js @@ -80,10 +80,6 @@ export class NethermindService extends NodeService { return "stereum-" + this.id + ":6060"; } - buildPrometheusJob() { - return `\n - job_name: stereum-${this.id}\n static_configs:\n - targets: [${this.buildExecutionClientMetricsEndpoint()}]`; - } - getDataDir() { return this.volumes.find((volume) => volume.servicePath === "/opt/app/data")?.destinationPath; } diff --git a/launcher/src/backend/ethereum-services/NimbusBeaconService.js b/launcher/src/backend/ethereum-services/NimbusBeaconService.js index d9bdd0303..7c8506fe0 100755 --- a/launcher/src/backend/ethereum-services/NimbusBeaconService.js +++ b/launcher/src/backend/ethereum-services/NimbusBeaconService.js @@ -94,10 +94,6 @@ export class NimbusBeaconService extends NodeService { return "stereum-" + this.id + ":8008"; } - buildPrometheusJob() { - return `\n - job_name: "nimbus"\n metrics_path: /metrics\n static_configs:\n - targets: [${this.buildConsensusClientMetricsEndpoint()}]`; - } - getDataDir() { return this.volumes.find((volume) => volume.servicePath === "/opt/app/beacon")?.destinationPath; } diff --git a/launcher/src/backend/ethereum-services/OpErigonService.js b/launcher/src/backend/ethereum-services/OpErigonService.js index 222350be9..623af0495 100644 --- a/launcher/src/backend/ethereum-services/OpErigonService.js +++ b/launcher/src/backend/ethereum-services/OpErigonService.js @@ -101,12 +101,6 @@ export class OpErigonService extends NodeService { buildExecutionClientMetricsEndpoint() { return "stereum-" + this.id + ":6060"; } - - buildPrometheusJob() { - return `\n - job_name: stereum-${ - this.id - }\n metrics_path: /debug/metrics/prometheus\n static_configs:\n - targets: [${this.buildExecutionClientMetricsEndpoint()}]`; - } } // EOF diff --git a/launcher/src/backend/ethereum-services/OpGethService.js b/launcher/src/backend/ethereum-services/OpGethService.js index 5f7de4805..cf92c9bb7 100644 --- a/launcher/src/backend/ethereum-services/OpGethService.js +++ b/launcher/src/backend/ethereum-services/OpGethService.js @@ -106,12 +106,6 @@ export class OpGethService extends NodeService { buildExecutionClientMetricsEndpoint() { return "stereum-" + this.id + ":6060"; } - - buildPrometheusJob() { - return `\n - job_name: stereum-${ - this.id - }\n metrics_path: /debug/metrics/prometheus\n static_configs:\n - targets: [${this.buildExecutionClientMetricsEndpoint()}]`; - } } // EOF diff --git a/launcher/src/backend/ethereum-services/OpNodeBeaconService.js b/launcher/src/backend/ethereum-services/OpNodeBeaconService.js index 86b84822c..a0791ee99 100644 --- a/launcher/src/backend/ethereum-services/OpNodeBeaconService.js +++ b/launcher/src/backend/ethereum-services/OpNodeBeaconService.js @@ -117,10 +117,6 @@ export class OpNodeBeaconService extends NodeService { return "stereum-" + this.id + ":7300"; } - buildPrometheusJob() { - return `\n - job_name: stereum-${this.id}\n static_configs:\n - targets: [${this.buildConsensusClientMetricsEndpoint()}]`; - } - getAvailablePorts() { return [ new ServicePortDefinition(9003, "tcp", "P2P connections"), diff --git a/launcher/src/backend/ethereum-services/OpRethService.js b/launcher/src/backend/ethereum-services/OpRethService.js index 185d7619c..67e7eb8b4 100644 --- a/launcher/src/backend/ethereum-services/OpRethService.js +++ b/launcher/src/backend/ethereum-services/OpRethService.js @@ -88,12 +88,6 @@ export class OpRethService extends NodeService { buildExecutionClientMetricsEndpoint() { return "stereum-" + this.id + ":6060"; } - - buildPrometheusJob() { - return `\n - job_name: stereum-${ - this.id - }\n metrics_path: /debug/metrics/prometheus\n static_configs:\n - targets: [${this.buildExecutionClientMetricsEndpoint()}]`; - } } // EOF diff --git a/launcher/src/backend/ethereum-services/PrometheusNodeExporterService.js b/launcher/src/backend/ethereum-services/PrometheusNodeExporterService.js index c87a8b167..457d5f188 100755 --- a/launcher/src/backend/ethereum-services/PrometheusNodeExporterService.js +++ b/launcher/src/backend/ethereum-services/PrometheusNodeExporterService.js @@ -40,10 +40,4 @@ export class PrometheusNodeExporterService extends NodeService { buildPrometheusNodeExporterClientMetricsEndpoint() { return "stereum-" + this.id + ":9100"; } - - buildPrometheusJob() { - return `\n - job_name: stereum-${ - this.id - }\n static_configs:\n - targets: [${this.buildPrometheusNodeExporterClientMetricsEndpoint()}]`; - } } diff --git a/launcher/src/backend/ethereum-services/PrysmBeaconService.js b/launcher/src/backend/ethereum-services/PrysmBeaconService.js index e89cd77b4..c0cecfe6c 100755 --- a/launcher/src/backend/ethereum-services/PrysmBeaconService.js +++ b/launcher/src/backend/ethereum-services/PrysmBeaconService.js @@ -153,10 +153,6 @@ export class PrysmBeaconService extends NodeService { return "stereum-" + this.id + ":8080"; } - buildPrometheusJob() { - return `\n - job_name: stereum-${this.id}\n static_configs:\n - targets: [${this.buildConsensusClientMetricsEndpoint()}]`; - } - getDataDir() { return this.volumes.find((volume) => volume.servicePath === "/opt/app/beacon")?.destinationPath; } diff --git a/launcher/src/backend/ethereum-services/RethService.js b/launcher/src/backend/ethereum-services/RethService.js index b361c741d..6cd088a56 100644 --- a/launcher/src/backend/ethereum-services/RethService.js +++ b/launcher/src/backend/ethereum-services/RethService.js @@ -77,10 +77,6 @@ export class RethService extends NodeService { return "stereum-" + this.id + ":6060"; } - buildPrometheusJob() { - return `\n - job_name: stereum-${this.id}\n static_configs:\n - targets: [${this.buildExecutionClientMetricsEndpoint()}]`; - } - getDataDir() { return this.volumes.find((volume) => volume.servicePath === "/opt/data/reth")?.destinationPath; } diff --git a/launcher/src/backend/ethereum-services/SSVNetworkService.js b/launcher/src/backend/ethereum-services/SSVNetworkService.js index ed88f5a20..8fe2bfc6a 100755 --- a/launcher/src/backend/ethereum-services/SSVNetworkService.js +++ b/launcher/src/backend/ethereum-services/SSVNetworkService.js @@ -95,10 +95,6 @@ SSVAPIPort: 16000`; return "stereum-" + this.id + ":16000"; } - buildPrometheusJob() { - return `\n - job_name: ssv\n metrics_path: /metrics\n static_configs:\n - targets: [${this.buildValidatorClientMetricsEndpoint()}]\n - job_name: ssv_health\n metrics_path: /health\n static_configs:\n - targets: [${this.buildValidatorClientMetricsEndpoint()}]`; - } - getAvailablePorts() { return [ new ServicePortDefinition(13000, "tcp", "P2P connections"), diff --git a/launcher/src/backend/ethereum-services/TekuBeaconService.js b/launcher/src/backend/ethereum-services/TekuBeaconService.js index 1e98a735b..0d6877adc 100755 --- a/launcher/src/backend/ethereum-services/TekuBeaconService.js +++ b/launcher/src/backend/ethereum-services/TekuBeaconService.js @@ -105,12 +105,6 @@ export class TekuBeaconService extends NodeService { return "stereum-" + this.id + ":8008"; } - buildPrometheusJob() { - return `\n - job_name: stereum-${ - this.id - }\n scrape_timeout: 10s\n metrics_path: /metrics\n scheme: http\n static_configs:\n - targets: [${this.buildConsensusClientMetricsEndpoint()}]`; - } - getDataDir() { return this.volumes.find((volume) => volume.servicePath === "/opt/app/data")?.destinationPath; } diff --git a/launcher/src/backend/tests/integration/GrandineBeaconService.int.js b/launcher/src/backend/tests/integration/GrandineBeaconService.int.js index 27c81a2fa..a704f4897 100755 --- a/launcher/src/backend/tests/integration/GrandineBeaconService.int.js +++ b/launcher/src/backend/tests/integration/GrandineBeaconService.int.js @@ -69,7 +69,8 @@ test("grandine consensus client", async () => { geth.imageVersion = versions[geth.network][geth.service].slice(-1).pop(); grandineBC.imageVersion = versions[grandineBC.network][grandineBC.service].slice(-1).pop(); - await nodeConnection.writeServiceConfiguration(geth.buildConfiguration()), await serviceManager.manageServiceState(geth.id, "started"); + await serviceManager.manageServiceState(geth.id, "started"); + await nodeConnection.writeServiceConfiguration(geth.buildConfiguration()); //write configs for grandine BC await nodeConnection.writeServiceConfiguration(grandineBC.buildConfiguration()); diff --git a/launcher/src/backend/tests/integration/LighthouseBeaconService.int.js b/launcher/src/backend/tests/integration/LighthouseBeaconService.int.js index 016f2bf61..3a633c802 100755 --- a/launcher/src/backend/tests/integration/LighthouseBeaconService.int.js +++ b/launcher/src/backend/tests/integration/LighthouseBeaconService.int.js @@ -76,7 +76,8 @@ test("lighthouse validator import", async () => { lhBC.imageVersion = versions[lhBC.network][lhBC.service].slice(-1).pop(); lhVC.imageVersion = versions[lhVC.network][lhVC.service].slice(-1).pop(); - await nodeConnection.writeServiceConfiguration(geth.buildConfiguration()), await serviceManager.manageServiceState(geth.id, "started"); + await serviceManager.manageServiceState(geth.id, "started"); + await nodeConnection.writeServiceConfiguration(geth.buildConfiguration()); //write configs for lighhouse BC and VC await nodeConnection.writeServiceConfiguration(lhBC.buildConfiguration()); diff --git a/launcher/src/backend/tests/integration/LodestarBeaconService.int.js b/launcher/src/backend/tests/integration/LodestarBeaconService.int.js index 9d9f41749..9d2709741 100755 --- a/launcher/src/backend/tests/integration/LodestarBeaconService.int.js +++ b/launcher/src/backend/tests/integration/LodestarBeaconService.int.js @@ -77,7 +77,8 @@ test("lodestar validator import", async () => { lBC.imageVersion = versions[lBC.network][lBC.service].slice(-1).pop(); lVC.imageVersion = versions[lVC.network][lVC.service].slice(-1).pop(); - await nodeConnection.writeServiceConfiguration(geth.buildConfiguration()), await serviceManager.manageServiceState(geth.id, "started"); + await serviceManager.manageServiceState(geth.id, "started"); + await nodeConnection.writeServiceConfiguration(geth.buildConfiguration()); //write configs for lodestar BC and VC await nodeConnection.writeServiceConfiguration(lBC.buildConfiguration()); diff --git a/launcher/src/backend/tests/unit/BesuService.test.js b/launcher/src/backend/tests/unit/BesuService.test.js index e1606b47d..80a949c7f 100755 --- a/launcher/src/backend/tests/unit/BesuService.test.js +++ b/launcher/src/backend/tests/unit/BesuService.test.js @@ -36,11 +36,6 @@ test("buildExecutionClientMetricsEndpoint", () => { expect(besuMetricsEndpoint).toMatch(/stereum-.{36}:9545/); }); -test("buildPrometheusJob", () => { - const besuPrometheusJob = BesuService.buildByUserInput("goerli", [], "/opt/stereum/besu").buildPrometheusJob(); - expect(besuPrometheusJob).toMatch(/\n {2}- job_name: stereum-.{36}\n {4}static_configs:\n {6}- targets: \[stereum-.{36}:9545]/); -}); - test("buildByConfiguration", () => { const besu = BesuService.buildByConfiguration({ id: "297", diff --git a/launcher/src/backend/tests/unit/NethermindService.test.js b/launcher/src/backend/tests/unit/NethermindService.test.js index 723a1ad5b..75c9f3275 100755 --- a/launcher/src/backend/tests/unit/NethermindService.test.js +++ b/launcher/src/backend/tests/unit/NethermindService.test.js @@ -47,11 +47,6 @@ test("buildExecutionClientMetricsEndpoint", () => { expect(nethermindMetricsEndpoint).toMatch(/stereum-.{36}:6060/); }); -test("buildPrometheusJob", () => { - const nethermindPrometheusJob = NethermindService.buildByUserInput("goerli", [], "/opt/stereum/nethermind").buildPrometheusJob(); - expect(nethermindPrometheusJob).toMatch(/\n {2}- job_name: stereum-.{36}\n {4}static_configs:\n {6}- targets: \[stereum-.{36}:6060]/); -}); - test("buildByConfiguration", () => { const nethermind = NethermindService.buildByConfiguration({ id: "297",