Add Benchmark

This commit is contained in:
Bommels05 2025-02-14 16:30:56 +01:00
parent a8b3f7f871
commit 78547686bb
4 changed files with 24 additions and 11 deletions

View File

@ -21,4 +21,4 @@ url = "2.5.4"
flume = "0.11.1" flume = "0.11.1"
error-stack = "0.5.0" error-stack = "0.5.0"
thiserror = "2.0.11" thiserror = "2.0.11"
chrono = { version = "0.4.39", features = ["serde"] } chrono = { version = "0.4.39", features = ["serde"] }

View File

@ -15,7 +15,6 @@ tracing.workspace = true
tracing-subscriber.workspace = true tracing-subscriber.workspace = true
clap.workspace = true clap.workspace = true
url.workspace = true url.workspace = true
lalrpop-util = "0.22.1"
error-stack.workspace = true error-stack.workspace = true
flume.workspace = true flume.workspace = true
chrono.workspace = true chrono.workspace = true

View File

@ -6,7 +6,7 @@ use error_stack::{report, Report};
use flume::Receiver; use flume::Receiver;
use std::io::stdin; use std::io::stdin;
use std::ops::Add; use std::ops::Add;
use std::time::Duration; use std::time::{Duration, SystemTime};
use std::thread; use std::thread;
use tokio::select; use tokio::select;
use tracing::metadata::LevelFilter; use tracing::metadata::LevelFilter;
@ -20,6 +20,8 @@ struct Args {
url: Option<Url>, url: Option<Url>,
#[arg(short, long)] #[arg(short, long)]
debug: bool, debug: bool,
#[arg(short, long)]
benchmark: bool,
} }
#[tokio::main] #[tokio::main]
@ -46,8 +48,10 @@ async fn main() {
EnvFilter::builder() EnvFilter::builder()
.with_default_directive(if args.debug { .with_default_directive(if args.debug {
LevelFilter::DEBUG.into() LevelFilter::DEBUG.into()
} else { } else if !args.benchmark {
LevelFilter::INFO.into() LevelFilter::INFO.into()
} else {
LevelFilter::WARN.into()
}) })
.from_env_lossy(), .from_env_lossy(),
) )
@ -55,7 +59,7 @@ async fn main() {
let config = load_config(); let config = load_config();
let url: Url; let url: Url;
if let Some(arg) = args.url { if let Some(arg) = args.url.clone() {
url = arg; url = arg;
} else { } else {
if !config.server.last_server.is_empty() && config.general.use_last_server { if !config.server.last_server.is_empty() && config.general.use_last_server {
@ -103,11 +107,20 @@ async fn main() {
let lines = read_lines(); let lines = read_lines();
let messages = client.client.receiver_msg().clone(); let messages = client.client.receiver_msg().clone();
let actions = client.client.receiver_act().clone(); let actions = client.client.receiver_act().clone();
if args.benchmark {
loop {
let time = SystemTime::now();
handle_line(&mut client, &lines, "pm".into(), &args).await;
warn!("Getting PMs took {}ms", time.elapsed().unwrap().as_millis());
}
}
for _ in actions.try_iter() {} for _ in actions.try_iter() {}
loop { loop {
select! { select! {
Ok(line) = lines.recv_async() => { Ok(line) = lines.recv_async() => {
if handle_line(&mut client, &lines, line).await { if handle_line(&mut client, &lines, line, &args).await {
break; break;
} }
}, },
@ -232,7 +245,7 @@ fn print_error(error: &Report<BankError>) {
error!("{}", error.as_error().to_string()); error!("{}", error.as_error().to_string());
} }
async fn handle_line(client: &mut Client, rx: &Receiver<String>, line: String) -> bool { async fn handle_line(client: &mut Client, rx: &Receiver<String>, line: String, args: &Args) -> bool {
let mut split = line.split(' '); let mut split = line.split(' ');
let command: &str = split.next().unwrap(); let command: &str = split.next().unwrap();
@ -523,7 +536,7 @@ async fn handle_line(client: &mut Client, rx: &Receiver<String>, line: String) -
} }
info!("*: Message not saved in the history"); info!("*: Message not saved in the history");
info!("--- {} New Private Message{} ---", size, if size == 1 { "" } else { "s" }); info!("--- {} New Private Message{} ---", size, if size == 1 { "" } else { "s" });
if ask_confirmation(rx, "Do you want to mark all messages as read?").await { if !args.benchmark && ask_confirmation(rx, "Do you want to mark all messages as read?").await {
handle_error(&client.move_all_new_pms().await); handle_error(&client.move_all_new_pms().await);
} }
} else { } else {
@ -558,7 +571,7 @@ async fn handle_line(client: &mut Client, rx: &Receiver<String>, line: String) -
} }
for msg in &new_history { for msg in &new_history {
if msg.sender.eq_ignore_ascii_case(&username) { if msg.sender.eq_ignore_ascii_case(&username) {
info!("*[{}]{}: {}", msg.time.format("%H:%M %d.%m.%y"), msg.sender, msg.message) info!("*[{}]{}: {}", msg.time.format("%H:%M:%S %d.%m.%y"), msg.sender, msg.message)
} }
} }
if !new_history.is_empty() && ask_confirmation(rx, "Do you want to mark all unread messages as read now?").await { if !new_history.is_empty() && ask_confirmation(rx, "Do you want to mark all unread messages as read now?").await {
@ -584,7 +597,7 @@ async fn handle_line(client: &mut Client, rx: &Receiver<String>, line: String) -
if sender.eq_ignore_ascii_case(&username) { if sender.eq_ignore_ascii_case(&username) {
let result = client.move_newest_pm_to_history().await; let result = client.move_newest_pm_to_history().await;
if let Ok(msg) = result { if let Ok(msg) = result {
info!("[{}]{}: {}", msg.time.format("%H:%M %d.%m.%y"), msg.sender, msg.message) info!("[{}]{}: {}", msg.time.format("%H:%M:%S %d.%m.%y"), msg.sender, msg.message)
} else { } else {
handle_error(&result); handle_error(&result);
} }

View File

@ -124,8 +124,9 @@ impl Client {
pub async fn register(&mut self, credentials: Credentials) -> BankResult<(), BankError> { pub async fn register(&mut self, credentials: Credentials) -> BankResult<(), BankError> {
self.client.set_credentials(credentials.username.clone(), credentials.password.clone())?; self.client.set_credentials(credentials.username.clone(), credentials.password.clone())?;
let (_, msg_type) = display_message(self.client.send_authenticated( let (message, msg_type) = display_message(self.client.send_authenticated(
AuthenticatedMessage::Register, check_message_id!(MsgType::RegisterSuccess | MsgType::RegisterFailUsernameTaken)).await?); AuthenticatedMessage::Register, check_message_id!(MsgType::RegisterSuccess | MsgType::RegisterFailUsernameTaken)).await?);
info!("{}", message);
match msg_type { match msg_type {
MsgType::RegisterSuccess => Ok(()), MsgType::RegisterSuccess => Ok(()),
MsgType::RegisterFailUsernameTaken => Err(report!(BankError::AuthenticationError)), MsgType::RegisterFailUsernameTaken => Err(report!(BankError::AuthenticationError)),