rmq_rs_admin/modules/
nodes.rs

1use serde::{Deserialize, Serialize};
2use std::error::Error;
3
4use super::client::Client;
5use std::collections::HashMap;
6
7#[derive(Deserialize, Debug)]
8pub struct Node {
9    pub partitions: Vec<String>,
10    pub os_pid: String,
11    pub fd_total: i64,
12    pub sockets_total: i64,
13    pub mem_limit: i64,
14    pub mem_alarm: bool,
15    pub disk_free_limit: i64,
16    pub disk_free_alarm: bool,
17    pub proc_total: i64,
18    pub rates_mode: String,
19    pub uptime: i64,
20    pub run_queue: i32,
21    pub processors: i32,
22    pub exchange_types: Vec<ExchangeType>,
23    pub auth_mechanisms: Vec<AuthMechanism>,
24    pub applications: Vec<Application>,
25    pub contexts: Vec<Context>,
26    pub log_files: Vec<String>,
27    pub db_dir: String,
28    pub config_files: Vec<String>,
29    pub net_ticktime: i32,
30    pub enabled_plugins: Vec<String>,
31    pub mem_calculation_strategy: String,
32    pub ra_open_file_metrics: HashMap<String, i32>,
33    pub name: String,
34    #[serde(rename = "type")]
35    pub node_type: String,
36    pub running: bool,
37    pub being_drained: bool,
38    pub mem_used: i64,
39    pub mem_used_details: RateDetails,
40    pub fd_used: i32,
41    pub fd_used_details: RateDetails,
42    pub sockets_used: i32,
43    pub sockets_used_details: RateDetails,
44    pub proc_used: i32,
45    pub proc_used_details: RateDetails,
46    pub disk_free: i64,
47    pub disk_free_details: RateDetails,
48    pub gc_num: i64,
49    pub gc_num_details: RateDetails,
50    pub gc_bytes_reclaimed: i64,
51    pub gc_bytes_reclaimed_details: RateDetails,
52    pub context_switches: i64,
53    pub context_switches_details: RateDetails,
54    pub io_read_count: i64,
55    pub io_read_count_details: RateDetails,
56    pub io_read_bytes: i64,
57    pub io_read_bytes_details: RateDetails,
58    pub io_read_avg_time: f64,
59    pub io_read_avg_time_details: RateDetails,
60    pub io_write_count: i64,
61    pub io_write_count_details: RateDetails,
62    pub io_write_bytes: i64,
63    pub io_write_bytes_details: RateDetails,
64    pub io_write_avg_time: f64,
65    pub io_write_avg_time_details: RateDetails,
66    pub io_sync_count: i64,
67    pub io_sync_count_details: RateDetails,
68    pub io_sync_avg_time: f64,
69    pub io_sync_avg_time_details: RateDetails,
70    pub io_seek_count: i64,
71    pub io_seek_count_details: RateDetails,
72    pub io_seek_avg_time: f64,
73    pub io_seek_avg_time_details: RateDetails,
74    pub io_reopen_count: i64,
75    pub io_reopen_count_details: RateDetails,
76    pub mnesia_ram_tx_count: i64,
77    pub mnesia_ram_tx_count_details: RateDetails,
78    pub mnesia_disk_tx_count: i64,
79    pub mnesia_disk_tx_count_details: RateDetails,
80    pub msg_store_read_count: i64,
81    pub msg_store_read_count_details: RateDetails,
82    pub msg_store_write_count: i64,
83    pub msg_store_write_count_details: RateDetails,
84    pub queue_index_write_count: i64,
85    pub queue_index_write_count_details: RateDetails,
86    pub queue_index_read_count: i64,
87    pub queue_index_read_count_details: RateDetails,
88    pub connection_created: i64,
89    pub connection_created_details: RateDetails,
90    pub connection_closed: i64,
91    pub connection_closed_details: RateDetails,
92    pub channel_created: i64,
93    pub channel_created_details: RateDetails,
94    pub channel_closed: i64,
95    pub channel_closed_details: RateDetails,
96    pub queue_declared: i64,
97    pub queue_declared_details: RateDetails,
98    pub queue_created: i64,
99    pub queue_created_details: RateDetails,
100    pub queue_deleted: i64,
101    pub queue_deleted_details: RateDetails,
102    pub cluster_links: Vec<ClusterLink>,
103    pub metrics_gc_queue_length: MetricsGcQueueLength,
104}
105
106#[derive(Deserialize, Debug)]
107pub struct ExchangeType {
108    pub name: String,
109    pub description: String,
110    pub enabled: bool,
111}
112
113#[derive(Deserialize, Debug)]
114pub struct AuthMechanism {
115    pub name: String,
116    pub description: String,
117    pub enabled: bool,
118}
119
120#[derive(Deserialize, Debug)]
121pub struct Application {
122    pub name: String,
123    pub description: String,
124    pub version: String,
125}
126
127#[derive(Deserialize, Debug)]
128pub struct Context {
129    pub description: String,
130    pub path: String,
131    pub cowboy_opts: String,
132    pub port: String,
133    pub protocol: Option<String>,
134}
135
136#[derive(Serialize, Deserialize, Debug)]
137pub struct RateDetails {
138    pub rate: f64,
139}
140
141#[derive(Serialize, Deserialize, Debug)]
142pub struct MetricsGcQueueLength {
143    pub connection_closed: i32,
144    pub channel_closed: i32,
145    pub consumer_deleted: i32,
146    pub exchange_deleted: i32,
147    pub queue_deleted: i32,
148    pub vhost_deleted: i32,
149    pub node_node_deleted: i32,
150    pub channel_consumer_deleted: i32,
151}
152
153#[derive(Deserialize, Serialize, Debug)]
154pub struct ClusterLink {
155    pub stats: LinkStats,
156    pub name: String,
157    pub peer_addr: String,
158    pub peer_port: u16,
159    pub sock_addr: String,
160    pub sock_port: u16,
161    pub recv_bytes: u64,
162    pub send_bytes: u64,
163}
164
165#[derive(Deserialize, Serialize, Debug)]
166pub struct LinkStats {
167    pub send_bytes: u64,
168    pub send_bytes_details: RateDetails,
169    pub recv_bytes: u64,
170    pub recv_bytes_details: RateDetails,
171}
172
173pub struct NodeManager {
174    client: Box<Client>,
175}
176
177impl NodeManager {
178    pub fn new(client: Box<Client>) -> Self {
179        Self { client }
180    }
181
182    pub async fn get(&self) -> Result<Vec<Node>, Box<dyn Error>> {
183        let uri = "api/nodes".to_string();
184        let nodes = self
185            .client
186            .get(uri, None)
187            .await?
188            .json::<Vec<Node>>()
189            .await?;
190        Ok(nodes)
191    }
192}