From af99bba1ea96a1230b3cf5442e8063c7e91d4af6 Mon Sep 17 00:00:00 2001 From: Nikola Milosavljevic <73236646+NikolaMilosa@users.noreply.github.com> Date: Thu, 25 Jul 2024 11:50:26 +0200 Subject: [PATCH] fix(dre): revert separating lib from canisters (#660) Co-authored-by: sa-github-api <138766536+sa-github-api@users.noreply.github.com> --- Cargo.Bazel.lock | 129 +++++++----------- Cargo.lock | 79 ++++++++--- Cargo.toml | 9 +- bazel/external_crates.bzl | 1 - rs/cli/BUILD.bazel | 2 +- rs/dre-canisters/frontendapp | 1 - .../BUILD.bazel | 16 --- .../trustworthy-node-metrics-types/Cargo.toml | 24 ---- .../trustworthy-node-metrics-types/src/lib.rs | 1 - .../src/types.rs | 76 ----------- .../src/trustworthy-node-metrics/BUILD.bazel | 16 +++ .../src/trustworthy-node-metrics/Cargo.toml | 11 +- .../src/trustworthy-node-metrics/src/lib.rs | 3 +- .../src/metrics_manager.rs | 30 +++- .../src/stable_memory.rs | 19 ++- .../src/trustworthy-node-metrics/src/types.rs | 36 +++++ rs/ic-canisters/BUILD.bazel | 2 +- rs/ic-canisters/Cargo.toml | 2 +- rs/ic-canisters/src/management.rs | 4 +- rs/ic-canisters/src/node_metrics.rs | 2 +- 20 files changed, 224 insertions(+), 239 deletions(-) delete mode 160000 rs/dre-canisters/frontendapp delete mode 100644 rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/BUILD.bazel delete mode 100644 rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/Cargo.toml delete mode 100644 rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/src/lib.rs delete mode 100644 rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/src/types.rs create mode 100644 rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/types.rs diff --git a/Cargo.Bazel.lock b/Cargo.Bazel.lock index 79cced863..b8a2d11c4 100644 --- a/Cargo.Bazel.lock +++ b/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "0a147d75b6943fe7fce1c7d185a8c1576d83eebf42e9e15a9f046cae1ff72dbb", + "checksum": "122ae00e2b90aff46a0aaf1e6e2d80c5729af927eb65d305a5e598b381eed7b1", "crates": { "actix-codec 0.5.2": { "name": "actix-codec", @@ -17632,9 +17632,12 @@ "name": "ic-cdk", "version": "0.15.0", "repository": { - "Http": { - "url": "https://static.crates.io/crates/ic-cdk/0.15.0/download", - "sha256": "0c44983d6e97135d86132111bae5b86c34c498d96b4f182638bebcc7ac07e03c" + "Git": { + "remote": "https://github.com/dfinity/cdk-rs.git", + "commitish": { + "Rev": "59795716487fbb8a9910ac503bcea1e0cb08c932" + }, + "strip_prefix": "src/ic-cdk" } }, "targets": [ @@ -17751,9 +17754,12 @@ "name": "ic-cdk-macros", "version": "0.15.0", "repository": { - "Http": { - "url": "https://static.crates.io/crates/ic-cdk-macros/0.15.0/download", - "sha256": "3af44fb4ec3a4b18831c9d3303ca8fa2ace846c4022d50cb8df4122635d3782e" + "Git": { + "remote": "https://github.com/dfinity/cdk-rs.git", + "commitish": { + "Rev": "59795716487fbb8a9910ac503bcea1e0cb08c932" + }, + "strip_prefix": "src/ic-cdk-macros" } }, "targets": [ @@ -17928,9 +17934,12 @@ "name": "ic-cdk-timers", "version": "0.9.0", "repository": { - "Http": { - "url": "https://static.crates.io/crates/ic-cdk-timers/0.9.0/download", - "sha256": "61fdca8e1d9ffb65ae68019b342c182009de9dc206fd849db0b0e90ee19f6fa4" + "Git": { + "remote": "https://github.com/dfinity/cdk-rs.git", + "commitish": { + "Rev": "59795716487fbb8a9910ac503bcea1e0cb08c932" + }, + "strip_prefix": "src/ic-cdk-timers" } }, "targets": [ @@ -26138,9 +26147,12 @@ "name": "ic0", "version": "0.23.0", "repository": { - "Http": { - "url": "https://static.crates.io/crates/ic0/0.23.0/download", - "sha256": "8de254dd67bbd58073e23dc1c8553ba12fa1dc610a19de94ad2bbcd0460c067f" + "Git": { + "remote": "https://github.com/dfinity/cdk-rs.git", + "commitish": { + "Rev": "59795716487fbb8a9910ac503bcea1e0cb08c932" + }, + "strip_prefix": "src/ic0" } }, "targets": [ @@ -45872,8 +45884,18 @@ "name": "trustworthy-node-metrics", "version": "0.4.3", "repository": null, - "targets": [], - "library_target_name": null, + "targets": [ + { + "Library": { + "crate_name": "trustworthy_node_metrics", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "trustworthy_node_metrics", "common_attrs": { "compile_data_glob": [ "**" @@ -45888,6 +45910,10 @@ "id": "candid 0.10.9", "target": "candid" }, + { + "id": "ciborium 0.2.2", + "target": "ciborium" + }, { "id": "dfn_core 0.9.0", "target": "dfn_core" @@ -45935,6 +45961,14 @@ { "id": "prost 0.12.6", "target": "prost" + }, + { + "id": "serde 1.0.204", + "target": "serde" + }, + { + "id": "serde_json 1.0.120", + "target": "serde_json" } ], "selects": {} @@ -45953,68 +45987,6 @@ }, "license": null }, - "trustworthy-node-metrics-types 0.4.3": { - "name": "trustworthy-node-metrics-types", - "version": "0.4.3", - "repository": null, - "targets": [ - { - "Library": { - "crate_name": "trustworthy_node_metrics_types", - "crate_root": "src/lib.rs", - "srcs": [ - "**/*.rs" - ] - } - } - ], - "library_target_name": "trustworthy_node_metrics_types", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "candid 0.10.9", - "target": "candid" - }, - { - "id": "ciborium 0.2.2", - "target": "ciborium" - }, - { - "id": "dfn_core 0.9.0", - "target": "dfn_core" - }, - { - "id": "ic-management-canister-types 0.9.0", - "target": "ic_management_canister_types" - }, - { - "id": "ic-stable-structures 0.6.5", - "target": "ic_stable_structures" - }, - { - "id": "itertools 0.13.0", - "target": "itertools" - }, - { - "id": "serde 1.0.204", - "target": "serde" - }, - { - "id": "serde_json 1.0.120", - "target": "serde_json" - } - ], - "selects": {} - }, - "edition": "2021", - "version": "0.4.3" - }, - "license": null - }, "try-lock 0.2.5": { "name": "try-lock", "version": "0.2.5", @@ -50390,8 +50362,7 @@ "service-discovery 0.4.3": "rs/ic-observability/service-discovery", "slack-notifications 0.4.3": "rs/slack-notifications", "sns-downloader 0.4.3": "rs/ic-observability/sns-downloader", - "trustworthy-node-metrics 0.4.3": "rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics", - "trustworthy-node-metrics-types 0.4.3": "rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types" + "trustworthy-node-metrics 0.4.3": "rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics" }, "conditions": { "aarch64-apple-darwin": [ diff --git a/Cargo.lock b/Cargo.lock index 8dc66da47..a17fdbaf3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1133,6 +1133,29 @@ dependencies = [ "serde", ] +[[package]] +name = "canbench-rs" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53574f268dbe23dc83f891a4751b118a6ba927c8bc92e839ff108f3aaf151aa9" +dependencies = [ + "canbench-rs-macros", + "candid", + "ic-cdk 0.12.1", + "serde", +] + +[[package]] +name = "canbench-rs-macros" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d454906c77138a3802a7a680259cca7c006e9b268ba6905f7f4f2b8b74293fa4" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "candid" version = "0.10.9" @@ -3451,7 +3474,7 @@ dependencies = [ "sha2 0.10.8", "simple_asn1", "thiserror", - "trustworthy-node-metrics-types", + "trustworthy-node-metrics", "url", ] @@ -3501,6 +3524,19 @@ dependencies = [ "thiserror", ] +[[package]] +name = "ic-cdk" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f3d204af0b11c45715169c997858edb58fa8407d08f4fae78a6b415dd39a362" +dependencies = [ + "candid", + "ic-cdk-macros 0.8.4", + "ic0 0.21.1", + "serde", + "serde_bytes", +] + [[package]] name = "ic-cdk" version = "0.13.2" @@ -3517,8 +3553,7 @@ dependencies = [ [[package]] name = "ic-cdk" version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c44983d6e97135d86132111bae5b86c34c498d96b4f182638bebcc7ac07e03c" +source = "git+https://github.com/dfinity/cdk-rs.git?rev=59795716487fbb8a9910ac503bcea1e0cb08c932#59795716487fbb8a9910ac503bcea1e0cb08c932" dependencies = [ "candid", "ic-cdk-macros 0.15.0", @@ -3527,6 +3562,20 @@ dependencies = [ "serde_bytes", ] +[[package]] +name = "ic-cdk-macros" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5a618e4020cea88e933d8d2f8c7f86d570ec06213506a80d4f2c520a9bba512" +dependencies = [ + "candid", + "proc-macro2", + "quote", + "serde", + "serde_tokenstream 0.1.7", + "syn 1.0.109", +] + [[package]] name = "ic-cdk-macros" version = "0.9.0" @@ -3558,8 +3607,7 @@ dependencies = [ [[package]] name = "ic-cdk-macros" version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3af44fb4ec3a4b18831c9d3303ca8fa2ace846c4022d50cb8df4122635d3782e" +source = "git+https://github.com/dfinity/cdk-rs.git?rev=59795716487fbb8a9910ac503bcea1e0cb08c932#59795716487fbb8a9910ac503bcea1e0cb08c932" dependencies = [ "candid", "proc-macro2", @@ -3586,8 +3634,7 @@ dependencies = [ [[package]] name = "ic-cdk-timers" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61fdca8e1d9ffb65ae68019b342c182009de9dc206fd849db0b0e90ee19f6fa4" +source = "git+https://github.com/dfinity/cdk-rs.git?rev=59795716487fbb8a9910ac503bcea1e0cb08c932#59795716487fbb8a9910ac503bcea1e0cb08c932" dependencies = [ "futures", "ic-cdk 0.15.0", @@ -5297,8 +5344,7 @@ checksum = "a54b5297861c651551676e8c43df805dad175cc33bc97dbd992edbbb85dcbcdf" [[package]] name = "ic0" version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de254dd67bbd58073e23dc1c8553ba12fa1dc610a19de94ad2bbcd0460c067f" +source = "git+https://github.com/dfinity/cdk-rs.git?rev=59795716487fbb8a9910ac503bcea1e0cb08c932#59795716487fbb8a9910ac503bcea1e0cb08c932" [[package]] name = "ic_bls12_381" @@ -9120,7 +9166,9 @@ name = "trustworthy-node-metrics" version = "0.4.3" dependencies = [ "anyhow", + "canbench-rs", "candid", + "ciborium", "dfn_core", "futures", "ic-cdk 0.15.0", @@ -9134,19 +9182,6 @@ dependencies = [ "ic-stable-structures", "itertools 0.13.0", "prost", - "trustworthy-node-metrics-types", -] - -[[package]] -name = "trustworthy-node-metrics-types" -version = "0.4.3" -dependencies = [ - "candid", - "ciborium", - "dfn_core", - "ic-management-canister-types", - "ic-stable-structures", - "itertools 0.13.0", "serde", "serde_json", ] diff --git a/Cargo.toml b/Cargo.toml index 39075a4de..09ebed263 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,6 @@ members = [ "rs/slack-notifications", "rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics", "rs/qualifier", - "rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types", ] resolver = "2" @@ -76,7 +75,7 @@ cryptoki = "0.3.1" csv = "1.3.0" custom_error = "1.9.2" decentralization = { path = "rs/decentralization" } -trustworthy-node-metrics-types = { path = "rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types" } +trustworthy-node-metrics = { path = "rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics" } derive_builder = "0.20.0" derive_more = "0.99.18" dialoguer = "0.11.0" @@ -111,7 +110,7 @@ ic-canister-client = { git = "https://github.com/dfinity/ic.git", rev = "5ba1412 ic-canister-client-sender = { git = "https://github.com/dfinity/ic.git", rev = "5ba1412f9175d987661ae3c0d8dbd1ac3e092b7d" } ic-canisters = { path = "rs/ic-canisters" } ic-nervous-system-common-test-keys = { git = "https://github.com/dfinity/ic.git", rev = "5ba1412f9175d987661ae3c0d8dbd1ac3e092b7d" } -ic-cdk = "0.15.0" +ic-cdk = { git = "https://github.com/dfinity/cdk-rs.git", rev = "59795716487fbb8a9910ac503bcea1e0cb08c932" } ic-config = { git = "https://github.com/dfinity/ic.git", rev = "5ba1412f9175d987661ae3c0d8dbd1ac3e092b7d" } ic-crypto-utils-threshold-sig-der = { git = "https://github.com/dfinity/ic.git", rev = "5ba1412f9175d987661ae3c0d8dbd1ac3e092b7d" } ic-http-endpoints-metrics = { git = "https://github.com/dfinity/ic.git", rev = "5ba1412f9175d987661ae3c0d8dbd1ac3e092b7d" } @@ -199,8 +198,8 @@ warp = "0.3" wiremock = "0.6.0" # dre-canisters dependencies -ic-cdk-timers = "0.9" # Feel free to remove this dependency if you don't need timers -ic-cdk-macros = "0.15.0" +ic-cdk-timers = { git = "https://github.com/dfinity/cdk-rs.git", rev = "59795716487fbb8a9910ac503bcea1e0cb08c932" } +ic-cdk-macros = { git = "https://github.com/dfinity/cdk-rs.git", rev = "59795716487fbb8a9910ac503bcea1e0cb08c932" } ic-stable-structures = "0.6.5" ciborium = "0.2.1" dfn_core = { git = "https://github.com/dfinity/ic.git", rev = "5ba1412f9175d987661ae3c0d8dbd1ac3e092b7d" } diff --git a/bazel/external_crates.bzl b/bazel/external_crates.bzl index 1d444aee4..1e56c211c 100644 --- a/bazel/external_crates.bzl +++ b/bazel/external_crates.bzl @@ -67,7 +67,6 @@ def external_crates_repository(): "//rs/rollout-controller:Cargo.toml", "//rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics:Cargo.toml", "//rs/qualifier:Cargo.toml", - "//rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types:Cargo.toml", ], splicing_config = splicing_config( resolver_version = "2", diff --git a/rs/cli/BUILD.bazel b/rs/cli/BUILD.bazel index 45844887d..1f7494bcd 100644 --- a/rs/cli/BUILD.bazel +++ b/rs/cli/BUILD.bazel @@ -7,7 +7,7 @@ DEPS = [ "//rs/decentralization", "//rs/ic-management-types", "//rs/ic-management-backend:ic-management-backend-lib", - "//rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types:trustworthy_node_metrics_types" + "//rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics:trustworthy_node_metrics" ] package(default_visibility = ["//visibility:public"]) diff --git a/rs/dre-canisters/frontendapp b/rs/dre-canisters/frontendapp deleted file mode 160000 index 7d266f7a8..000000000 --- a/rs/dre-canisters/frontendapp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7d266f7a869a2833b6e2226bbae23f650eb3d117 diff --git a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/BUILD.bazel b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/BUILD.bazel deleted file mode 100644 index 08c278a93..000000000 --- a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -load("@crate_index_dre//:defs.bzl", "aliases", "all_crate_deps") -load("@rules_rust//rust:defs.bzl", "rust_library") - -package(default_visibility = ["//visibility:public"]) - -rust_library( - name = "trustworthy_node_metrics_types", - srcs = glob(["src/**/*.rs"]), - aliases = aliases(), - proc_macro_deps = all_crate_deps( - proc_macro = True, - ), - deps = all_crate_deps( - normal = True, - ), -) diff --git a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/Cargo.toml b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/Cargo.toml deleted file mode 100644 index 79bebdf66..000000000 --- a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/Cargo.toml +++ /dev/null @@ -1,24 +0,0 @@ -[package] -name = "trustworthy-node-metrics-types" -version.workspace = true -authors.workspace = true -edition.workspace = true -description.workspace = true -documentation.workspace = true - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[lib] -crate-type = ["lib"] -name = "trustworthy_node_metrics_types" -path = "src/lib.rs" - -[dependencies] -candid = { workspace = true } -serde = { workspace = true } -itertools = { workspace = true } -serde_json = { workspace = true } -dfn_core = { workspace = true } -ic-management-canister-types = { workspace = true } -ciborium = { workspace = true } -ic-stable-structures = { workspace = true } diff --git a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/src/lib.rs b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/src/lib.rs deleted file mode 100644 index cd408564e..000000000 --- a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod types; diff --git a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/src/types.rs b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/src/types.rs deleted file mode 100644 index d15b66068..000000000 --- a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types/src/types.rs +++ /dev/null @@ -1,76 +0,0 @@ -use std::borrow::Cow; - -use candid::{CandidType, Deserialize, Principal}; -use dfn_core::api::PrincipalId; -use ic_management_canister_types::NodeMetrics as ICManagementNodeMetrics; -use ic_management_canister_types::NodeMetricsHistoryResponse; -use ic_stable_structures::{storable::Bound, Storable}; -use itertools::Itertools; -use serde::Serialize; - -pub type TimestampNanos = u64; -pub type PrincipalNodeMetricsHistory = (PrincipalId, Vec); - -#[derive(Debug, Deserialize, Serialize, CandidType)] -pub struct NodeMetrics { - pub node_id: Principal, - pub num_blocks_proposed_total: u64, - pub num_block_failures_total: u64, -} - -impl From for NodeMetrics { - fn from(node_metrics: ICManagementNodeMetrics) -> Self { - Self { - node_id: node_metrics.node_id.0, - num_block_failures_total: node_metrics.num_block_failures_total, - num_blocks_proposed_total: node_metrics.num_blocks_proposed_total, - } - } -} - -#[derive(Deserialize, Serialize, CandidType)] -pub struct SubnetNodeMetrics { - pub subnet_id: Principal, - pub node_metrics: Vec, -} - -impl SubnetNodeMetrics { - pub fn new(subnet_id: PrincipalId, subnet_metrics: Vec) -> Self { - let node_metrics = subnet_metrics.into_iter().map(|node_metrics| node_metrics.into()).collect_vec(); - - Self { - subnet_id: subnet_id.0, - node_metrics, - } - } -} - -#[derive(Deserialize, Serialize)] -pub struct SubnetNodeMetricsStorable(pub Vec); - -impl Storable for SubnetNodeMetricsStorable { - fn to_bytes(&self) -> Cow<[u8]> { - let mut buf = vec![]; - ciborium::ser::into_writer(self, &mut buf).expect("failed to encode SubnetsMetricsStorable"); - Cow::Owned(buf) - } - - fn from_bytes(bytes: Cow<'_, [u8]>) -> Self { - ciborium::de::from_reader(&bytes[..]).expect("failed to decode SubnetsMetricsStorable") - } - - const BOUND: Bound = Bound::Unbounded; -} - -#[derive(Debug, Deserialize, CandidType)] -pub struct SubnetNodeMetricsResponse { - pub ts: u64, - pub subnet_id: Principal, - pub node_metrics: Vec, -} - -#[derive(Deserialize, CandidType)] -pub struct SubnetNodeMetricsArgs { - pub ts: Option, - pub subnet_id: Option, -} diff --git a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/BUILD.bazel b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/BUILD.bazel index e69de29bb..54894d6df 100644 --- a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/BUILD.bazel +++ b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/BUILD.bazel @@ -0,0 +1,16 @@ +load("@crate_index_dre//:defs.bzl", "aliases", "all_crate_deps") +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "trustworthy_node_metrics", + srcs = glob(["src/**/*.rs"]), + aliases = aliases(), + proc_macro_deps = all_crate_deps( + proc_macro = True, + ), + deps = all_crate_deps( + normal = True, + ), +) diff --git a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/Cargo.toml b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/Cargo.toml index 1e4d5ca5d..dd4c49695 100644 --- a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/Cargo.toml +++ b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/Cargo.toml @@ -9,7 +9,9 @@ documentation.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] -crate-type = ["cdylib"] +crate-type = ["cdylib", "lib"] +name = "trustworthy_node_metrics" +path = "src/lib.rs" [dependencies] candid = { workspace = true } @@ -17,14 +19,17 @@ ic-cdk = { workspace = true } ic-cdk-timers = { workspace = true } ic-cdk-macros = { workspace = true } ic-stable-structures = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } prost = { workspace = true } itertools = { workspace = true } futures = { workspace = true } anyhow = { workspace = true } +ciborium = { workspace = true } +ic-management-canister-types = { workspace = true } ic-protobuf = { workspace = true } ic-nns-constants = { workspace = true } ic-nns-common = { workspace = true } ic-registry-transport = { workspace = true } dfn_core = { workspace = true } -trustworthy-node-metrics-types = { workspace = true } -ic-management-canister-types = { workspace = true } +canbench-rs = { version = "0.1.4", optional = true } diff --git a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/lib.rs b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/lib.rs index bf493da34..557c34c05 100644 --- a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/lib.rs +++ b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/lib.rs @@ -1,9 +1,10 @@ use ic_cdk_macros::*; use itertools::Itertools; use std::time::Duration; -use trustworthy_node_metrics_types::types::{SubnetNodeMetricsArgs, SubnetNodeMetricsResponse}; +use types::{SubnetNodeMetricsArgs, SubnetNodeMetricsResponse}; mod metrics_manager; mod stable_memory; +pub mod types; // Management canisters updates node metrics every day const TIMER_INTERVAL_SEC: u64 = 60 * 60 * 24; diff --git a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/metrics_manager.rs b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/metrics_manager.rs index 39b0e23cb..5f638375e 100644 --- a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/metrics_manager.rs +++ b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/metrics_manager.rs @@ -3,12 +3,36 @@ use std::collections::{btree_map::Entry, BTreeMap}; use anyhow::Ok; use dfn_core::api::PrincipalId; use futures::FutureExt; - +use ic_management_canister_types::NodeMetrics as ICManagementNodeMetrics; use ic_management_canister_types::{NodeMetricsHistoryArgs, NodeMetricsHistoryResponse}; use ic_protobuf::registry::subnet::v1::SubnetListRecord; -use trustworthy_node_metrics_types::types::{PrincipalNodeMetricsHistory, SubnetNodeMetrics, TimestampNanos}; +use itertools::Itertools; + +use crate::{ + stable_memory, + types::{NodeMetrics, PrincipalNodeMetricsHistory, SubnetNodeMetrics, TimestampNanos}, +}; + +impl SubnetNodeMetrics { + pub fn new(subnet_id: PrincipalId, subnet_metrics: Vec) -> Self { + let node_metrics = subnet_metrics.into_iter().map(|node_metrics| node_metrics.into()).collect_vec(); + + Self { + subnet_id: subnet_id.0, + node_metrics, + } + } +} -use crate::stable_memory; +impl From for NodeMetrics { + fn from(node_metrics: ICManagementNodeMetrics) -> Self { + Self { + node_id: node_metrics.node_id.0, + num_block_failures_total: node_metrics.num_block_failures_total, + num_blocks_proposed_total: node_metrics.num_blocks_proposed_total, + } + } +} fn store_results(results: BTreeMap>) { for (timestamp, storable) in results { diff --git a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/stable_memory.rs b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/stable_memory.rs index 40910cdd1..e93e6edb4 100644 --- a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/stable_memory.rs +++ b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/stable_memory.rs @@ -1,7 +1,24 @@ +use ic_stable_structures::{storable::Bound, Storable}; use ic_stable_structures::{DefaultMemoryImpl, StableBTreeMap}; use itertools::Itertools; +use std::borrow::Cow; use std::cell::RefCell; -use trustworthy_node_metrics_types::types::{SubnetNodeMetrics, SubnetNodeMetricsStorable, TimestampNanos}; + +use crate::types::{SubnetNodeMetrics, SubnetNodeMetricsStorable, TimestampNanos}; + +impl Storable for SubnetNodeMetricsStorable { + fn to_bytes(&self) -> Cow<[u8]> { + let mut buf = vec![]; + ciborium::ser::into_writer(self, &mut buf).expect("failed to encode SubnetsMetricsStorable"); + Cow::Owned(buf) + } + + fn from_bytes(bytes: Cow<'_, [u8]>) -> Self { + ciborium::de::from_reader(&bytes[..]).expect("failed to decode SubnetsMetricsStorable") + } + + const BOUND: Bound = Bound::Unbounded; +} thread_local! { pub static MAP: RefCell> = diff --git a/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/types.rs b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/types.rs new file mode 100644 index 000000000..b02492eb9 --- /dev/null +++ b/rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics/src/types.rs @@ -0,0 +1,36 @@ +use candid::{CandidType, Deserialize, Principal}; +use dfn_core::api::PrincipalId; +use ic_management_canister_types::NodeMetricsHistoryResponse; +use serde::Serialize; + +pub type TimestampNanos = u64; +pub type PrincipalNodeMetricsHistory = (PrincipalId, Vec); + +#[derive(Debug, Deserialize, Serialize, CandidType)] +pub struct NodeMetrics { + pub node_id: Principal, + pub num_blocks_proposed_total: u64, + pub num_block_failures_total: u64, +} + +#[derive(Deserialize, Serialize, CandidType)] +pub struct SubnetNodeMetrics { + pub subnet_id: Principal, + pub node_metrics: Vec, +} + +#[derive(Deserialize, Serialize)] +pub struct SubnetNodeMetricsStorable(pub Vec); + +#[derive(Debug, Deserialize, CandidType)] +pub struct SubnetNodeMetricsResponse { + pub ts: u64, + pub subnet_id: Principal, + pub node_metrics: Vec, +} + +#[derive(Deserialize, CandidType)] +pub struct SubnetNodeMetricsArgs { + pub ts: Option, + pub subnet_id: Option, +} diff --git a/rs/ic-canisters/BUILD.bazel b/rs/ic-canisters/BUILD.bazel index 92cf88520..28ec9d55b 100644 --- a/rs/ic-canisters/BUILD.bazel +++ b/rs/ic-canisters/BUILD.bazel @@ -4,7 +4,7 @@ load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") package(default_visibility = ["//visibility:public"]) DEPS = [ - "//rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics-types:trustworthy_node_metrics_types" + "//rs/dre-canisters/trustworthy-node-metrics/src/trustworthy-node-metrics:trustworthy_node_metrics" ] rust_library( diff --git a/rs/ic-canisters/Cargo.toml b/rs/ic-canisters/Cargo.toml index 84a680753..b0f110637 100644 --- a/rs/ic-canisters/Cargo.toml +++ b/rs/ic-canisters/Cargo.toml @@ -33,4 +33,4 @@ simple_asn1 = { workspace = true } thiserror = { workspace = true } url = { workspace = true } ic-sns-wasm = { workspace = true } -trustworthy-node-metrics-types = { workspace = true } +trustworthy-node-metrics = { workspace = true } diff --git a/rs/ic-canisters/src/management.rs b/rs/ic-canisters/src/management.rs index 3bf0b036f..9d467746c 100644 --- a/rs/ic-canisters/src/management.rs +++ b/rs/ic-canisters/src/management.rs @@ -86,8 +86,8 @@ pub struct NodeMetrics { pub num_block_failures_total: u64, } -impl From for NodeMetrics { - fn from(value: trustworthy_node_metrics_types::types::NodeMetrics) -> Self { +impl From for NodeMetrics { + fn from(value: trustworthy_node_metrics::types::NodeMetrics) -> Self { Self { node_id: PrincipalId::from(value.node_id), num_block_failures_total: value.num_block_failures_total, diff --git a/rs/ic-canisters/src/node_metrics.rs b/rs/ic-canisters/src/node_metrics.rs index 59fdf054f..69b415a1b 100644 --- a/rs/ic-canisters/src/node_metrics.rs +++ b/rs/ic-canisters/src/node_metrics.rs @@ -4,7 +4,7 @@ use candid::{Decode, Encode}; use ic_agent::Agent; use ic_base_types::{CanisterId, PrincipalId}; use log::error; -use trustworthy_node_metrics_types::types::{SubnetNodeMetricsArgs, SubnetNodeMetricsResponse}; +use trustworthy_node_metrics::types::{SubnetNodeMetricsArgs, SubnetNodeMetricsResponse}; use crate::IcAgentCanisterClient;