scouter_events/producer/rabbitmq/
types.rs1use 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 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}