Skip to content

Commit 48f5a14

Browse files
committed
Remove getMetrics endpoint
1 parent 08fca95 commit 48f5a14

File tree

7 files changed

+141
-205
lines changed

7 files changed

+141
-205
lines changed

Cargo.lock

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ evm_rpc_client = { path = "evm_rpc_client" }
6060
ic-crypto-test-utils-reproducible-rng = { git = "https://github.com/dfinity/ic", rev = "release-2024-09-26_01-31-base" }
6161
ic-error-types = { workspace = true }
6262
ic-management-canister-types = { workspace = true }
63+
ic-metrics-assert = { workspace = true }
6364
ic-test-utilities-load-wasm = { git = "https://github.com/dfinity/ic", rev = "release-2024-09-26_01-31-base" }
6465
maplit = "1"
6566
pocket-ic = { workspace = true }
@@ -94,6 +95,7 @@ ic-cdk-macros = "0.17.2"
9495
ic-certified-map = "0.4"
9596
ic-error-types = "0.2"
9697
ic-management-canister-types = "0.3"
98+
ic-metrics-assert = { version = "0.1.1", features = ["pocket_ic"] }
9799
ic-metrics-encoder = "1.1"
98100
ic-stable-structures = "0.6.8"
99101
itertools = "0.14.0"

candid/evm_rpc.did

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,6 @@ type LogEntry = record {
138138
logIndex : opt nat;
139139
removed : bool;
140140
};
141-
type Metrics = record {
142-
requests : vec record { record { text; text }; nat64 };
143-
responses : vec record { record { text; text; text }; nat64 };
144-
inconsistentResponses : vec record { record { text; text }; nat64 };
145-
cyclesCharged : vec record { record { text; text }; nat };
146-
errHttpOutcall : vec record { record { text; text; RejectionCode }; nat64 };
147-
errMaxResponseSizeExceeded : vec record { record { text; text }; nat64 };
148-
};
149141
type MultiFeeHistoryResult = variant {
150142
Consistent : FeeHistoryResult;
151143
Inconsistent : vec record { RpcService; FeeHistoryResult };
@@ -312,10 +304,7 @@ service : (InstallArgs) -> {
312304
eth_call : (RpcServices, opt RpcConfig, CallArgs) -> (MultiCallResult);
313305
request : (RpcService, json : text, maxResponseBytes : nat64) -> (RequestResult);
314306
requestCost : (RpcService, json : text, maxResponseBytes : nat64) -> (RequestCostResult) query;
315-
316-
// DEBUG endpoint to retrieve metrics accumulated by the EVM RPC canister.
317-
// NOTE: this method exists for debugging purposes, backward compatibility is not guaranteed.
318-
getMetrics : () -> (Metrics) query;
307+
319308
getNodesInSubnet : () -> (numberOfNodes : nat32) query;
320309
getProviders : () -> (vec Provider) query;
321310
getServiceProviderMap : () -> (vec record { RpcService; ProviderId }) query;

src/main.rs

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
use candid::candid_method;
2-
use canhttp::multi::Timestamp;
3-
use canhttp::{CyclesChargingPolicy, CyclesCostEstimator};
2+
use canhttp::{multi::Timestamp, CyclesChargingPolicy, CyclesCostEstimator};
43
use canlog::{Log, Sort};
5-
use evm_rpc::candid_rpc::CandidRpcClient;
6-
use evm_rpc::http::{service_request_builder, ChargingPolicyWithCollateral};
7-
use evm_rpc::logs::{Priority, INFO};
8-
use evm_rpc::memory::{
9-
get_num_subnet_nodes, insert_api_key, is_api_key_principal, is_demo_active, remove_api_key,
10-
set_api_key_principals, set_demo_active, set_log_filter, set_num_subnet_nodes,
11-
set_override_provider,
12-
};
13-
use evm_rpc::metrics::encode_metrics;
14-
use evm_rpc::providers::{find_provider, resolve_rpc_service, PROVIDERS, SERVICE_PROVIDER_MAP};
15-
use evm_rpc::types::{OverrideProvider, Provider, ProviderId, RpcAccess, RpcAuth};
164
use evm_rpc::{
17-
http::{json_rpc_request, json_rpc_request_arg, transform_http_request},
18-
memory::UNSTABLE_METRICS,
19-
types::Metrics,
5+
candid_rpc::CandidRpcClient,
6+
http::{
7+
json_rpc_request, json_rpc_request_arg, service_request_builder, transform_http_request,
8+
ChargingPolicyWithCollateral,
9+
},
10+
logs::{Priority, INFO},
11+
memory::{
12+
get_num_subnet_nodes, insert_api_key, is_api_key_principal, is_demo_active, remove_api_key,
13+
set_api_key_principals, set_demo_active, set_log_filter, set_num_subnet_nodes,
14+
set_override_provider,
15+
},
16+
metrics::encode_metrics,
17+
providers::{find_provider, resolve_rpc_service, PROVIDERS, SERVICE_PROVIDER_MAP},
18+
types::{OverrideProvider, Provider, ProviderId, RpcAccess, RpcAuth},
2019
};
2120
use evm_rpc_types::{Hex32, HttpOutcallError, MultiRpcResult, RpcConfig, RpcResult};
2221
use ic_canister_log::log;
@@ -406,12 +405,6 @@ fn http_request(request: HttpRequest) -> HttpResponse {
406405
}
407406
}
408407

409-
#[query(name = "getMetrics")]
410-
#[candid_method(query, rename = "getMetrics")]
411-
fn get_metrics() -> Metrics {
412-
UNSTABLE_METRICS.with(|metrics| (*metrics.borrow()).clone())
413-
}
414-
415408
fn now() -> Timestamp {
416409
Timestamp::from_nanos_since_unix_epoch(ic_cdk::api::time())
417410
}

src/metrics.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@ pub fn encode_metrics(w: &mut ic_metrics_encoder::MetricsEncoder<Vec<u8>>) -> st
104104
&m.err_http_outcall,
105105
"Number of unsuccessful HTTP outcalls",
106106
);
107+
w.counter_entries(
108+
"evmrpc_err_max_response_size_exceeded",
109+
&m.err_max_response_size_exceeded,
110+
"Number of HTTP outcalls with max response size exceeded",
111+
);
107112

108113
Ok(())
109114
})

tests/setup/mod.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use crate::{
55
};
66
use candid::{CandidType, Decode, Encode, Nat, Principal};
77
use canlog::{Log, LogEntry};
8-
use evm_rpc::types::Metrics;
98
use evm_rpc::{
109
logs::Priority,
1110
providers::PROVIDERS,
@@ -16,6 +15,8 @@ use evm_rpc_types::{InstallArgs, Provider, RpcResult, RpcService};
1615
use ic_cdk::api::management_canister::main::CanisterId;
1716
use ic_http_types::{HttpRequest, HttpResponse};
1817
use ic_management_canister_types::CanisterSettings;
18+
use ic_metrics_assert::{MetricsAssert, PocketIcAsyncHttpQuery};
19+
use pocket_ic::nonblocking::PocketIc;
1920
use pocket_ic::{nonblocking, ErrorCode, PocketIcBuilder};
2021
use serde::de::DeserializeOwned;
2122
use std::sync::{Arc, Mutex};
@@ -169,11 +170,6 @@ impl EvmRpcSetup {
169170
.entries
170171
}
171172

172-
pub async fn get_metrics(&self) -> Metrics {
173-
self.call_query("getMetrics", Encode!().unwrap(), Principal::anonymous())
174-
.await
175-
}
176-
177173
pub async fn get_service_provider_map(&self) -> Vec<(RpcService, ProviderId)> {
178174
self.call_query(
179175
"getServiceProviderMap",
@@ -197,6 +193,10 @@ impl EvmRpcSetup {
197193
.await
198194
}
199195

196+
pub async fn check_metrics(self) -> MetricsAssert<Self> {
197+
MetricsAssert::from_async_http_query(self).await
198+
}
199+
200200
// Legacy endpoint, not supported by the `evm_rpc_client::EvmRpcClient`
201201
pub async fn request(
202202
&self,
@@ -258,3 +258,13 @@ impl EvmRpcSetup {
258258
Decode!(candid, R).expect("error while decoding Candid response from query call")
259259
}
260260
}
261+
262+
impl PocketIcAsyncHttpQuery for EvmRpcSetup {
263+
fn get_pocket_ic(&self) -> &PocketIc {
264+
&self.env
265+
}
266+
267+
fn get_canister_id(&self) -> ic_management_canister_types::CanisterId {
268+
self.canister_id
269+
}
270+
}

0 commit comments

Comments
 (0)