rmq-rs-admin 0.1.1

Rabbitmq Rust Admin API Client
Documentation
use serde::{Deserialize, Serialize};
use std::error::Error;

use super::client::Client;
use std::collections::HashMap;

#[derive(Deserialize, Debug)]
pub struct Node {
    pub partitions: Vec<String>,
    pub os_pid: String,
    pub fd_total: i64,
    pub sockets_total: i64,
    pub mem_limit: i64,
    pub mem_alarm: bool,
    pub disk_free_limit: i64,
    pub disk_free_alarm: bool,
    pub proc_total: i64,
    pub rates_mode: String,
    pub uptime: i64,
    pub run_queue: i32,
    pub processors: i32,
    pub exchange_types: Vec<ExchangeType>,
    pub auth_mechanisms: Vec<AuthMechanism>,
    pub applications: Vec<Application>,
    pub contexts: Vec<Context>,
    pub log_files: Vec<String>,
    pub db_dir: String,
    pub config_files: Vec<String>,
    pub net_ticktime: i32,
    pub enabled_plugins: Vec<String>,
    pub mem_calculation_strategy: String,
    pub ra_open_file_metrics: HashMap<String, i32>,
    pub name: String,
    #[serde(rename = "type")]
    pub node_type: String,
    pub running: bool,
    pub being_drained: bool,
    pub mem_used: i64,
    pub mem_used_details: RateDetails,
    pub fd_used: i32,
    pub fd_used_details: RateDetails,
    pub sockets_used: i32,
    pub sockets_used_details: RateDetails,
    pub proc_used: i32,
    pub proc_used_details: RateDetails,
    pub disk_free: i64,
    pub disk_free_details: RateDetails,
    pub gc_num: i64,
    pub gc_num_details: RateDetails,
    pub gc_bytes_reclaimed: i64,
    pub gc_bytes_reclaimed_details: RateDetails,
    pub context_switches: i64,
    pub context_switches_details: RateDetails,
    pub io_read_count: i64,
    pub io_read_count_details: RateDetails,
    pub io_read_bytes: i64,
    pub io_read_bytes_details: RateDetails,
    pub io_read_avg_time: f64,
    pub io_read_avg_time_details: RateDetails,
    pub io_write_count: i64,
    pub io_write_count_details: RateDetails,
    pub io_write_bytes: i64,
    pub io_write_bytes_details: RateDetails,
    pub io_write_avg_time: f64,
    pub io_write_avg_time_details: RateDetails,
    pub io_sync_count: i64,
    pub io_sync_count_details: RateDetails,
    pub io_sync_avg_time: f64,
    pub io_sync_avg_time_details: RateDetails,
    pub io_seek_count: i64,
    pub io_seek_count_details: RateDetails,
    pub io_seek_avg_time: f64,
    pub io_seek_avg_time_details: RateDetails,
    pub io_reopen_count: i64,
    pub io_reopen_count_details: RateDetails,
    pub mnesia_ram_tx_count: i64,
    pub mnesia_ram_tx_count_details: RateDetails,
    pub mnesia_disk_tx_count: i64,
    pub mnesia_disk_tx_count_details: RateDetails,
    pub msg_store_read_count: i64,
    pub msg_store_read_count_details: RateDetails,
    pub msg_store_write_count: i64,
    pub msg_store_write_count_details: RateDetails,
    pub queue_index_write_count: i64,
    pub queue_index_write_count_details: RateDetails,
    pub queue_index_read_count: i64,
    pub queue_index_read_count_details: RateDetails,
    pub connection_created: i64,
    pub connection_created_details: RateDetails,
    pub connection_closed: i64,
    pub connection_closed_details: RateDetails,
    pub channel_created: i64,
    pub channel_created_details: RateDetails,
    pub channel_closed: i64,
    pub channel_closed_details: RateDetails,
    pub queue_declared: i64,
    pub queue_declared_details: RateDetails,
    pub queue_created: i64,
    pub queue_created_details: RateDetails,
    pub queue_deleted: i64,
    pub queue_deleted_details: RateDetails,
    pub cluster_links: Vec<ClusterLink>,
    pub metrics_gc_queue_length: MetricsGcQueueLength,
}

#[derive(Deserialize, Debug)]
pub struct ExchangeType {
    pub name: String,
    pub description: String,
    pub enabled: bool,
}

#[derive(Deserialize, Debug)]
pub struct AuthMechanism {
    pub name: String,
    pub description: String,
    pub enabled: bool,
}

#[derive(Deserialize, Debug)]
pub struct Application {
    pub name: String,
    pub description: String,
    pub version: String,
}

#[derive(Deserialize, Debug)]
pub struct Context {
    pub description: String,
    pub path: String,
    pub cowboy_opts: String,
    pub port: String,
    pub protocol: Option<String>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct RateDetails {
    pub rate: f64,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct MetricsGcQueueLength {
    pub connection_closed: i32,
    pub channel_closed: i32,
    pub consumer_deleted: i32,
    pub exchange_deleted: i32,
    pub queue_deleted: i32,
    pub vhost_deleted: i32,
    pub node_node_deleted: i32,
    pub channel_consumer_deleted: i32,
}

#[derive(Deserialize, Serialize, Debug)]
pub struct ClusterLink {
    pub stats: LinkStats,
    pub name: String,
    pub peer_addr: String,
    pub peer_port: u16,
    pub sock_addr: String,
    pub sock_port: u16,
    pub recv_bytes: u64,
    pub send_bytes: u64,
}

#[derive(Deserialize, Serialize, Debug)]
pub struct LinkStats {
    pub send_bytes: u64,
    pub send_bytes_details: RateDetails,
    pub recv_bytes: u64,
    pub recv_bytes_details: RateDetails,
}

pub struct NodeManager {
    client: Box<Client>,
}

impl NodeManager {
    pub fn new(client: Box<Client>) -> Self {
        Self { client }
    }

    pub async fn get(&self) -> Result<Vec<Node>, Box<dyn Error>> {
        let uri = "api/nodes".to_string();
        let nodes = self
            .client
            .get(uri, None)
            .await?
            .json::<Vec<Node>>()
            .await?;
        Ok(nodes)
    }
}