rabbitmq_management_client/api/
overview.rs1use crate::api::_generic::{handle_empty_response, handle_response};
2use crate::errors::RabbitMqClientError;
3use crate::RabbitMqClient;
4use async_trait::async_trait;
5use serde::{Deserialize, Serialize};
6
7#[async_trait]
8pub trait OverviewApi {
9 async fn get_overview(&self) -> Result<RabbitMqOverview, RabbitMqClientError>;
10
11 async fn get_cluster_name(&self) -> Result<RabbitMqClusterName, RabbitMqClientError>;
12
13 async fn set_cluster_name(
14 &self,
15 request: RabbitMqClusterName,
16 ) -> Result<(), RabbitMqClientError>;
17}
18
19#[async_trait]
20impl OverviewApi for RabbitMqClient {
21 async fn get_overview(&self) -> Result<RabbitMqOverview, RabbitMqClientError> {
22 let response = self
23 .client
24 .request(
25 reqwest::Method::GET,
26 format!("{}/api/overview", self.api_url),
27 )
28 .send()
29 .await?;
30
31 handle_response(response).await
32 }
33
34 async fn get_cluster_name(&self) -> Result<RabbitMqClusterName, RabbitMqClientError> {
35 let response = self
36 .client
37 .request(
38 reqwest::Method::GET,
39 format!("{}/api/cluster-name", self.api_url),
40 )
41 .send()
42 .await?;
43
44 handle_response(response).await
45 }
46
47 async fn set_cluster_name(
48 &self,
49 request: RabbitMqClusterName,
50 ) -> Result<(), RabbitMqClientError> {
51 let response = self
52 .client
53 .request(
54 reqwest::Method::PUT,
55 format!("{}/api/cluster-name", self.api_url),
56 )
57 .json(&request)
58 .send()
59 .await?;
60
61 handle_empty_response(response).await
62 }
63}
64
65#[derive(Debug, Deserialize)]
66pub struct RabbitMqOverview {
67 pub management_version: String,
68 pub rates_mode: String,
69 pub exchange_types: Vec<RabbitMqExchangeType>,
70 pub product_version: String,
71 pub product_name: String,
72 pub rabbitmq_version: String,
73 pub cluster_name: String,
74 pub erlang_version: String,
75 pub erlang_full_version: String,
76 pub release_series_support_status: String,
77 pub disable_stats: bool,
78 pub is_op_policy_updating_enabled: bool,
79 pub enable_queue_totals: bool,
80 pub churn_rates: RabbitMqChurnRates,
81 pub object_totals: RabbitMqObjectTotals,
82 pub listeners: Vec<RabbitMqListener>,
83 pub contexts: Vec<RabbitMqContext>,
84}
85
86#[derive(Debug, Deserialize)]
87pub struct RabbitMqExchangeType {
88 pub name: String,
89 pub description: String,
90 pub enabled: bool,
91}
92
93#[derive(Debug, Deserialize)]
94pub struct RabbitMqContext {
95 pub node: Option<String>,
96 pub description: String,
97 pub path: String,
98 pub cowboy_opts: String,
99 pub port: String,
100 pub protocol: Option<String>,
101}
102
103#[derive(Debug, Deserialize)]
104pub struct RabbitMqListener {
105 pub node: String,
106 pub protocol: String,
107 pub ip_address: String,
108 pub port: i64,
109}
110
111#[derive(Debug, Deserialize)]
112pub struct RabbitMqChurnRates {
113 pub channel_closed: i64,
114 pub channel_created: i64,
115 pub connection_closed: i64,
116 pub connection_created: i64,
117 pub queue_created: i64,
118 pub queue_declared: i64,
119 pub queue_deleted: i64,
120}
121
122#[derive(Debug, Deserialize)]
123pub struct RabbitMqObjectTotals {
124 pub channels: i64,
125 pub connections: i64,
126 pub consumers: i64,
127 pub exchanges: i64,
128 pub queues: i64,
129}
130
131#[derive(Debug, Deserialize, Serialize)]
132pub struct RabbitMqClusterName {
133 pub name: String,
134}