sentinel_config/
server.rs1use serde::{Deserialize, Serialize};
7use std::path::PathBuf;
8use validator::Validate;
9
10use sentinel_common::types::{TlsVersion, TraceIdFormat};
11
12#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
18pub struct ServerConfig {
19 #[serde(default = "default_worker_threads")]
21 pub worker_threads: usize,
22
23 #[serde(default = "default_max_connections")]
25 pub max_connections: usize,
26
27 #[serde(default = "default_graceful_shutdown_timeout")]
29 pub graceful_shutdown_timeout_secs: u64,
30
31 #[serde(default)]
33 pub daemon: bool,
34
35 pub pid_file: Option<PathBuf>,
37
38 pub user: Option<String>,
40
41 pub group: Option<String>,
43
44 pub working_directory: Option<PathBuf>,
46
47 #[serde(default)]
52 pub trace_id_format: TraceIdFormat,
53
54 #[serde(default)]
59 pub auto_reload: bool,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
68pub struct ListenerConfig {
69 pub id: String,
71
72 #[validate(custom(function = "crate::validation::validate_socket_addr"))]
74 pub address: String,
75
76 pub protocol: ListenerProtocol,
78
79 pub tls: Option<TlsConfig>,
81
82 pub default_route: Option<String>,
84
85 #[serde(default = "default_request_timeout")]
87 pub request_timeout_secs: u64,
88
89 #[serde(default = "default_keepalive_timeout")]
91 pub keepalive_timeout_secs: u64,
92
93 #[serde(default = "default_max_concurrent_streams")]
95 pub max_concurrent_streams: u32,
96}
97
98#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
100#[serde(rename_all = "lowercase")]
101pub enum ListenerProtocol {
102 Http,
103 Https,
104 #[serde(rename = "h2")]
105 Http2,
106 #[serde(rename = "h3")]
107 Http3,
108}
109
110#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
116pub struct TlsConfig {
117 pub cert_file: PathBuf,
119
120 pub key_file: PathBuf,
122
123 #[serde(default)]
126 pub additional_certs: Vec<SniCertificate>,
127
128 pub ca_file: Option<PathBuf>,
130
131 #[serde(default = "default_min_tls_version")]
133 pub min_version: TlsVersion,
134
135 pub max_version: Option<TlsVersion>,
137
138 #[serde(default)]
140 pub cipher_suites: Vec<String>,
141
142 #[serde(default)]
144 pub client_auth: bool,
145
146 #[serde(default = "default_ocsp_stapling")]
148 pub ocsp_stapling: bool,
149
150 #[serde(default = "default_session_resumption")]
152 pub session_resumption: bool,
153}
154
155#[derive(Debug, Clone, Serialize, Deserialize)]
157pub struct SniCertificate {
158 pub hostnames: Vec<String>,
160
161 pub cert_file: PathBuf,
163
164 pub key_file: PathBuf,
166}
167
168pub(crate) fn default_worker_threads() -> usize {
173 0
174}
175
176pub(crate) fn default_max_connections() -> usize {
177 10000
178}
179
180pub(crate) fn default_graceful_shutdown_timeout() -> u64 {
181 30
182}
183
184pub(crate) fn default_request_timeout() -> u64 {
185 60
186}
187
188pub(crate) fn default_keepalive_timeout() -> u64 {
189 75
190}
191
192pub(crate) fn default_max_concurrent_streams() -> u32 {
193 100
194}
195
196fn default_min_tls_version() -> TlsVersion {
197 TlsVersion::Tls12
198}
199
200fn default_ocsp_stapling() -> bool {
201 true
202}
203
204fn default_session_resumption() -> bool {
205 true
206}