aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--warden/src/config/cli/mod.rs9
-rw-r--r--warden/src/config/mod.rs9
-rw-r--r--warden/src/main.rs2
-rw-r--r--warden/src/server/mod.rs5
-rw-r--r--warden/src/server/routes/mod.rs13
5 files changed, 32 insertions, 6 deletions
diff --git a/warden/src/config/cli/mod.rs b/warden/src/config/cli/mod.rs
index 0cf93c5..7acf078 100644
--- a/warden/src/config/cli/mod.rs
+++ b/warden/src/config/cli/mod.rs
@@ -44,6 +44,14 @@ pub struct Server {
/// Log file directory (defaults to temp_dir)
#[arg(long, value_name = "DIR", env = "LOGS_DIR")]
pub log_dir: Option<PathBuf>,
+ /// Request timeout duration in seconds
+ #[arg(
+ long,
+ value_name = "TIMEOUT_DURATION",
+ env = "TIMEOUT_DURATION_SECS",
+ default_value = "5"
+ )]
+ pub timeout_secs: Option<u64>,
}
impl Default for Server {
@@ -56,6 +64,7 @@ impl Default for Server {
env!("CARGO_CRATE_NAME")
)),
log_dir: Some(std::env::temp_dir()),
+ timeout_secs: Some(5),
}
}
}
diff --git a/warden/src/config/mod.rs b/warden/src/config/mod.rs
index 7766982..40e142f 100644
--- a/warden/src/config/mod.rs
+++ b/warden/src/config/mod.rs
@@ -39,6 +39,7 @@ pub struct Server {
pub environment: Environment,
pub log_level: EnvFilter,
pub log_dir: PathBuf,
+ pub timeout_secs: u64,
}
impl Default for Server {
@@ -56,6 +57,7 @@ impl Default for Server {
.into()
}),
log_dir: std::env::temp_dir(),
+ timeout_secs: 5,
}
}
}
@@ -69,6 +71,12 @@ impl Configuration {
missing.push("server.port");
}
+ let timeout = cli
+ .server
+ .timeout_secs
+ .or(file.server.timeout_secs)
+ .unwrap_or(5);
+
let log_dir = cli
.server
.log_dir
@@ -114,6 +122,7 @@ impl Configuration {
environment,
log_level: log_level.into(),
log_dir,
+ timeout_secs: timeout,
},
})
}
diff --git a/warden/src/main.rs b/warden/src/main.rs
index 8cadcef..9abc8aa 100644
--- a/warden/src/main.rs
+++ b/warden/src/main.rs
@@ -39,7 +39,7 @@ async fn main() -> anyhow::Result<()> {
let (log_handle, _guard) =
logging::initialise_logging(&config.server.log_level, &config.server.log_dir);
- let app = server::router(Arc::new(AppState::new(log_handle))).await;
+ let app = server::router(Arc::new(AppState::new(log_handle)), &config).await;
let addr = SocketAddr::from((Ipv6Addr::UNSPECIFIED, config.server.port));
info!(port = addr.port(), "starting server");
diff --git a/warden/src/server/mod.rs b/warden/src/server/mod.rs
index eb1ecd2..122efbc 100644
--- a/warden/src/server/mod.rs
+++ b/warden/src/server/mod.rs
@@ -15,6 +15,7 @@ use utoipa::OpenApi;
use utoipa_axum::router::OpenApiRouter;
use crate::{
+ config::Configuration,
server::{
middleware::request_id::{REQUEST_ID_HEADER, middleware_request_id},
routes::{ApiDoc, config::ConfigDoc},
@@ -27,7 +28,7 @@ pub mod error;
pub mod middleware;
pub mod routes;
-pub async fn router(state: Arc<AppState>) -> Router<()> {
+pub async fn router(state: Arc<AppState>, config: &Configuration) -> Router<()> {
let mut doc = ApiDoc::openapi();
doc.merge(ConfigDoc::openapi());
@@ -81,7 +82,7 @@ pub async fn router(state: Arc<AppState>) -> Router<()> {
)
.layer(TimeoutLayer::with_status_code(
StatusCode::REQUEST_TIMEOUT,
- Duration::from_secs(5),
+ Duration::from_secs(config.server.timeout_secs),
))
.layer(PropagateRequestIdLayer::new(HeaderName::from_static(
REQUEST_ID_HEADER,
diff --git a/warden/src/server/routes/mod.rs b/warden/src/server/routes/mod.rs
index be37e37..a9fba3c 100644
--- a/warden/src/server/routes/mod.rs
+++ b/warden/src/server/routes/mod.rs
@@ -17,9 +17,16 @@ pub(super) struct ApiDoc;
method(get, head),
path = "/api/health",
responses(
- (status = OK, description = "Success", body = str, content_type = "text/plain")
- ))
-]
+ (
+ status = OK, description = "Warden is live",
+ body = Option<str>, content_type = "text/plain",
+ headers(
+ ("x-request-id" = String, description = "Request identifier")
+ )
+ )
+ ),
+ tag = env!("CARGO_PKG_NAME"),
+)]
pub async fn health() -> impl IntoResponse {
let name = env!("CARGO_PKG_NAME");
let ver = env!("CARGO_PKG_VERSION");