Skip to main content

scouter_settings/
grpc.rs

1use pyo3::prelude::*;
2use scouter_types::PyHelperFuncs;
3use scouter_types::TransportType;
4use serde::{Serialize, Serializer};
5
6fn redact<S: Serializer>(_: &str, s: S) -> Result<S::Ok, S::Error> {
7    s.serialize_str("***")
8}
9
10#[pyclass]
11#[derive(Clone, Serialize)]
12pub struct GrpcConfig {
13    #[pyo3(get, set)]
14    pub server_uri: String,
15
16    #[pyo3(get, set)]
17    pub username: String,
18
19    #[pyo3(set)]
20    #[serde(serialize_with = "redact")]
21    pub password: String,
22
23    #[pyo3(get, set)]
24    pub timeout_secs: Option<u64>,
25
26    #[pyo3(get, set)]
27    pub connect_timeout_secs: Option<u64>,
28
29    #[pyo3(get, set)]
30    pub keep_alive_interval_secs: Option<u64>,
31
32    #[pyo3(get, set)]
33    pub keep_alive_timeout_secs: Option<u64>,
34
35    #[pyo3(get, set)]
36    pub keep_alive_while_idle: Option<bool>,
37
38    #[pyo3(get)]
39    pub transport_type: TransportType,
40}
41
42impl std::fmt::Debug for GrpcConfig {
43    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
44        f.debug_struct("GrpcConfig")
45            .field("server_uri", &self.server_uri)
46            .field("username", &self.username)
47            .field("password", &"***")
48            .field("timeout_secs", &self.timeout_secs)
49            .field("connect_timeout_secs", &self.connect_timeout_secs)
50            .field("keep_alive_interval_secs", &self.keep_alive_interval_secs)
51            .field("keep_alive_timeout_secs", &self.keep_alive_timeout_secs)
52            .field("keep_alive_while_idle", &self.keep_alive_while_idle)
53            .field("transport_type", &self.transport_type)
54            .finish()
55    }
56}
57
58#[pymethods]
59impl GrpcConfig {
60    #[new]
61    #[pyo3(signature = (
62        server_uri=None,
63        username=None,
64        password=None,
65        timeout_secs=None,
66        connect_timeout_secs=None,
67        keep_alive_interval_secs=None,
68        keep_alive_timeout_secs=None,
69        keep_alive_while_idle=None,
70    ))]
71    #[allow(clippy::too_many_arguments)]
72    pub fn new(
73        server_uri: Option<String>,
74        username: Option<String>,
75        password: Option<String>,
76        timeout_secs: Option<u64>,
77        connect_timeout_secs: Option<u64>,
78        keep_alive_interval_secs: Option<u64>,
79        keep_alive_timeout_secs: Option<u64>,
80        keep_alive_while_idle: Option<bool>,
81    ) -> Self {
82        let server_uri = server_uri.unwrap_or_else(|| {
83            std::env::var("SCOUTER_GRPC_URI")
84                .unwrap_or_else(|_| "http://localhost:50051".to_string())
85        });
86
87        let username = username.unwrap_or_else(|| {
88            std::env::var("SCOUTER_USERNAME").unwrap_or_else(|_| "guest".to_string())
89        });
90
91        let password = password.unwrap_or_else(|| {
92            std::env::var("SCOUTER_PASSWORD").unwrap_or_else(|_| "guest".to_string())
93        });
94
95        GrpcConfig {
96            server_uri,
97            username,
98            password,
99            timeout_secs,
100            connect_timeout_secs,
101            keep_alive_interval_secs,
102            keep_alive_timeout_secs,
103            keep_alive_while_idle,
104            transport_type: TransportType::Grpc,
105        }
106    }
107
108    pub fn __str__(&self) -> String {
109        PyHelperFuncs::__str__(self)
110    }
111}
112
113impl Default for GrpcConfig {
114    fn default() -> Self {
115        Self::new(None, None, None, None, None, None, None, None)
116    }
117}