scouter_events/producer/rabbitmq/
types.rs

1use pyo3::prelude::*;
2use scouter_types::TransportType;
3
4#[pyclass]
5#[derive(Clone, Debug)]
6pub struct RabbitMQConfig {
7    #[pyo3(get, set)]
8    pub address: String,
9
10    #[pyo3(get, set)]
11    pub queue: String,
12
13    #[pyo3(get, set)]
14    pub max_retries: i32,
15
16    #[pyo3(get)]
17    pub transport_type: TransportType,
18}
19
20#[pymethods]
21impl RabbitMQConfig {
22    #[new]
23    #[pyo3(signature = (host=None, port=None, username=None, password=None, queue="scouter_monitoring".to_string(), max_retries=3))]
24    pub fn new(
25        host: Option<String>,
26        port: Option<u16>,
27        username: Option<String>,
28        password: Option<String>,
29        queue: Option<String>,
30        max_retries: Option<i32>,
31    ) -> Self {
32        // build address
33        let address = std::env::var("RABBITMQ_ADDR").unwrap_or_else(|_| {
34            let host = host.unwrap_or_else(|| {
35                std::env::var("RABBITMQ_HOST").unwrap_or_else(|_| "localhost".to_string())
36            });
37
38            let port = port.unwrap_or_else(|| {
39                std::env::var("RABBITMQ_PORT")
40                    .unwrap_or_else(|_| "5672".to_string())
41                    .parse::<u16>()
42                    .unwrap()
43            });
44
45            let username = username.or_else(|| std::env::var("RABBITMQ_USERNAME").ok());
46
47            let password = password.or_else(|| std::env::var("RABBITMQ_PASSWORD").ok());
48
49            if username.is_none() || password.is_none() {
50                format!("amqp://{host}:{port}/%2f")
51            } else {
52                format!(
53                    "amqp://{}:{}@{}:{}/%2f",
54                    username.unwrap(),
55                    password.unwrap(),
56                    host,
57                    port
58                )
59            }
60        });
61
62        let queue = queue.unwrap_or_else(|| {
63            std::env::var("RABBITMQ_QUEUE").unwrap_or_else(|_| "scouter_monitoring".to_string())
64        });
65
66        RabbitMQConfig {
67            address,
68            queue,
69            max_retries: max_retries.unwrap_or(3),
70            transport_type: TransportType::RabbitMQ,
71        }
72    }
73}