aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-06-08 13:02:49 +0200
committermetamuffin <metamuffin@disroot.org>2025-06-08 13:02:52 +0200
commitc876bb001f999e288410201b2306e8c3f3261836 (patch)
tree297da10cd6bc5b8f690848a34fe4212f0a7b36d6 /src
parent2eed0cc2a319bfab52b88abc39f2a4f237e4d0e0 (diff)
downloadgnix-c876bb001f999e288410201b2306e8c3f3261836.tar
gnix-c876bb001f999e288410201b2306e8c3f3261836.tar.bz2
gnix-c876bb001f999e288410201b2306e8c3f3261836.tar.zst
optional stdev in delay module + fmt
Diffstat (limited to 'src')
-rw-r--r--src/modules/delay.rs7
-rw-r--r--src/modules/headers.rs8
-rw-r--r--src/modules/mod.rs2
-rw-r--r--src/modules/semaphore.rs6
4 files changed, 8 insertions, 15 deletions
diff --git a/src/modules/delay.rs b/src/modules/delay.rs
index 5b5ce06..31036fe 100644
--- a/src/modules/delay.rs
+++ b/src/modules/delay.rs
@@ -17,7 +17,7 @@ pub struct DelayKind;
#[derive(Deserialize)]
struct Delay {
duration: u64,
- stdev: u64,
+ stdev: Option<u64>,
next: DynNode,
}
@@ -36,11 +36,12 @@ impl Node for Delay {
request: NodeRequest,
) -> Pin<Box<dyn Future<Output = Result<NodeResponse, ServiceError>> + Send + Sync + 'a>> {
Box::pin(async move {
- sleep(Duration::from_millis(if self.stdev == 0 {
+ let stdev = self.stdev.unwrap_or_default();
+ sleep(Duration::from_millis(if stdev == 0 {
self.duration
} else {
self.duration.saturating_add_signed(
- rand_distr::Normal::new(0., self.stdev as f32)
+ rand_distr::Normal::new(0., stdev as f32)
.unwrap()
.sample(&mut rand::rng()) as i64,
)
diff --git a/src/modules/headers.rs b/src/modules/headers.rs
index 3d0a238..f5b081f 100644
--- a/src/modules/headers.rs
+++ b/src/modules/headers.rs
@@ -41,13 +41,9 @@ impl Node for Headers {
mut request: NodeRequest,
) -> Pin<Box<dyn Future<Output = Result<NodeResponse, ServiceError>> + Send + Sync + 'a>> {
Box::pin(async move {
- request
- .headers_mut()
- .extend(self.request.0.clone());
+ request.headers_mut().extend(self.request.0.clone());
let mut response = self.next.handle(context, request).await?;
- response
- .headers_mut()
- .extend(self.response.0.clone());
+ response.headers_mut().extend(self.response.0.clone());
Ok(response)
})
}
diff --git a/src/modules/mod.rs b/src/modules/mod.rs
index 71f60c9..b267a04 100644
--- a/src/modules/mod.rs
+++ b/src/modules/mod.rs
@@ -32,9 +32,9 @@ mod paths;
mod proxy;
mod ratelimit;
mod redirect;
+mod semaphore;
mod switch;
mod upgrade_insecure;
-mod semaphore;
pub type NodeRequest = Request<BoxBody<Bytes, ServiceError>>;
pub type NodeResponse = Response<BoxBody<Bytes, ServiceError>>;
diff --git a/src/modules/semaphore.rs b/src/modules/semaphore.rs
index b4f50b2..7aa8283 100644
--- a/src/modules/semaphore.rs
+++ b/src/modules/semaphore.rs
@@ -8,11 +8,7 @@ use crate::{config::DynNode, error::ServiceError};
use anyhow::Result;
use serde::Deserialize;
use serde_yml::Value;
-use std::{
- future::Future,
- pin::Pin,
- sync::Arc,
-};
+use std::{future::Future, pin::Pin, sync::Arc};
use tokio::sync::Semaphore;
pub struct SemaphoreKind;