Skip to content
This repository was archived by the owner on May 20, 2025. It is now read-only.

Commit 73eb557

Browse files
committed
Add load_generator and remove web handler
1 parent ea6cbd9 commit 73eb557

5 files changed

Lines changed: 85 additions & 177 deletions

File tree

README.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,2 @@
11
# Webhook Benchmark
22
Brand-new Webhook benchmarker for EEWBot.
3-
4-
> [!CAUTION]
5-
> This fork is not focus to performance!

src/load_generator.rs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
use std::fs::File;
2+
use std::io::{BufRead, BufReader};
3+
use std::path::Path;
4+
use std::sync::Arc;
5+
use std::time::Duration;
6+
7+
use anyhow::{Context as _, Result};
8+
use bytes::Bytes;
9+
use serde_json::json;
10+
11+
use crate::request::{Context, JobSender, Request};
12+
13+
#[derive(Debug, Clone)]
14+
pub struct Targets {
15+
targets: Vec<url::Url>,
16+
}
17+
18+
impl Targets {
19+
pub fn try_new(path: &Path) -> Result<Self> {
20+
let file = File::open(path)?;
21+
22+
let targets: Result<Vec<url::Url>> = BufReader::new(file)
23+
.lines()
24+
.map(|line| {
25+
line.context("Failed to read line")
26+
.and_then(|line| line.parse().context("Failed to parse as URL"))
27+
})
28+
.map(|v| v)
29+
.collect();
30+
31+
let targets = targets?;
32+
33+
Ok(Self { targets })
34+
}
35+
}
36+
37+
pub async fn run(targets: Targets, sender: JobSender, interval: &Duration, message: &str) {
38+
let mut interval = tokio::time::interval(*interval);
39+
40+
let body = Bytes::from(
41+
json!({
42+
"content": message,
43+
})
44+
.to_string()
45+
.into_bytes(),
46+
);
47+
48+
let context = Arc::new(Context {
49+
identity: format!("benchmark#benchmark"),
50+
body,
51+
retry_limit: 0,
52+
});
53+
54+
loop {
55+
for target in &targets.targets {
56+
let _ = interval.tick().await;
57+
58+
sender
59+
.send(Request {
60+
context: context.clone(),
61+
retry_count: 0,
62+
target: target.clone(),
63+
identity: format!("benchmark#benchmark#benchmark"),
64+
})
65+
.await
66+
.unwrap();
67+
}
68+
}
69+
}

src/main.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
1-
use std::net::{Ipv4Addr, SocketAddr};
1+
use std::net::Ipv4Addr;
22

33
use clap::Parser;
4+
use std::path::PathBuf;
45

6+
use crate::load_generator::Targets;
57
use crate::metrics::Metrics;
68

79
mod conn;
810
mod conn_initializer;
911
mod discord;
1012
mod limiter;
13+
mod load_generator;
1114
mod metrics;
1215
mod namesgenerator;
1316
mod reporter;
1417
mod request;
15-
mod web;
1618

1719
#[derive(Debug, Parser)]
1820
struct Cli {
@@ -31,14 +33,17 @@ struct Cli {
3133
#[clap(long, env)]
3234
report_in: url::Url,
3335

34-
#[clap(long, env)]
36+
#[clap(long, env, default_value = "600s")]
3537
report_interval: humantime::Duration,
3638

39+
#[clap(long, env, default_value = "Hello World!")]
40+
message: String,
41+
3742
#[clap(long, env)]
38-
auth_token: String,
43+
targets: PathBuf,
3944

40-
#[clap(long, env, default_value = "0.0.0.0:3000")]
41-
listen: SocketAddr,
45+
#[clap(long, env, default_value = "100ms")]
46+
send_interval: humantime::Duration,
4247
}
4348

4449
#[tokio::main]
@@ -56,12 +61,14 @@ async fn main() {
5661
.with_max_level(tracing::Level::INFO)
5762
.init();
5863

64+
let targets = Targets::try_new(&cli.targets).unwrap();
65+
5966
tokio::spawn({
6067
let metrics = metrics.clone();
6168
async move { reporter::run(&cli.report_interval, &cli.report_in, metrics).await }
6269
});
6370

64-
let (sender, limiter) = conn_initializer::initialize(
71+
let (sender, _limiter) = conn_initializer::initialize(
6572
&cli.retry_ips,
6673
&cli.sender_ips,
6774
cli.multiplier,
@@ -71,7 +78,5 @@ async fn main() {
7178
.await
7279
.expect("failed to initialize connection");
7380

74-
web::run(cli.listen, sender, limiter, &cli.auth_token)
75-
.await
76-
.unwrap();
81+
load_generator::run(targets, sender, &cli.send_interval, &cli.message).await;
7782
}

src/reporter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ pub async fn run(report_interval: &Duration, report_in: &url::Url, metrics: Metr
5454
.build()
5555
.unwrap();
5656

57-
tokio::time::sleep(Duration::from_secs(600)).await;
57+
tokio::time::sleep(Duration::from_secs(60)).await;
5858

5959
let mut interval = tokio::time::interval(*report_interval);
6060

src/web.rs

Lines changed: 0 additions & 163 deletions
This file was deleted.

0 commit comments

Comments
 (0)