cometbft_rpc/endpoint/
net_info.rs1use core::{
4 fmt::{self, Display},
5 time::Duration,
6};
7use std::net::IpAddr;
8
9use cometbft::{channel::Channel, node, serializers, Time};
10use serde::{Deserialize, Serialize};
11
12use crate::prelude::*;
13use crate::{dialect::Dialect, request::RequestMessage};
14
15#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
17pub struct Request;
18
19impl RequestMessage for Request {
20 fn method(&self) -> crate::Method {
21 crate::Method::NetInfo
22 }
23}
24
25impl<S: Dialect> crate::Request<S> for Request {
26 type Response = Response;
27}
28
29impl<S: Dialect> crate::SimpleRequest<S> for Request {
30 type Output = Response;
31}
32
33#[derive(Clone, Debug, Deserialize, Serialize)]
35pub struct Response {
36 pub listening: bool,
38
39 pub listeners: Vec<Listener>,
41
42 #[serde(with = "serializers::from_str")]
44 pub n_peers: u64,
45
46 pub peers: Vec<PeerInfo>,
48}
49
50impl crate::Response for Response {}
51
52#[derive(Clone, Debug, Deserialize, Serialize)]
54pub struct Listener(String);
55
56impl Display for Listener {
57 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
58 write!(f, "{}", self.0)
59 }
60}
61
62#[derive(Clone, Debug, Deserialize, Serialize)]
64pub struct PeerInfo {
65 pub node_info: node::Info,
67
68 pub is_outbound: bool,
70
71 pub connection_status: ConnectionStatus,
73
74 pub remote_ip: IpAddr,
76}
77
78#[derive(Clone, Debug, Deserialize, Serialize)]
80pub struct ConnectionStatus {
81 #[serde(rename = "Duration", with = "serializers::time_duration")]
83 pub duration: Duration,
84
85 #[serde(rename = "SendMonitor")]
87 pub send_monitor: Monitor,
88
89 #[serde(rename = "RecvMonitor")]
91 pub recv_monitor: Monitor,
92
93 #[serde(rename = "Channels")]
95 pub channels: Vec<Channel>,
96}
97
98#[derive(Clone, Debug, Deserialize, Serialize)]
100pub struct Monitor {
101 #[serde(rename = "Active")]
103 pub active: bool,
104
105 #[serde(rename = "Start")]
107 pub start: Time,
108
109 #[serde(rename = "Duration", with = "serializers::time_duration")]
111 pub duration: Duration,
112
113 #[serde(rename = "Idle", with = "serializers::time_duration")]
115 pub idle: Duration,
116
117 #[serde(rename = "Bytes", with = "serializers::from_str")]
119 pub bytes: u64,
120
121 #[serde(rename = "Samples", with = "serializers::from_str")]
123 pub samples: u64,
124
125 #[serde(rename = "InstRate", with = "serializers::from_str")]
127 pub inst_rate: u64,
128
129 #[serde(rename = "CurRate", with = "serializers::from_str")]
131 pub cur_rate: u64,
132
133 #[serde(rename = "AvgRate", with = "serializers::from_str")]
135 pub avg_rate: u64,
136
137 #[serde(rename = "PeakRate", with = "serializers::from_str")]
139 pub peak_rate: u64,
140
141 #[serde(rename = "BytesRem", with = "serializers::from_str")]
143 pub bytes_rem: u64,
144
145 #[serde(rename = "TimeRem", with = "serializers::from_str")]
147 pub time_rem: u64,
148
149 #[serde(rename = "Progress")]
151 pub progress: u64,
152}