mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-03-31 17:55:36 +00:00
aquatic: add CleaningConfig and StatisticsConfig to Config, use them
This commit is contained in:
parent
766606cc08
commit
fa60eddcc4
3 changed files with 54 additions and 11 deletions
|
|
@ -9,7 +9,23 @@ pub struct Config {
|
|||
pub poll_event_capacity: usize,
|
||||
pub max_scrape_torrents: u8,
|
||||
pub max_response_peers: usize,
|
||||
pub statistics_interval: u64,
|
||||
pub statistics: StatisticsConfig,
|
||||
pub cleaning: CleaningConfig,
|
||||
}
|
||||
|
||||
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct StatisticsConfig {
|
||||
pub interval: u64,
|
||||
}
|
||||
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct CleaningConfig {
|
||||
pub interval: u64,
|
||||
pub max_peer_age: u64,
|
||||
pub max_connection_age: u64,
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -22,7 +38,28 @@ impl Default for Config {
|
|||
recv_buffer_size: 4096 * 128,
|
||||
max_scrape_torrents: 255,
|
||||
max_response_peers: 255,
|
||||
statistics_interval: 5,
|
||||
statistics: StatisticsConfig::default(),
|
||||
cleaning: CleaningConfig::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
impl Default for StatisticsConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
interval: 5,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
impl Default for CleaningConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
interval: 30,
|
||||
max_peer_age: 60 * 20,
|
||||
max_connection_age: 60 * 5,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -26,11 +26,12 @@ pub fn run(){
|
|||
});
|
||||
}
|
||||
|
||||
{
|
||||
if config.statistics.interval != 0 {
|
||||
let state = state.clone();
|
||||
let config = config.clone();
|
||||
|
||||
::std::thread::spawn(move || {
|
||||
let interval = config.statistics_interval;
|
||||
let interval = config.statistics.interval;
|
||||
|
||||
loop {
|
||||
::std::thread::sleep(Duration::from_secs(interval));
|
||||
|
|
@ -102,9 +103,9 @@ pub fn run(){
|
|||
}
|
||||
|
||||
loop {
|
||||
::std::thread::sleep(Duration::from_secs(30));
|
||||
::std::thread::sleep(Duration::from_secs(config.cleaning.interval));
|
||||
|
||||
tasks::clean_connections(&state);
|
||||
tasks::clean_torrents(&state);
|
||||
tasks::clean_connections(&state, &config);
|
||||
tasks::clean_torrents(&state, &config);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,18 +2,23 @@ use std::sync::atomic::Ordering;
|
|||
use std::time::{Duration, Instant};
|
||||
|
||||
use crate::common::*;
|
||||
use crate::config::Config;
|
||||
|
||||
|
||||
pub fn clean_connections(state: &State){
|
||||
let limit = Instant::now() - Duration::from_secs(300);
|
||||
pub fn clean_connections(state: &State, config: &Config){
|
||||
let limit = Instant::now() - Duration::from_secs(
|
||||
config.cleaning.max_connection_age
|
||||
);
|
||||
|
||||
state.connections.retain(|_, v| v.0 > limit);
|
||||
state.connections.shrink_to_fit();
|
||||
}
|
||||
|
||||
|
||||
pub fn clean_torrents(state: &State){
|
||||
let limit = Instant::now() - Duration::from_secs(1200);
|
||||
pub fn clean_torrents(state: &State, config: &Config){
|
||||
let limit = Instant::now() - Duration::from_secs(
|
||||
config.cleaning.max_peer_age
|
||||
);
|
||||
|
||||
state.torrents.retain(|_, torrent| {
|
||||
let num_seeders = &torrent.num_seeders;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue