rabbitmq_management_client/api/
overview.rs

1use 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}