turngate 0.1.0

Prevent or reduce abuse of your public service
Documentation
use crate::VisitCounters;

#[derive(Default, Debug)]
pub struct Stats {
    pub count: f32,
    pub duration_avg: f32,
    pub duration_max: f32,
    pub duration_min: f32,
    pub score_avg: f32,
    pub score_max: f32,
    pub score_min: f32,
}

impl Stats {
    pub fn add(&mut self, counters: VisitCounters) {
        self.count += 1.0;
        let score = counters.score as f32;
        let duration = counters.duration.as_secs_f32();

        self.duration_avg += (duration - self.duration_avg) / self.count;
        self.duration_max = f32::max(duration, self.duration_max);
        self.duration_min = f32::min(duration, self.duration_min);

        self.score_avg += (score - self.score_avg) / self.count;
        self.score_max = f32::max(score, self.score_max);
        self.score_min = f32::min(score, self.score_min);
    }
}