openmina_node_common/service/rpc/
stats.rs1#[cfg(target_family = "wasm")]
2use gloo_utils::format::JsValueSerdeExt;
3#[cfg(target_family = "wasm")]
4use node::rpc::*;
5#[cfg(target_family = "wasm")]
6use wasm_bindgen::prelude::*;
7
8use super::RpcSender;
9
10#[derive(Clone)]
11#[cfg_attr(target_family = "wasm", wasm_bindgen)]
12pub struct Stats {
13 #[allow(unused)]
14 sender: RpcSender,
15}
16
17impl Stats {
18 pub fn new(sender: RpcSender) -> Self {
19 Self { sender }
20 }
21}
22
23#[cfg(target_family = "wasm")]
24#[cfg_attr(target_family = "wasm", wasm_bindgen)]
25impl Stats {
26 pub async fn actions(&self, id: JsValue) -> Result<JsValue, JsValue> {
27 let query = if id.is_falsy() {
28 ActionStatsQuery::SinceStart
29 } else if id.as_string().is_some_and(|s| s == "latest") {
30 ActionStatsQuery::ForLatestBlock
31 } else {
32 let id = id.into_serde().map_err(|err| err.to_string())?;
33 ActionStatsQuery::ForBlockWithId(id)
34 };
35
36 let res = self
37 .sender
38 .oneshot_request::<RpcActionStatsGetResponse>(RpcRequest::ActionStatsGet(query))
39 .await
40 .flatten();
41 Ok(JsValue::from_serde(&res).unwrap_or_default())
42 }
43
44 pub async fn sync(&self, limit: Option<usize>) -> JsValue {
45 let query = SyncStatsQuery { limit };
46 let res = self
47 .sender
48 .oneshot_request::<RpcSyncStatsGetResponse>(RpcRequest::SyncStatsGet(query))
49 .await
50 .flatten();
51 JsValue::from_serde(&res).unwrap_or_default()
52 }
53
54 pub async fn block_producer(&self) -> JsValue {
55 let res = self
56 .sender
57 .oneshot_request::<RpcBlockProducerStatsGetResponse>(RpcRequest::BlockProducerStatsGet)
58 .await
59 .flatten();
60 JsValue::from_serde(&res).unwrap_or_default()
61 }
62}