mirror of
https://codeberg.org/YGGverse/psocks.git
synced 2026-03-31 08:25:27 +00:00
implement uptime stats
This commit is contained in:
parent
6be42e596a
commit
29895bf35a
3 changed files with 34 additions and 5 deletions
|
|
@ -12,13 +12,13 @@ use log::*;
|
||||||
use opt::{AuthMode, Opt};
|
use opt::{AuthMode, Opt};
|
||||||
use rocket::{State, http::Status, serde::json::Json};
|
use rocket::{State, http::Status, serde::json::Json};
|
||||||
use stats::{Snap, Total};
|
use stats::{Snap, Total};
|
||||||
use std::{future::Future, sync::Arc};
|
use std::{future::Future, sync::Arc, time::Instant};
|
||||||
use structopt::StructOpt;
|
use structopt::StructOpt;
|
||||||
use tokio::{net::TcpListener, task};
|
use tokio::{net::TcpListener, task};
|
||||||
|
|
||||||
#[rocket::get("/")]
|
#[rocket::get("/")]
|
||||||
async fn index(totals: &State<Arc<Total>>) -> Json<Snap> {
|
async fn index(totals: &State<Arc<Total>>, startup_time: &State<Instant>) -> Json<Snap> {
|
||||||
Json(totals.inner().snap())
|
Json(totals.inner().snap(startup_time.elapsed().as_secs()))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rocket::get("/allow/<rule>")]
|
#[rocket::get("/allow/<rule>")]
|
||||||
|
|
@ -83,6 +83,7 @@ async fn rocket() -> _ {
|
||||||
})
|
})
|
||||||
.manage(list)
|
.manage(list)
|
||||||
.manage(totals)
|
.manage(totals)
|
||||||
|
.manage(Instant::now())
|
||||||
.mount("/", rocket::routes![index, allow, block])
|
.mount("/", rocket::routes![index, allow, block])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,11 +18,12 @@ impl Total {
|
||||||
..Self::default()
|
..Self::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn snap(&self) -> Snap {
|
pub fn snap(&self, seconds_from_startup: u64) -> Snap {
|
||||||
Snap::shot(
|
Snap::shot(
|
||||||
self.entries.load(Ordering::Relaxed),
|
self.entries.load(Ordering::Relaxed),
|
||||||
self.request.load(Ordering::Relaxed),
|
self.request.load(Ordering::Relaxed),
|
||||||
self.blocked.load(Ordering::Relaxed),
|
self.blocked.load(Ordering::Relaxed),
|
||||||
|
seconds_from_startup,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
pub fn set_entries(&self, value: u64) {
|
pub fn set_entries(&self, value: u64) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,30 @@
|
||||||
use rocket::serde::Serialize;
|
use rocket::serde::Serialize;
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
pub struct Up {
|
||||||
|
seconds: u64,
|
||||||
|
minutes: u64,
|
||||||
|
hours: u64,
|
||||||
|
days: u64,
|
||||||
|
weeks: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Up {
|
||||||
|
pub fn from_startup_seconds(seconds: u64) -> Self {
|
||||||
|
let minutes = seconds / 60;
|
||||||
|
let hours = minutes / 60;
|
||||||
|
let days = hours / 24;
|
||||||
|
let weeks = days / 7;
|
||||||
|
Self {
|
||||||
|
seconds,
|
||||||
|
minutes,
|
||||||
|
hours,
|
||||||
|
days,
|
||||||
|
weeks,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
pub struct Sum {
|
pub struct Sum {
|
||||||
total: u64,
|
total: u64,
|
||||||
|
|
@ -11,10 +36,11 @@ pub struct Snap {
|
||||||
rules: u64,
|
rules: u64,
|
||||||
request: Sum,
|
request: Sum,
|
||||||
blocked: Sum,
|
blocked: Sum,
|
||||||
|
up_time: Up,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Snap {
|
impl Snap {
|
||||||
pub fn shot(rules: u64, request: u64, blocked: u64) -> Self {
|
pub fn shot(rules: u64, request: u64, blocked: u64, seconds_from_startup: u64) -> Self {
|
||||||
let blocked_percent = if request > 0 {
|
let blocked_percent = if request > 0 {
|
||||||
blocked as f32 * 100.0 / request as f32
|
blocked as f32 * 100.0 / request as f32
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -30,6 +56,7 @@ impl Snap {
|
||||||
total: blocked,
|
total: blocked,
|
||||||
percent: blocked_percent,
|
percent: blocked_percent,
|
||||||
},
|
},
|
||||||
|
up_time: Up::from_startup_seconds(seconds_from_startup),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue