From 3ef2c4ae719197630ce6bae857eeea5407fe257f Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Tue, 20 Feb 2024 22:08:17 +1300 Subject: [PATCH] Display ban seconds in log --- src/globals.rs | 12 +++++++++--- src/ip.rs | 21 ++++++++++++--------- src/main.rs | 12 +++++++++--- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/globals.rs b/src/globals.rs index ce593bb..8cdb69d 100644 --- a/src/globals.rs +++ b/src/globals.rs @@ -51,11 +51,17 @@ lazy_static! { } impl Globals { - pub async fn ban(ipaddr: std::net::IpAddr, bankind: Ban) { + pub fn ban(ipaddr: std::net::IpAddr, bankind: Ban) -> u64 { + let mut ban_seconds: u64 = 0; GLOBALS .ip_data .entry(ipaddr) - .and_modify(|ipdata| ipdata.ban(bankind)) - .or_insert(IpData::new(bankind)); + .and_modify(|ipdata| ban_seconds = ipdata.ban(bankind)) + .or_insert({ + let (ipdata, seconds) = IpData::new(bankind); + ban_seconds = seconds; + ipdata + }); + ban_seconds } } diff --git a/src/ip.rs b/src/ip.rs index 8aa45ea..cb5cf39 100644 --- a/src/ip.rs +++ b/src/ip.rs @@ -17,7 +17,7 @@ pub struct IpData { } impl IpData { - pub fn new(ban: Ban) -> IpData { + pub fn new(ban: Ban) -> (IpData, u64) { let mut ipdata = IpData { ban_until: Time::now(), number_of_error_exits: 0, @@ -25,12 +25,12 @@ impl IpData { number_of_timeouts: 0, }; - ipdata.ban(ban); + let seconds = ipdata.ban(ban); - ipdata + (ipdata, seconds) } - pub fn ban(&mut self, ban: Ban) { + pub fn ban(&mut self, ban: Ban) -> u64 { // Update numbers match ban { Ban::ErrorExit => self.number_of_error_exits += 1, @@ -41,17 +41,20 @@ impl IpData { // Compute ban_until let mut until = Time::now(); - until.0 += self.ban_seconds(ban); + let seconds = self.ban_seconds(ban); + until.0 += seconds; self.ban_until = Time(self.ban_until.0.max(until.0)); + + seconds } fn ban_seconds(&self, thisban: Ban) -> u64 { match thisban { - Ban::General => 3, - Ban::ErrorExit => 3 + self.number_of_error_exits * 10, - Ban::TooManyErrors => 3 + self.number_of_too_many_error_bans * 15, - Ban::Timeout => 3 + self.number_of_timeouts * 5, + Ban::General => 2, + Ban::ErrorExit => 2 + self.number_of_error_exits * 10, + Ban::TooManyErrors => 2 + self.number_of_too_many_error_bans * 15, + Ban::Timeout => 2 + self.number_of_timeouts * 5, } } } diff --git a/src/main.rs b/src/main.rs index f5b8b14..d1082e7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -307,10 +307,16 @@ async fn handle_http_request( // Decrement count of active websockets let old_num_websockets = GLOBALS.num_clients.fetch_sub(1, Ordering::SeqCst); - log::info!("{}: TOTAL={}, {}", peer, old_num_websockets - 1, msg); - // Ban for the appropriate duration - Globals::ban(peer.ip(), bankind).await; + let ban_seconds = Globals::ban(peer.ip(), bankind); + + log::info!( + "{}: TOTAL={}, {}, ban={}s", + peer, + old_num_websockets - 1, + msg, + ban_seconds + ); } Err(e) => { log::error!("{}: {}", peer, e);