From e7f806219c12243fef25550f3f06220811bfca7f Mon Sep 17 00:00:00 2001 From: dynco-nym <173912580+dynco-nym@users.noreply.github.com> Date: Tue, 26 Nov 2024 15:59:42 +0100 Subject: [PATCH] Move NS client to separate package under NS API (#5171) * Move client code to NS API * Move client to separate package * Move things around * Adjust run scripts * rustfmt * Add client to workspace --- Cargo.lock | 36 +++++----- Cargo.toml | 11 ++-- common/models/Cargo.toml | 17 ----- common/models/src/lib.rs | 1 - nym-node-status-agent/.gitignore | 2 - nym-node-status-api/.gitignore | 3 +- .../nym-node-status-agent/.gitignore | 0 .../nym-node-status-agent}/Cargo.toml | 13 +--- .../nym-node-status-agent}/Dockerfile | 0 .../nym-node-status-agent}/gen_keypair.sh | 0 .../nym-node-status-agent}/run.sh | 10 +-- .../src/cli/generate_keypair.rs | 0 .../nym-node-status-agent}/src/cli/mod.rs | 0 .../src/cli/run_probe.rs | 32 +++++++++ .../nym-node-status-agent}/src/main.rs | 0 .../nym-node-status-agent}/src/probe.rs | 0 ...55c69cd5c1a7e7d87073c94600c783a0a3984.json | 0 ...7dc549cf503409fd6dfedcdc02dbcd61d5454.json | 0 ...f2c63cdf90f2f3b6d81afb9000bb0968dcaea.json | 0 ...5ceb89b9925cba46efcf4ed79ef0759a01129.json | 0 ...965acf3bcfb3f84ba8d24ed645d79976cf784.json | 0 ...e692afc04b51e8782bcbf59f1eb4116112536.json | 0 ...8632c29c81bfafb043bb8744129cf9e0266ad.json | 0 ...203c8569f03fdd39ce09d7b74177896e52a8c.json | 0 ...289dd776749dd7a20cda61b0480f2fba60889.json | 0 ...570ee787fc7daf00fcb916f18d1cb7d6c8f08.json | 0 ...17b40dc01845f554b5479f37855d89b309e6f.json | 0 ...a667e8cacdf677ccb906415b3fe92be0c436b.json | 0 ...56f816956b0824c66a25da611dce688105d36.json | 0 ...df795147ac3724e89df5b2f24f7215d87dce1.json | 0 ...f3de5949a5ff2083453cb879af8a1689efe2f.json | 0 ...29d1320a5eb10797cdb5a435455d22c6aeac1.json | 0 ...03a2752e28df775d1af8fd943a5fc8d7dc00d.json | 0 ...6c5e41f3c0bb56a27648b5e25466b8634a578.json | 0 ...d17ca6eb090df7f6d52ef89c5d51564f8b45c.json | 0 ...86b86d1b9be62336c9eac0eef44987a5451b5.json | 0 ...90f6c66c14d4267a2cc2ca73354becc2c8bb8.json | 0 ...c586c4c29c03efb4cf0c40b73a5c76159cf5c.json | 0 ...ea1f6dc2aed00cedde25f2be3567e47064351.json | 0 ...dadfcf19095935867a51cbd5b8362d1505fcc.json | 0 ...ee2aa37f6163525bbdce1a4cebef4a285f8d9.json | 0 ...74a5bf4912ee73468e62e7d0d96b1d9074cbe.json | 0 ...3d31cb4bcc4071d31d8d2f7755e2d2c2e3e35.json | 0 ...b925e033ceec4f8112258feb4ac9e96fc5924.json | 0 ...b5d2f2d08b2e53203aab9f07ea9b52acbd407.json | 0 .../{ => nym-node-status-api}/Cargo.toml | 17 +++-- .../{ => nym-node-status-api}/Dockerfile | 0 .../{ => nym-node-status-api}/Dockerfile.dev | 0 .../{ => nym-node-status-api}/build.rs | 0 .../launch_node_status_api.sh | 22 +++---- .../migrations/000_init.sql | 0 .../migrations/001_last_assigned_utc.sql | 0 .../{ => nym-node-status-api}/src/cli/mod.rs | 0 .../{ => nym-node-status-api}/src/db/mod.rs | 0 .../src/db/models.rs | 0 .../src/db/queries/gateways.rs | 0 .../src/db/queries/misc.rs | 0 .../src/db/queries/mixnodes.rs | 0 .../src/db/queries/mod.rs | 0 .../src/db/queries/summary.rs | 0 .../src/db/queries/testruns.rs | 0 .../src/http/api/gateways.rs | 0 .../src/http/api/mixnodes.rs | 0 .../src/http/api/mod.rs | 0 .../src/http/api/services/json_path.rs | 0 .../src/http/api/services/mod.rs | 0 .../src/http/api/summary.rs | 0 .../src/http/api/testruns.rs | 20 +++--- .../src/http/api_docs.rs | 2 +- .../src/http/error.rs | 0 .../{ => nym-node-status-api}/src/http/mod.rs | 0 .../src/http/models.rs | 2 +- .../src/http/server.rs | 0 .../src/http/state.rs | 0 .../{ => nym-node-status-api}/src/logging.rs | 0 .../{ => nym-node-status-api}/src/main.rs | 0 .../src/monitor/mod.rs | 0 .../src/testruns/mod.rs | 0 .../src/testruns/models.rs | 0 .../src/testruns/queue.rs | 0 .../nym-node-status-client/Cargo.toml | 25 +++++++ .../nym-node-status-client/src/api.rs | 18 +++++ .../nym-node-status-client/src/auth.rs | 30 +++++++++ .../nym-node-status-client/src/lib.rs | 65 +++++-------------- .../nym-node-status-client/src/models.rs | 35 ++-------- 85 files changed, 187 insertions(+), 174 deletions(-) delete mode 100644 common/models/Cargo.toml delete mode 100644 common/models/src/lib.rs delete mode 100644 nym-node-status-agent/.gitignore create mode 100644 nym-node-status-api/nym-node-status-agent/.gitignore rename {nym-node-status-agent => nym-node-status-api/nym-node-status-agent}/Cargo.toml (64%) rename {nym-node-status-agent => nym-node-status-api/nym-node-status-agent}/Dockerfile (100%) rename {nym-node-status-agent => nym-node-status-api/nym-node-status-agent}/gen_keypair.sh (100%) rename {nym-node-status-agent => nym-node-status-api/nym-node-status-agent}/run.sh (88%) rename {nym-node-status-agent => nym-node-status-api/nym-node-status-agent}/src/cli/generate_keypair.rs (100%) rename {nym-node-status-agent => nym-node-status-api/nym-node-status-agent}/src/cli/mod.rs (100%) create mode 100644 nym-node-status-api/nym-node-status-agent/src/cli/run_probe.rs rename {nym-node-status-agent => nym-node-status-api/nym-node-status-agent}/src/main.rs (100%) rename {nym-node-status-agent => nym-node-status-api/nym-node-status-agent}/src/probe.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-06b17d1e5f61201a1b7542896ba55c69cd5c1a7e7d87073c94600c783a0a3984.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-1327b5118f9144dddbcf8edb11f7dc549cf503409fd6dfedcdc02dbcd61d5454.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-18abc8fde56cf86baed7b4afa38f2c63cdf90f2f3b6d81afb9000bb0968dcaea.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-2236299f9f691376db54cbd58ec5ceb89b9925cba46efcf4ed79ef0759a01129.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-3c584e211d07c511644c8079187965acf3bcfb3f84ba8d24ed645d79976cf784.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-3d3a1fa429e3090741c6b6a8e82e692afc04b51e8782bcbf59f1eb4116112536.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-3d5fc502f976f5081f01352856b8632c29c81bfafb043bb8744129cf9e0266ad.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-418944f2eccb838cb3882f34469203c8569f03fdd39ce09d7b74177896e52a8c.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-46d76bc6d3fba2dae3b21511a36289dd776749dd7a20cda61b0480f2fba60889.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-4afcc6673890f795c2793f1e2f8570ee787fc7daf00fcb916f18d1cb7d6c8f08.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-4b61a4bc32333c92a8f5ad4ad0017b40dc01845f554b5479f37855d89b309e6f.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-670b7ed7d57a6986181b24be24ca667e8cacdf677ccb906415b3fe92be0c436b.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-6d7967b831b355d5f2c77950abc56f816956b0824c66a25da611dce688105d36.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-6eb1a682cf13205cf701590021cdf795147ac3724e89df5b2f24f7215d87dce1.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-6ef3efde571d46961244cd90420f3de5949a5ff2083453cb879af8a1689efe2f.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-71a455c705f9c25d3843ff2fb8629d1320a5eb10797cdb5a435455d22c6aeac1.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-7600823da7ce80b8ffda933608603a2752e28df775d1af8fd943a5fc8d7dc00d.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-788515c34588aec352773df4b6e6c5e41f3c0bb56a27648b5e25466b8634a578.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-8571faad2f66e08f24acfbfe036d17ca6eb090df7f6d52ef89c5d51564f8b45c.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-86ff64db477a1d6235179b0b88d86b86d1b9be62336c9eac0eef44987a5451b5.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-930a41e612b4e964ae214843da190f6c66c14d4267a2cc2ca73354becc2c8bb8.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-c214c001acbbf79fa499816f36ec586c4c29c03efb4cf0c40b73a5c76159cf5c.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-c5e3cd7284b334df5aa979b1627ea1f6dc2aed00cedde25f2be3567e47064351.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-c7ba2621becb9ac4b5dee0ce303dadfcf19095935867a51cbd5b8362d1505fcc.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-d8ea93e781666e6267902170709ee2aa37f6163525bbdce1a4cebef4a285f8d9.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-e0c76a959276e3b0f44c720af9c74a5bf4912ee73468e62e7d0d96b1d9074cbe.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-f0a4316081d1be9444a87b95d933d31cb4bcc4071d31d8d2f7755e2d2c2e3e35.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-f5048d9926a5f5329f7f3b96d43b925e033ceec4f8112258feb4ac9e96fc5924.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/.sqlx/query-ff9334ba7b670b218b2f9100e9ab5d2f2d08b2e53203aab9f07ea9b52acbd407.json (100%) rename nym-node-status-api/{ => nym-node-status-api}/Cargo.toml (77%) rename nym-node-status-api/{ => nym-node-status-api}/Dockerfile (100%) rename nym-node-status-api/{ => nym-node-status-api}/Dockerfile.dev (100%) rename nym-node-status-api/{ => nym-node-status-api}/build.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/launch_node_status_api.sh (62%) rename nym-node-status-api/{ => nym-node-status-api}/migrations/000_init.sql (100%) rename nym-node-status-api/{ => nym-node-status-api}/migrations/001_last_assigned_utc.sql (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/cli/mod.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/db/mod.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/db/models.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/db/queries/gateways.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/db/queries/misc.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/db/queries/mixnodes.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/db/queries/mod.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/db/queries/summary.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/db/queries/testruns.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/api/gateways.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/api/mixnodes.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/api/mod.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/api/services/json_path.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/api/services/mod.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/api/summary.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/api/testruns.rs (98%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/api_docs.rs (87%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/error.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/mod.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/models.rs (97%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/server.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/http/state.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/logging.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/main.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/monitor/mod.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/testruns/mod.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/testruns/models.rs (100%) rename nym-node-status-api/{ => nym-node-status-api}/src/testruns/queue.rs (100%) create mode 100644 nym-node-status-api/nym-node-status-client/Cargo.toml create mode 100644 nym-node-status-api/nym-node-status-client/src/api.rs create mode 100644 nym-node-status-api/nym-node-status-client/src/auth.rs rename nym-node-status-agent/src/cli/run_probe.rs => nym-node-status-api/nym-node-status-client/src/lib.rs (61%) rename common/models/src/ns_api.rs => nym-node-status-api/nym-node-status-client/src/models.rs (67%) diff --git a/Cargo.lock b/Cargo.lock index ab3aa84ddf..e7c3b1f622 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5009,16 +5009,6 @@ dependencies = [ "nym-multisig-contract-common", ] -[[package]] -name = "nym-common-models" -version = "0.1.0" -dependencies = [ - "anyhow", - "bincode", - "nym-crypto", - "serde", -] - [[package]] name = "nym-compact-ecash" version = "0.1.0" @@ -6058,19 +6048,13 @@ name = "nym-node-status-agent" version = "1.0.0-rc.1" dependencies = [ "anyhow", - "bincode", - "chrono", "clap 4.5.20", "nym-bin-common", - "nym-common-models", "nym-crypto", + "nym-node-status-client", "rand", - "reqwest 0.12.4", - "serde", - "serde_json", "tempfile", "tokio", - "tokio-util", "tracing", "tracing-subscriber", ] @@ -6081,7 +6065,6 @@ version = "1.0.0-rc.2" dependencies = [ "anyhow", "axum 0.7.7", - "bincode", "chrono", "clap 4.5.20", "cosmwasm-std", @@ -6089,11 +6072,11 @@ dependencies = [ "futures-util", "moka", "nym-bin-common", - "nym-common-models", "nym-crypto", "nym-explorer-client", "nym-network-defaults", "nym-node-requests", + "nym-node-status-client", "nym-task", "nym-validator-client", "regex", @@ -6116,6 +6099,21 @@ dependencies = [ "utoipauto", ] +[[package]] +name = "nym-node-status-client" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "chrono", + "nym-crypto", + "nym-http-api-client", + "reqwest 0.12.4", + "serde", + "serde_json", + "tracing", +] + [[package]] name = "nym-node-tester-utils" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 7735cb8f59..ae3f32e389 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,7 +61,6 @@ members = [ "common/ip-packet-requests", "common/ledger", "common/mixnode-common", - "common/models", "common/network-defaults", "common/node-tester-utils", "common/nonexhaustive-delayqueue", @@ -126,8 +125,9 @@ members = [ "nym-node", "nym-node/nym-node-http-api", "nym-node/nym-node-requests", - "nym-node-status-api", - "nym-node-status-agent", + "nym-node-status-api/nym-node-status-agent", + "nym-node-status-api/nym-node-status-api", + "nym-node-status-api/nym-node-status-client", "nym-outfox", "nym-validator-rewarder", "tools/echo-server", @@ -155,7 +155,6 @@ members = [ default-members = [ "clients/native", "clients/socks5", - "common/models", "explorer-api", "gateway", "mixnode", @@ -163,9 +162,9 @@ default-members = [ "nym-credential-proxy/nym-credential-proxy", "nym-data-observatory", "nym-node", - "nym-node-status-api", + "nym-node-status-api/nym-node-status-agent", + "nym-node-status-api/nym-node-status-api", "nym-validator-rewarder", - "nym-node-status-api", "service-providers/authenticator", "service-providers/ip-packet-router", "service-providers/network-requester", diff --git a/common/models/Cargo.toml b/common/models/Cargo.toml deleted file mode 100644 index 3192a83b53..0000000000 --- a/common/models/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "nym-common-models" -version = "0.1.0" -authors.workspace = true -repository.workspace = true -homepage.workspace = true -documentation.workspace = true -edition.workspace = true -license.workspace = true -rust-version.workspace = true -readme.workspace = true - -[dependencies] -anyhow = { workspace = true } -bincode = { workspace = true } -nym-crypto = { path = "../crypto", features = ["asymmetric", "serde"] } -serde = { workspace = true, features = ["derive"] } diff --git a/common/models/src/lib.rs b/common/models/src/lib.rs deleted file mode 100644 index 3d85e66947..0000000000 --- a/common/models/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod ns_api; diff --git a/nym-node-status-agent/.gitignore b/nym-node-status-agent/.gitignore deleted file mode 100644 index 4bb044ec5e..0000000000 --- a/nym-node-status-agent/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -nym-gateway-probe -keys/ diff --git a/nym-node-status-api/.gitignore b/nym-node-status-api/.gitignore index 91459afabe..db7ea3635a 100644 --- a/nym-node-status-api/.gitignore +++ b/nym-node-status-api/.gitignore @@ -1,6 +1,7 @@ +nym-node-status-agent/nym-gateway-probe +nym-node-status-agent/keys/ data/ enter_db.sh nym-gateway-probe -nym-node-status-api *.sqlite *.sqlite-journal diff --git a/nym-node-status-api/nym-node-status-agent/.gitignore b/nym-node-status-api/nym-node-status-agent/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nym-node-status-agent/Cargo.toml b/nym-node-status-api/nym-node-status-agent/Cargo.toml similarity index 64% rename from nym-node-status-agent/Cargo.toml rename to nym-node-status-api/nym-node-status-agent/Cargo.toml index db64eeec99..d9f11f518e 100644 --- a/nym-node-status-agent/Cargo.toml +++ b/nym-node-status-api/nym-node-status-agent/Cargo.toml @@ -1,7 +1,6 @@ # Copyright 2024 - Nym Technologies SA # SPDX-License-Identifier: Apache-2.0 - [package] name = "nym-node-status-agent" version = "1.0.0-rc.1" @@ -16,20 +15,14 @@ readme.workspace = true [dependencies] anyhow = { workspace = true} -bincode = { workspace = true } -chrono = { workspace = true } clap = { workspace = true, features = ["derive", "env"] } -nym-bin-common = { path = "../common/bin-common", features = ["models"]} -nym-common-models = { path = "../common/models" } -nym-crypto = { path = "../common/crypto", features = ["asymmetric", "rand"] } +nym-bin-common = { path = "../../common/bin-common", features = ["models"]} +nym-node-status-client = { path = "../nym-node-status-client" } +nym-crypto = { path = "../../common/crypto", features = ["asymmetric", "rand"] } rand = { workspace = true } tokio = { workspace = true, features = ["macros", "rt-multi-thread", "process"] } -tokio-util = { workspace = true } tracing = { workspace = true } tracing-subscriber = { workspace = true, features = ["env-filter"] } -reqwest = { workspace = true, features = ["json"] } -serde = { workspace = true } -serde_json = { workspace = true } [dev-dependencies] tempfile = { workspace = true } diff --git a/nym-node-status-agent/Dockerfile b/nym-node-status-api/nym-node-status-agent/Dockerfile similarity index 100% rename from nym-node-status-agent/Dockerfile rename to nym-node-status-api/nym-node-status-agent/Dockerfile diff --git a/nym-node-status-agent/gen_keypair.sh b/nym-node-status-api/nym-node-status-agent/gen_keypair.sh similarity index 100% rename from nym-node-status-agent/gen_keypair.sh rename to nym-node-status-api/nym-node-status-agent/gen_keypair.sh diff --git a/nym-node-status-agent/run.sh b/nym-node-status-api/nym-node-status-agent/run.sh similarity index 88% rename from nym-node-status-agent/run.sh rename to nym-node-status-api/nym-node-status-agent/run.sh index 0b38466031..680c87db8b 100755 --- a/nym-node-status-agent/run.sh +++ b/nym-node-status-api/nym-node-status-agent/run.sh @@ -3,14 +3,14 @@ set -eu export ENVIRONMENT=${ENVIRONMENT:-"sandbox"} -probe_git_ref="nym-vpn-core-v1.0.0-rc.6" +probe_git_ref="nym-vpn-core-v1.0.0-rc.14" crate_root=$(dirname $(realpath "$0")) -monorepo_root=$(dirname "${crate_root}") +monorepo_root=$(realpath "${crate_root}/../..") + echo "Expecting nym-vpn-client repo at a sibling level of nym monorepo dir" gateway_probe_src=$(dirname "${monorepo_root}")/nym-vpn-client/nym-vpn-core echo "gateway_probe_src=$gateway_probe_src" -echo "crate_root=$crate_root" set -a source "${monorepo_root}/envs/${ENVIRONMENT}.env" @@ -30,9 +30,11 @@ function copy_gw_probe() { pushd $gateway_probe_src git fetch -a git checkout $probe_git_ref + cargo build --release --package nym-gateway-probe cp target/release/nym-gateway-probe "$crate_root" $crate_root/nym-gateway-probe --version + popd } @@ -44,7 +46,7 @@ function swarm() { local workers=$1 for ((i = 1; i <= workers; i++)); do - ../target/release/nym-node-status-agent run-probe & + ${monorepo_root}/target/release/nym-node-status-agent run-probe & done wait diff --git a/nym-node-status-agent/src/cli/generate_keypair.rs b/nym-node-status-api/nym-node-status-agent/src/cli/generate_keypair.rs similarity index 100% rename from nym-node-status-agent/src/cli/generate_keypair.rs rename to nym-node-status-api/nym-node-status-agent/src/cli/generate_keypair.rs diff --git a/nym-node-status-agent/src/cli/mod.rs b/nym-node-status-api/nym-node-status-agent/src/cli/mod.rs similarity index 100% rename from nym-node-status-agent/src/cli/mod.rs rename to nym-node-status-api/nym-node-status-agent/src/cli/mod.rs diff --git a/nym-node-status-api/nym-node-status-agent/src/cli/run_probe.rs b/nym-node-status-api/nym-node-status-agent/src/cli/run_probe.rs new file mode 100644 index 0000000000..e9b7eaf44a --- /dev/null +++ b/nym-node-status-api/nym-node-status-agent/src/cli/run_probe.rs @@ -0,0 +1,32 @@ +use crate::cli::GwProbe; +use anyhow::Context; +use nym_crypto::asymmetric::ed25519::PrivateKey; + +pub(crate) async fn run_probe( + server_ip: &str, + server_port: u16, + ns_api_auth_key: &str, + probe_path: &str, +) -> anyhow::Result<()> { + let auth_key = PrivateKey::from_base58_string(ns_api_auth_key) + .context("Couldn't parse auth key, exiting")?; + + let ns_api_client = nym_node_status_client::NsApiClient::new(server_ip, server_port, auth_key); + + let probe = GwProbe::new(probe_path.to_string()); + + let version = probe.version().await; + tracing::info!("Probe version:\n{}", version); + + if let Some(testrun) = ns_api_client.request_testrun().await? { + let log = probe.run_and_get_log(&Some(testrun.gateway_identity_key)); + + ns_api_client + .submit_results(testrun.testrun_id, log, testrun.assigned_at_utc) + .await?; + } else { + tracing::info!("No testruns available, exiting") + } + + Ok(()) +} diff --git a/nym-node-status-agent/src/main.rs b/nym-node-status-api/nym-node-status-agent/src/main.rs similarity index 100% rename from nym-node-status-agent/src/main.rs rename to nym-node-status-api/nym-node-status-agent/src/main.rs diff --git a/nym-node-status-agent/src/probe.rs b/nym-node-status-api/nym-node-status-agent/src/probe.rs similarity index 100% rename from nym-node-status-agent/src/probe.rs rename to nym-node-status-api/nym-node-status-agent/src/probe.rs diff --git a/nym-node-status-api/.sqlx/query-06b17d1e5f61201a1b7542896ba55c69cd5c1a7e7d87073c94600c783a0a3984.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-06b17d1e5f61201a1b7542896ba55c69cd5c1a7e7d87073c94600c783a0a3984.json similarity index 100% rename from nym-node-status-api/.sqlx/query-06b17d1e5f61201a1b7542896ba55c69cd5c1a7e7d87073c94600c783a0a3984.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-06b17d1e5f61201a1b7542896ba55c69cd5c1a7e7d87073c94600c783a0a3984.json diff --git a/nym-node-status-api/.sqlx/query-1327b5118f9144dddbcf8edb11f7dc549cf503409fd6dfedcdc02dbcd61d5454.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-1327b5118f9144dddbcf8edb11f7dc549cf503409fd6dfedcdc02dbcd61d5454.json similarity index 100% rename from nym-node-status-api/.sqlx/query-1327b5118f9144dddbcf8edb11f7dc549cf503409fd6dfedcdc02dbcd61d5454.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-1327b5118f9144dddbcf8edb11f7dc549cf503409fd6dfedcdc02dbcd61d5454.json diff --git a/nym-node-status-api/.sqlx/query-18abc8fde56cf86baed7b4afa38f2c63cdf90f2f3b6d81afb9000bb0968dcaea.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-18abc8fde56cf86baed7b4afa38f2c63cdf90f2f3b6d81afb9000bb0968dcaea.json similarity index 100% rename from nym-node-status-api/.sqlx/query-18abc8fde56cf86baed7b4afa38f2c63cdf90f2f3b6d81afb9000bb0968dcaea.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-18abc8fde56cf86baed7b4afa38f2c63cdf90f2f3b6d81afb9000bb0968dcaea.json diff --git a/nym-node-status-api/.sqlx/query-2236299f9f691376db54cbd58ec5ceb89b9925cba46efcf4ed79ef0759a01129.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-2236299f9f691376db54cbd58ec5ceb89b9925cba46efcf4ed79ef0759a01129.json similarity index 100% rename from nym-node-status-api/.sqlx/query-2236299f9f691376db54cbd58ec5ceb89b9925cba46efcf4ed79ef0759a01129.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-2236299f9f691376db54cbd58ec5ceb89b9925cba46efcf4ed79ef0759a01129.json diff --git a/nym-node-status-api/.sqlx/query-3c584e211d07c511644c8079187965acf3bcfb3f84ba8d24ed645d79976cf784.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-3c584e211d07c511644c8079187965acf3bcfb3f84ba8d24ed645d79976cf784.json similarity index 100% rename from nym-node-status-api/.sqlx/query-3c584e211d07c511644c8079187965acf3bcfb3f84ba8d24ed645d79976cf784.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-3c584e211d07c511644c8079187965acf3bcfb3f84ba8d24ed645d79976cf784.json diff --git a/nym-node-status-api/.sqlx/query-3d3a1fa429e3090741c6b6a8e82e692afc04b51e8782bcbf59f1eb4116112536.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-3d3a1fa429e3090741c6b6a8e82e692afc04b51e8782bcbf59f1eb4116112536.json similarity index 100% rename from nym-node-status-api/.sqlx/query-3d3a1fa429e3090741c6b6a8e82e692afc04b51e8782bcbf59f1eb4116112536.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-3d3a1fa429e3090741c6b6a8e82e692afc04b51e8782bcbf59f1eb4116112536.json diff --git a/nym-node-status-api/.sqlx/query-3d5fc502f976f5081f01352856b8632c29c81bfafb043bb8744129cf9e0266ad.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-3d5fc502f976f5081f01352856b8632c29c81bfafb043bb8744129cf9e0266ad.json similarity index 100% rename from nym-node-status-api/.sqlx/query-3d5fc502f976f5081f01352856b8632c29c81bfafb043bb8744129cf9e0266ad.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-3d5fc502f976f5081f01352856b8632c29c81bfafb043bb8744129cf9e0266ad.json diff --git a/nym-node-status-api/.sqlx/query-418944f2eccb838cb3882f34469203c8569f03fdd39ce09d7b74177896e52a8c.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-418944f2eccb838cb3882f34469203c8569f03fdd39ce09d7b74177896e52a8c.json similarity index 100% rename from nym-node-status-api/.sqlx/query-418944f2eccb838cb3882f34469203c8569f03fdd39ce09d7b74177896e52a8c.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-418944f2eccb838cb3882f34469203c8569f03fdd39ce09d7b74177896e52a8c.json diff --git a/nym-node-status-api/.sqlx/query-46d76bc6d3fba2dae3b21511a36289dd776749dd7a20cda61b0480f2fba60889.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-46d76bc6d3fba2dae3b21511a36289dd776749dd7a20cda61b0480f2fba60889.json similarity index 100% rename from nym-node-status-api/.sqlx/query-46d76bc6d3fba2dae3b21511a36289dd776749dd7a20cda61b0480f2fba60889.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-46d76bc6d3fba2dae3b21511a36289dd776749dd7a20cda61b0480f2fba60889.json diff --git a/nym-node-status-api/.sqlx/query-4afcc6673890f795c2793f1e2f8570ee787fc7daf00fcb916f18d1cb7d6c8f08.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-4afcc6673890f795c2793f1e2f8570ee787fc7daf00fcb916f18d1cb7d6c8f08.json similarity index 100% rename from nym-node-status-api/.sqlx/query-4afcc6673890f795c2793f1e2f8570ee787fc7daf00fcb916f18d1cb7d6c8f08.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-4afcc6673890f795c2793f1e2f8570ee787fc7daf00fcb916f18d1cb7d6c8f08.json diff --git a/nym-node-status-api/.sqlx/query-4b61a4bc32333c92a8f5ad4ad0017b40dc01845f554b5479f37855d89b309e6f.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-4b61a4bc32333c92a8f5ad4ad0017b40dc01845f554b5479f37855d89b309e6f.json similarity index 100% rename from nym-node-status-api/.sqlx/query-4b61a4bc32333c92a8f5ad4ad0017b40dc01845f554b5479f37855d89b309e6f.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-4b61a4bc32333c92a8f5ad4ad0017b40dc01845f554b5479f37855d89b309e6f.json diff --git a/nym-node-status-api/.sqlx/query-670b7ed7d57a6986181b24be24ca667e8cacdf677ccb906415b3fe92be0c436b.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-670b7ed7d57a6986181b24be24ca667e8cacdf677ccb906415b3fe92be0c436b.json similarity index 100% rename from nym-node-status-api/.sqlx/query-670b7ed7d57a6986181b24be24ca667e8cacdf677ccb906415b3fe92be0c436b.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-670b7ed7d57a6986181b24be24ca667e8cacdf677ccb906415b3fe92be0c436b.json diff --git a/nym-node-status-api/.sqlx/query-6d7967b831b355d5f2c77950abc56f816956b0824c66a25da611dce688105d36.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-6d7967b831b355d5f2c77950abc56f816956b0824c66a25da611dce688105d36.json similarity index 100% rename from nym-node-status-api/.sqlx/query-6d7967b831b355d5f2c77950abc56f816956b0824c66a25da611dce688105d36.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-6d7967b831b355d5f2c77950abc56f816956b0824c66a25da611dce688105d36.json diff --git a/nym-node-status-api/.sqlx/query-6eb1a682cf13205cf701590021cdf795147ac3724e89df5b2f24f7215d87dce1.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-6eb1a682cf13205cf701590021cdf795147ac3724e89df5b2f24f7215d87dce1.json similarity index 100% rename from nym-node-status-api/.sqlx/query-6eb1a682cf13205cf701590021cdf795147ac3724e89df5b2f24f7215d87dce1.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-6eb1a682cf13205cf701590021cdf795147ac3724e89df5b2f24f7215d87dce1.json diff --git a/nym-node-status-api/.sqlx/query-6ef3efde571d46961244cd90420f3de5949a5ff2083453cb879af8a1689efe2f.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-6ef3efde571d46961244cd90420f3de5949a5ff2083453cb879af8a1689efe2f.json similarity index 100% rename from nym-node-status-api/.sqlx/query-6ef3efde571d46961244cd90420f3de5949a5ff2083453cb879af8a1689efe2f.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-6ef3efde571d46961244cd90420f3de5949a5ff2083453cb879af8a1689efe2f.json diff --git a/nym-node-status-api/.sqlx/query-71a455c705f9c25d3843ff2fb8629d1320a5eb10797cdb5a435455d22c6aeac1.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-71a455c705f9c25d3843ff2fb8629d1320a5eb10797cdb5a435455d22c6aeac1.json similarity index 100% rename from nym-node-status-api/.sqlx/query-71a455c705f9c25d3843ff2fb8629d1320a5eb10797cdb5a435455d22c6aeac1.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-71a455c705f9c25d3843ff2fb8629d1320a5eb10797cdb5a435455d22c6aeac1.json diff --git a/nym-node-status-api/.sqlx/query-7600823da7ce80b8ffda933608603a2752e28df775d1af8fd943a5fc8d7dc00d.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-7600823da7ce80b8ffda933608603a2752e28df775d1af8fd943a5fc8d7dc00d.json similarity index 100% rename from nym-node-status-api/.sqlx/query-7600823da7ce80b8ffda933608603a2752e28df775d1af8fd943a5fc8d7dc00d.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-7600823da7ce80b8ffda933608603a2752e28df775d1af8fd943a5fc8d7dc00d.json diff --git a/nym-node-status-api/.sqlx/query-788515c34588aec352773df4b6e6c5e41f3c0bb56a27648b5e25466b8634a578.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-788515c34588aec352773df4b6e6c5e41f3c0bb56a27648b5e25466b8634a578.json similarity index 100% rename from nym-node-status-api/.sqlx/query-788515c34588aec352773df4b6e6c5e41f3c0bb56a27648b5e25466b8634a578.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-788515c34588aec352773df4b6e6c5e41f3c0bb56a27648b5e25466b8634a578.json diff --git a/nym-node-status-api/.sqlx/query-8571faad2f66e08f24acfbfe036d17ca6eb090df7f6d52ef89c5d51564f8b45c.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-8571faad2f66e08f24acfbfe036d17ca6eb090df7f6d52ef89c5d51564f8b45c.json similarity index 100% rename from nym-node-status-api/.sqlx/query-8571faad2f66e08f24acfbfe036d17ca6eb090df7f6d52ef89c5d51564f8b45c.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-8571faad2f66e08f24acfbfe036d17ca6eb090df7f6d52ef89c5d51564f8b45c.json diff --git a/nym-node-status-api/.sqlx/query-86ff64db477a1d6235179b0b88d86b86d1b9be62336c9eac0eef44987a5451b5.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-86ff64db477a1d6235179b0b88d86b86d1b9be62336c9eac0eef44987a5451b5.json similarity index 100% rename from nym-node-status-api/.sqlx/query-86ff64db477a1d6235179b0b88d86b86d1b9be62336c9eac0eef44987a5451b5.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-86ff64db477a1d6235179b0b88d86b86d1b9be62336c9eac0eef44987a5451b5.json diff --git a/nym-node-status-api/.sqlx/query-930a41e612b4e964ae214843da190f6c66c14d4267a2cc2ca73354becc2c8bb8.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-930a41e612b4e964ae214843da190f6c66c14d4267a2cc2ca73354becc2c8bb8.json similarity index 100% rename from nym-node-status-api/.sqlx/query-930a41e612b4e964ae214843da190f6c66c14d4267a2cc2ca73354becc2c8bb8.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-930a41e612b4e964ae214843da190f6c66c14d4267a2cc2ca73354becc2c8bb8.json diff --git a/nym-node-status-api/.sqlx/query-c214c001acbbf79fa499816f36ec586c4c29c03efb4cf0c40b73a5c76159cf5c.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-c214c001acbbf79fa499816f36ec586c4c29c03efb4cf0c40b73a5c76159cf5c.json similarity index 100% rename from nym-node-status-api/.sqlx/query-c214c001acbbf79fa499816f36ec586c4c29c03efb4cf0c40b73a5c76159cf5c.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-c214c001acbbf79fa499816f36ec586c4c29c03efb4cf0c40b73a5c76159cf5c.json diff --git a/nym-node-status-api/.sqlx/query-c5e3cd7284b334df5aa979b1627ea1f6dc2aed00cedde25f2be3567e47064351.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-c5e3cd7284b334df5aa979b1627ea1f6dc2aed00cedde25f2be3567e47064351.json similarity index 100% rename from nym-node-status-api/.sqlx/query-c5e3cd7284b334df5aa979b1627ea1f6dc2aed00cedde25f2be3567e47064351.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-c5e3cd7284b334df5aa979b1627ea1f6dc2aed00cedde25f2be3567e47064351.json diff --git a/nym-node-status-api/.sqlx/query-c7ba2621becb9ac4b5dee0ce303dadfcf19095935867a51cbd5b8362d1505fcc.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-c7ba2621becb9ac4b5dee0ce303dadfcf19095935867a51cbd5b8362d1505fcc.json similarity index 100% rename from nym-node-status-api/.sqlx/query-c7ba2621becb9ac4b5dee0ce303dadfcf19095935867a51cbd5b8362d1505fcc.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-c7ba2621becb9ac4b5dee0ce303dadfcf19095935867a51cbd5b8362d1505fcc.json diff --git a/nym-node-status-api/.sqlx/query-d8ea93e781666e6267902170709ee2aa37f6163525bbdce1a4cebef4a285f8d9.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-d8ea93e781666e6267902170709ee2aa37f6163525bbdce1a4cebef4a285f8d9.json similarity index 100% rename from nym-node-status-api/.sqlx/query-d8ea93e781666e6267902170709ee2aa37f6163525bbdce1a4cebef4a285f8d9.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-d8ea93e781666e6267902170709ee2aa37f6163525bbdce1a4cebef4a285f8d9.json diff --git a/nym-node-status-api/.sqlx/query-e0c76a959276e3b0f44c720af9c74a5bf4912ee73468e62e7d0d96b1d9074cbe.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-e0c76a959276e3b0f44c720af9c74a5bf4912ee73468e62e7d0d96b1d9074cbe.json similarity index 100% rename from nym-node-status-api/.sqlx/query-e0c76a959276e3b0f44c720af9c74a5bf4912ee73468e62e7d0d96b1d9074cbe.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-e0c76a959276e3b0f44c720af9c74a5bf4912ee73468e62e7d0d96b1d9074cbe.json diff --git a/nym-node-status-api/.sqlx/query-f0a4316081d1be9444a87b95d933d31cb4bcc4071d31d8d2f7755e2d2c2e3e35.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-f0a4316081d1be9444a87b95d933d31cb4bcc4071d31d8d2f7755e2d2c2e3e35.json similarity index 100% rename from nym-node-status-api/.sqlx/query-f0a4316081d1be9444a87b95d933d31cb4bcc4071d31d8d2f7755e2d2c2e3e35.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-f0a4316081d1be9444a87b95d933d31cb4bcc4071d31d8d2f7755e2d2c2e3e35.json diff --git a/nym-node-status-api/.sqlx/query-f5048d9926a5f5329f7f3b96d43b925e033ceec4f8112258feb4ac9e96fc5924.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-f5048d9926a5f5329f7f3b96d43b925e033ceec4f8112258feb4ac9e96fc5924.json similarity index 100% rename from nym-node-status-api/.sqlx/query-f5048d9926a5f5329f7f3b96d43b925e033ceec4f8112258feb4ac9e96fc5924.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-f5048d9926a5f5329f7f3b96d43b925e033ceec4f8112258feb4ac9e96fc5924.json diff --git a/nym-node-status-api/.sqlx/query-ff9334ba7b670b218b2f9100e9ab5d2f2d08b2e53203aab9f07ea9b52acbd407.json b/nym-node-status-api/nym-node-status-api/.sqlx/query-ff9334ba7b670b218b2f9100e9ab5d2f2d08b2e53203aab9f07ea9b52acbd407.json similarity index 100% rename from nym-node-status-api/.sqlx/query-ff9334ba7b670b218b2f9100e9ab5d2f2d08b2e53203aab9f07ea9b52acbd407.json rename to nym-node-status-api/nym-node-status-api/.sqlx/query-ff9334ba7b670b218b2f9100e9ab5d2f2d08b2e53203aab9f07ea9b52acbd407.json diff --git a/nym-node-status-api/Cargo.toml b/nym-node-status-api/nym-node-status-api/Cargo.toml similarity index 77% rename from nym-node-status-api/Cargo.toml rename to nym-node-status-api/nym-node-status-api/Cargo.toml index b7951996b8..cc95396f86 100644 --- a/nym-node-status-api/Cargo.toml +++ b/nym-node-status-api/nym-node-status-api/Cargo.toml @@ -15,21 +15,20 @@ rust-version.workspace = true [dependencies] anyhow = { workspace = true } axum = { workspace = true, features = ["tokio", "macros"] } -bincode = { workspace = true } chrono = { workspace = true } clap = { workspace = true, features = ["cargo", "derive", "env", "string"] } cosmwasm-std = { workspace = true } envy = { workspace = true } futures-util = { workspace = true } moka = { workspace = true, features = ["future"] } -nym-bin-common = { path = "../common/bin-common", features = ["models"]} -nym-common-models = { path = "../common/models" } -nym-crypto = { path = "../common/crypto", features = ["asymmetric", "serde"] } -nym-explorer-client = { path = "../explorer-api/explorer-client" } -nym-network-defaults = { path = "../common/network-defaults" } -nym-validator-client = { path = "../common/client-libs/validator-client" } -nym-task = { path = "../common/task" } -nym-node-requests = { path = "../nym-node/nym-node-requests", features = ["openapi"] } +nym-bin-common = { path = "../../common/bin-common", features = ["models"]} +nym-node-status-client = { path = "../nym-node-status-client" } +nym-crypto = { path = "../../common/crypto", features = ["asymmetric", "serde"] } +nym-explorer-client = { path = "../../explorer-api/explorer-client" } +nym-network-defaults = { path = "../../common/network-defaults" } +nym-validator-client = { path = "../../common/client-libs/validator-client" } +nym-task = { path = "../../common/task" } +nym-node-requests = { path = "../../nym-node/nym-node-requests", features = ["openapi"] } regex = { workspace = true } reqwest = { workspace = true } serde = { workspace = true, features = ["derive"] } diff --git a/nym-node-status-api/Dockerfile b/nym-node-status-api/nym-node-status-api/Dockerfile similarity index 100% rename from nym-node-status-api/Dockerfile rename to nym-node-status-api/nym-node-status-api/Dockerfile diff --git a/nym-node-status-api/Dockerfile.dev b/nym-node-status-api/nym-node-status-api/Dockerfile.dev similarity index 100% rename from nym-node-status-api/Dockerfile.dev rename to nym-node-status-api/nym-node-status-api/Dockerfile.dev diff --git a/nym-node-status-api/build.rs b/nym-node-status-api/nym-node-status-api/build.rs similarity index 100% rename from nym-node-status-api/build.rs rename to nym-node-status-api/nym-node-status-api/build.rs diff --git a/nym-node-status-api/launch_node_status_api.sh b/nym-node-status-api/nym-node-status-api/launch_node_status_api.sh similarity index 62% rename from nym-node-status-api/launch_node_status_api.sh rename to nym-node-status-api/nym-node-status-api/launch_node_status_api.sh index 26a97fcbab..24b9a68ae8 100755 --- a/nym-node-status-api/launch_node_status_api.sh +++ b/nym-node-status-api/nym-node-status-api/launch_node_status_api.sh @@ -2,29 +2,23 @@ set -e -export RUST_LOG=${RUST_LOG:-debug} - export NYM_API_CLIENT_TIMEOUT=60 export EXPLORER_CLIENT_TIMEOUT=60 export NODE_STATUS_API_TESTRUN_REFRESH_INTERVAL=120 -# public keys corresponding to the agents NS API is expecting to be contacted from -export NODE_STATUS_API_AGENT_KEY_LIST="H4z8kx5Kkf5JMQHhxaW1MwYndjKCDHC7HsVhHTFfBZ4J, -5c2GW61135DEr73DxGrR4DR22BLEujvm1k8GYEjRB9at, -3PSFDH2iSJ61KoDNyJpAiw42xS5smV5iBXWnRGTmk2du, -2AH7pJL5PErbSFhZdu3uH8cKa1h1tyCUfSRUm6E5EBz8, -6wQ9ifPFm2EB73BrwpGSd3Ek7GFA5kiAMQDP2ox6JKZw, -G1tevJBnzaQ6zCUsFsxtGJf45BqCTDgzpEz6Sgxks8EH, -FwjL2nGrtgQQ48fPqAUzUZ8UkQZtMtgehqTqj4PQopvh, -Eujj4GmvwQBgHZaNSyqUbjMFSsnXWPSjEYUPgAsKmx1A, -5ZnfSGxW6EKcFxB8jftb9V3f897VpwpZtf7kCPYzB595, -H9kuRd8BGjEUD8Grh5U9YUPN5ZaQmSYz8U44R72AffKM" + +# public counterpart of the agent's private key. +# For TESTING only. NOT used in any other environment +export NODE_STATUS_API_AGENT_KEY_LIST="H4z8kx5Kkf5JMQHhxaW1MwYndjKCDHC7HsVhHTFfBZ4J" export ENVIRONMENT=${ENVIRONMENT:-"sandbox"} +script_dir=$(dirname $(realpath "$0")) +monorepo_root=$(realpath "${script_dir}/../..") + function run_bare() { # export necessary env vars set -a - source ../envs/${ENVIRONMENT}.env + source "${monorepo_root}/envs/${ENVIRONMENT}.env" set +a export RUST_LOG=debug diff --git a/nym-node-status-api/migrations/000_init.sql b/nym-node-status-api/nym-node-status-api/migrations/000_init.sql similarity index 100% rename from nym-node-status-api/migrations/000_init.sql rename to nym-node-status-api/nym-node-status-api/migrations/000_init.sql diff --git a/nym-node-status-api/migrations/001_last_assigned_utc.sql b/nym-node-status-api/nym-node-status-api/migrations/001_last_assigned_utc.sql similarity index 100% rename from nym-node-status-api/migrations/001_last_assigned_utc.sql rename to nym-node-status-api/nym-node-status-api/migrations/001_last_assigned_utc.sql diff --git a/nym-node-status-api/src/cli/mod.rs b/nym-node-status-api/nym-node-status-api/src/cli/mod.rs similarity index 100% rename from nym-node-status-api/src/cli/mod.rs rename to nym-node-status-api/nym-node-status-api/src/cli/mod.rs diff --git a/nym-node-status-api/src/db/mod.rs b/nym-node-status-api/nym-node-status-api/src/db/mod.rs similarity index 100% rename from nym-node-status-api/src/db/mod.rs rename to nym-node-status-api/nym-node-status-api/src/db/mod.rs diff --git a/nym-node-status-api/src/db/models.rs b/nym-node-status-api/nym-node-status-api/src/db/models.rs similarity index 100% rename from nym-node-status-api/src/db/models.rs rename to nym-node-status-api/nym-node-status-api/src/db/models.rs diff --git a/nym-node-status-api/src/db/queries/gateways.rs b/nym-node-status-api/nym-node-status-api/src/db/queries/gateways.rs similarity index 100% rename from nym-node-status-api/src/db/queries/gateways.rs rename to nym-node-status-api/nym-node-status-api/src/db/queries/gateways.rs diff --git a/nym-node-status-api/src/db/queries/misc.rs b/nym-node-status-api/nym-node-status-api/src/db/queries/misc.rs similarity index 100% rename from nym-node-status-api/src/db/queries/misc.rs rename to nym-node-status-api/nym-node-status-api/src/db/queries/misc.rs diff --git a/nym-node-status-api/src/db/queries/mixnodes.rs b/nym-node-status-api/nym-node-status-api/src/db/queries/mixnodes.rs similarity index 100% rename from nym-node-status-api/src/db/queries/mixnodes.rs rename to nym-node-status-api/nym-node-status-api/src/db/queries/mixnodes.rs diff --git a/nym-node-status-api/src/db/queries/mod.rs b/nym-node-status-api/nym-node-status-api/src/db/queries/mod.rs similarity index 100% rename from nym-node-status-api/src/db/queries/mod.rs rename to nym-node-status-api/nym-node-status-api/src/db/queries/mod.rs diff --git a/nym-node-status-api/src/db/queries/summary.rs b/nym-node-status-api/nym-node-status-api/src/db/queries/summary.rs similarity index 100% rename from nym-node-status-api/src/db/queries/summary.rs rename to nym-node-status-api/nym-node-status-api/src/db/queries/summary.rs diff --git a/nym-node-status-api/src/db/queries/testruns.rs b/nym-node-status-api/nym-node-status-api/src/db/queries/testruns.rs similarity index 100% rename from nym-node-status-api/src/db/queries/testruns.rs rename to nym-node-status-api/nym-node-status-api/src/db/queries/testruns.rs diff --git a/nym-node-status-api/src/http/api/gateways.rs b/nym-node-status-api/nym-node-status-api/src/http/api/gateways.rs similarity index 100% rename from nym-node-status-api/src/http/api/gateways.rs rename to nym-node-status-api/nym-node-status-api/src/http/api/gateways.rs diff --git a/nym-node-status-api/src/http/api/mixnodes.rs b/nym-node-status-api/nym-node-status-api/src/http/api/mixnodes.rs similarity index 100% rename from nym-node-status-api/src/http/api/mixnodes.rs rename to nym-node-status-api/nym-node-status-api/src/http/api/mixnodes.rs diff --git a/nym-node-status-api/src/http/api/mod.rs b/nym-node-status-api/nym-node-status-api/src/http/api/mod.rs similarity index 100% rename from nym-node-status-api/src/http/api/mod.rs rename to nym-node-status-api/nym-node-status-api/src/http/api/mod.rs diff --git a/nym-node-status-api/src/http/api/services/json_path.rs b/nym-node-status-api/nym-node-status-api/src/http/api/services/json_path.rs similarity index 100% rename from nym-node-status-api/src/http/api/services/json_path.rs rename to nym-node-status-api/nym-node-status-api/src/http/api/services/json_path.rs diff --git a/nym-node-status-api/src/http/api/services/mod.rs b/nym-node-status-api/nym-node-status-api/src/http/api/services/mod.rs similarity index 100% rename from nym-node-status-api/src/http/api/services/mod.rs rename to nym-node-status-api/nym-node-status-api/src/http/api/services/mod.rs diff --git a/nym-node-status-api/src/http/api/summary.rs b/nym-node-status-api/nym-node-status-api/src/http/api/summary.rs similarity index 100% rename from nym-node-status-api/src/http/api/summary.rs rename to nym-node-status-api/nym-node-status-api/src/http/api/summary.rs diff --git a/nym-node-status-api/src/http/api/testruns.rs b/nym-node-status-api/nym-node-status-api/src/http/api/testruns.rs similarity index 98% rename from nym-node-status-api/src/http/api/testruns.rs rename to nym-node-status-api/nym-node-status-api/src/http/api/testruns.rs index 6f5ab862ea..3e34c09ed6 100644 --- a/nym-node-status-api/src/http/api/testruns.rs +++ b/nym-node-status-api/nym-node-status-api/src/http/api/testruns.rs @@ -1,12 +1,3 @@ -use axum::extract::DefaultBodyLimit; -use axum::Json; -use axum::{ - extract::{Path, State}, - Router, -}; -use nym_common_models::ns_api::{get_testrun, submit_results, VerifiableRequest}; -use reqwest::StatusCode; - use crate::db::models::TestRunStatus; use crate::db::queries; use crate::testruns::now_utc; @@ -18,6 +9,17 @@ use crate::{ state::AppState, }, }; +use axum::extract::DefaultBodyLimit; +use axum::Json; +use axum::{ + extract::{Path, State}, + Router, +}; +use nym_node_status_client::{ + auth::VerifiableRequest, + models::{get_testrun, submit_results}, +}; +use reqwest::StatusCode; // TODO dz consider adding endpoint to trigger testrun scan for a given gateway_id // like in H< src/http/testruns.rs diff --git a/nym-node-status-api/src/http/api_docs.rs b/nym-node-status-api/nym-node-status-api/src/http/api_docs.rs similarity index 87% rename from nym-node-status-api/src/http/api_docs.rs rename to nym-node-status-api/nym-node-status-api/src/http/api_docs.rs index 9ac5238fc4..aa86a56ab0 100644 --- a/nym-node-status-api/src/http/api_docs.rs +++ b/nym-node-status-api/nym-node-status-api/src/http/api_docs.rs @@ -5,7 +5,7 @@ use utoipauto::utoipauto; // manually import external structs which are behind feature flags because they // can't be automatically discovered // https://github.com/ProbablyClem/utoipauto/issues/13#issuecomment-1974911829 -#[utoipauto(paths = "./nym-node-status-api/src")] +#[utoipauto(paths = "./nym-node-status-api/nym-node-status-api/src")] #[derive(OpenApi)] #[openapi( info(title = "Node Status API"), diff --git a/nym-node-status-api/src/http/error.rs b/nym-node-status-api/nym-node-status-api/src/http/error.rs similarity index 100% rename from nym-node-status-api/src/http/error.rs rename to nym-node-status-api/nym-node-status-api/src/http/error.rs diff --git a/nym-node-status-api/src/http/mod.rs b/nym-node-status-api/nym-node-status-api/src/http/mod.rs similarity index 100% rename from nym-node-status-api/src/http/mod.rs rename to nym-node-status-api/nym-node-status-api/src/http/mod.rs diff --git a/nym-node-status-api/src/http/models.rs b/nym-node-status-api/nym-node-status-api/src/http/models.rs similarity index 97% rename from nym-node-status-api/src/http/models.rs rename to nym-node-status-api/nym-node-status-api/src/http/models.rs index 82011fc286..aee2124b6c 100644 --- a/nym-node-status-api/src/http/models.rs +++ b/nym-node-status-api/nym-node-status-api/src/http/models.rs @@ -2,7 +2,7 @@ use nym_node_requests::api::v1::node::models::NodeDescription; use serde::{Deserialize, Serialize}; use utoipa::ToSchema; -pub(crate) use nym_common_models::ns_api::TestrunAssignment; +pub(crate) use nym_node_status_client::models::TestrunAssignment; #[derive(Debug, Clone, Serialize, Deserialize, ToSchema)] pub struct Gateway { diff --git a/nym-node-status-api/src/http/server.rs b/nym-node-status-api/nym-node-status-api/src/http/server.rs similarity index 100% rename from nym-node-status-api/src/http/server.rs rename to nym-node-status-api/nym-node-status-api/src/http/server.rs diff --git a/nym-node-status-api/src/http/state.rs b/nym-node-status-api/nym-node-status-api/src/http/state.rs similarity index 100% rename from nym-node-status-api/src/http/state.rs rename to nym-node-status-api/nym-node-status-api/src/http/state.rs diff --git a/nym-node-status-api/src/logging.rs b/nym-node-status-api/nym-node-status-api/src/logging.rs similarity index 100% rename from nym-node-status-api/src/logging.rs rename to nym-node-status-api/nym-node-status-api/src/logging.rs diff --git a/nym-node-status-api/src/main.rs b/nym-node-status-api/nym-node-status-api/src/main.rs similarity index 100% rename from nym-node-status-api/src/main.rs rename to nym-node-status-api/nym-node-status-api/src/main.rs diff --git a/nym-node-status-api/src/monitor/mod.rs b/nym-node-status-api/nym-node-status-api/src/monitor/mod.rs similarity index 100% rename from nym-node-status-api/src/monitor/mod.rs rename to nym-node-status-api/nym-node-status-api/src/monitor/mod.rs diff --git a/nym-node-status-api/src/testruns/mod.rs b/nym-node-status-api/nym-node-status-api/src/testruns/mod.rs similarity index 100% rename from nym-node-status-api/src/testruns/mod.rs rename to nym-node-status-api/nym-node-status-api/src/testruns/mod.rs diff --git a/nym-node-status-api/src/testruns/models.rs b/nym-node-status-api/nym-node-status-api/src/testruns/models.rs similarity index 100% rename from nym-node-status-api/src/testruns/models.rs rename to nym-node-status-api/nym-node-status-api/src/testruns/models.rs diff --git a/nym-node-status-api/src/testruns/queue.rs b/nym-node-status-api/nym-node-status-api/src/testruns/queue.rs similarity index 100% rename from nym-node-status-api/src/testruns/queue.rs rename to nym-node-status-api/nym-node-status-api/src/testruns/queue.rs diff --git a/nym-node-status-api/nym-node-status-client/Cargo.toml b/nym-node-status-api/nym-node-status-client/Cargo.toml new file mode 100644 index 0000000000..a7dc5899fb --- /dev/null +++ b/nym-node-status-api/nym-node-status-client/Cargo.toml @@ -0,0 +1,25 @@ +# Copyright 2024 - Nym Technologies SA +# SPDX-License-Identifier: Apache-2.0 + +[package] +name = "nym-node-status-client" +version = "0.1.0" +authors.workspace = true +repository.workspace = true +homepage.workspace = true +documentation.workspace = true +edition.workspace = true +license.workspace = true +rust-version.workspace = true +readme.workspace = true + +[dependencies] +anyhow = { workspace = true } +chrono = { workspace = true } +bincode = { workspace = true } +nym-crypto = { path = "../../common/crypto", features = ["asymmetric", "serde"] } +nym-http-api-client = { path = "../../common/http-api-client" } +reqwest = { workspace = true } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true } +tracing = { workspace = true } diff --git a/nym-node-status-api/nym-node-status-client/src/api.rs b/nym-node-status-api/nym-node-status-client/src/api.rs new file mode 100644 index 0000000000..46d2fb7cd4 --- /dev/null +++ b/nym-node-status-api/nym-node-status-client/src/api.rs @@ -0,0 +1,18 @@ +use std::fmt::Display; + +pub(super) struct ApiPaths { + server_address: String, +} + +impl ApiPaths { + pub(super) fn new(server_address: String) -> Self { + Self { server_address } + } + pub(super) fn request_testrun(&self) -> String { + format!("{}/internal/testruns", self.server_address) + } + + pub(super) fn submit_results(&self, testrun_id: impl Display) -> String { + format!("{}/internal/testruns/{}", self.server_address, testrun_id) + } +} diff --git a/nym-node-status-api/nym-node-status-client/src/auth.rs b/nym-node-status-api/nym-node-status-client/src/auth.rs new file mode 100644 index 0000000000..263079dcc6 --- /dev/null +++ b/nym-node-status-api/nym-node-status-client/src/auth.rs @@ -0,0 +1,30 @@ +use nym_crypto::asymmetric::ed25519::{PublicKey, Signature, SignatureError}; + +pub trait SignedRequest { + type Payload: serde::Serialize; + + fn public_key(&self) -> &PublicKey; + fn signature(&self) -> &Signature; + fn payload(&self) -> &Self::Payload; +} + +pub trait VerifiableRequest: SignedRequest { + type Error: From + From; + + fn verify_signature(&self) -> Result<(), Self::Error> { + bincode::serialize(self.payload()) + .map_err(Self::Error::from) + .and_then(|serialized| { + self.public_key() + .verify(serialized, self.signature()) + .map_err(Self::Error::from) + }) + } +} + +impl VerifiableRequest for T +where + T: SignedRequest, +{ + type Error = anyhow::Error; +} diff --git a/nym-node-status-agent/src/cli/run_probe.rs b/nym-node-status-api/nym-node-status-client/src/lib.rs similarity index 61% rename from nym-node-status-agent/src/cli/run_probe.rs rename to nym-node-status-api/nym-node-status-client/src/lib.rs index 3ffd90d46c..260b1b510d 100644 --- a/nym-node-status-agent/src/cli/run_probe.rs +++ b/nym-node-status-api/nym-node-status-client/src/lib.rs @@ -1,62 +1,35 @@ -use anyhow::{bail, Context}; -use nym_common_models::ns_api::{get_testrun, submit_results, TestrunAssignment}; +use crate::models::{get_testrun, submit_results, TestrunAssignment}; +use anyhow::bail; +use api::ApiPaths; use nym_crypto::asymmetric::ed25519::{PrivateKey, Signature}; -use std::fmt::Display; use tracing::instrument; -use crate::cli::GwProbe; +mod api; +pub mod auth; +pub mod models; -const INTERNAL_TESTRUNS: &str = "internal/testruns"; - -pub(crate) async fn run_probe( - server_ip: &str, - server_port: u16, - ns_api_auth_key: &str, - probe_path: &str, -) -> anyhow::Result<()> { - let auth_key = PrivateKey::from_base58_string(ns_api_auth_key) - .context("Couldn't parse auth key, exiting")?; - let ns_api_client = Client::new(server_ip, server_port, auth_key); - - let probe = GwProbe::new(probe_path.to_string()); - - let version = probe.version().await; - tracing::info!("Probe version:\n{}", version); - - if let Some(testrun) = ns_api_client.request_testrun().await? { - let log = probe.run_and_get_log(&Some(testrun.gateway_identity_key)); - - ns_api_client - .submit_results(testrun.testrun_id, log, testrun.assigned_at_utc) - .await?; - } else { - tracing::info!("No testruns available, exiting") - } - - Ok(()) -} - -struct Client { - server_address: String, +pub struct NsApiClient { + api: ApiPaths, client: reqwest::Client, auth_key: PrivateKey, } -impl Client { +impl NsApiClient { pub fn new(server_ip: &str, server_port: u16, auth_key: PrivateKey) -> Self { let server_address = format!("{}:{}", server_ip, server_port); + let api = ApiPaths::new(server_address); let client = reqwest::Client::new(); Self { - server_address, + api, client, auth_key, } } #[instrument(level = "debug", skip_all)] - pub(crate) async fn request_testrun(&self) -> anyhow::Result> { - let target_url = self.api_with_subpath(None::); + pub async fn request_testrun(&self) -> anyhow::Result> { + let target_url = self.api.request_testrun(); let payload = get_testrun::Payload { agent_public_key: self.auth_key.public_key(), @@ -93,13 +66,13 @@ impl Client { } #[instrument(level = "debug", skip(self, probe_result))] - pub(crate) async fn submit_results( + pub async fn submit_results( &self, testrun_id: i64, probe_result: String, assigned_at_utc: i64, ) -> anyhow::Result<()> { - let target_url = self.api_with_subpath(Some(testrun_id)); + let target_url = self.api.submit_results(testrun_id); let payload = submit_results::Payload { probe_result, @@ -129,12 +102,4 @@ impl Client { let signed = self.auth_key.sign(&serialized); Ok(signed) } - - fn api_with_subpath(&self, subpath: Option) -> String { - if let Some(subpath) = subpath { - format!("{}/{}/{}", self.server_address, INTERNAL_TESTRUNS, subpath) - } else { - format!("{}/{}", self.server_address, INTERNAL_TESTRUNS) - } - } } diff --git a/common/models/src/ns_api.rs b/nym-node-status-api/nym-node-status-client/src/models.rs similarity index 67% rename from common/models/src/ns_api.rs rename to nym-node-status-api/nym-node-status-client/src/models.rs index 6f4b00a888..05860259ba 100644 --- a/common/models/src/ns_api.rs +++ b/nym-node-status-api/nym-node-status-client/src/models.rs @@ -1,7 +1,9 @@ -use nym_crypto::asymmetric::ed25519::{PublicKey, Signature, SignatureError}; +use nym_crypto::asymmetric::ed25519::{PublicKey, Signature}; use serde::{Deserialize, Serialize}; pub mod get_testrun { + use crate::auth::SignedRequest; + use super::*; #[derive(Debug, Clone, Deserialize, Serialize)] pub struct Payload { @@ -40,6 +42,8 @@ pub struct TestrunAssignment { } pub mod submit_results { + use crate::auth::SignedRequest; + use super::*; #[derive(Debug, Clone, Deserialize, Serialize)] pub struct Payload { @@ -70,32 +74,3 @@ pub mod submit_results { } } } - -pub trait SignedRequest { - type Payload: serde::Serialize; - - fn public_key(&self) -> &PublicKey; - fn signature(&self) -> &Signature; - fn payload(&self) -> &Self::Payload; -} - -pub trait VerifiableRequest: SignedRequest { - type Error: From + From; - - fn verify_signature(&self) -> Result<(), Self::Error> { - bincode::serialize(self.payload()) - .map_err(Self::Error::from) - .and_then(|serialized| { - self.public_key() - .verify(serialized, self.signature()) - .map_err(Self::Error::from) - }) - } -} - -impl VerifiableRequest for T -where - T: SignedRequest, -{ - type Error = anyhow::Error; -}