Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: aggregate request metrics #55

Merged
merged 66 commits into from
Dec 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
df14bae
mod measure
hayas1 Dec 20, 2024
47becd9
rename module
hayas1 Dec 20, 2024
2357b48
aggregate
hayas1 Dec 20, 2024
889fc3d
bytes
hayas1 Dec 20, 2024
5a13fe7
trait
hayas1 Dec 20, 2024
1d53c1d
response aggregate
hayas1 Dec 20, 2024
77b06ae
count / passed aggregate
hayas1 Dec 20, 2024
0f59020
duration aggregate
hayas1 Dec 21, 2024
1b916ea
response aggregate
hayas1 Dec 21, 2024
dbf7255
ref
hayas1 Dec 21, 2024
f0ed6de
pass aggregate
hayas1 Dec 21, 2024
47ac1d3
evaluate aggregate
hayas1 Dec 21, 2024
c4202df
todo
hayas1 Dec 21, 2024
b2e66a7
type name
hayas1 Dec 21, 2024
8eb9baa
modify test
hayas1 Dec 21, 2024
5b26029
into iter
hayas1 Dec 21, 2024
7e5de42
metrics
hayas1 Dec 21, 2024
195ddf6
metrics
hayas1 Dec 21, 2024
8858575
WIP: case
hayas1 Dec 21, 2024
3276117
use hdrhistogram crate
hayas1 Dec 21, 2024
157f6a8
implement `merge`
hayas1 Dec 21, 2024
947a7f1
aggregate in `CaseReport`
hayas1 Dec 21, 2024
229be23
impl `Default`
hayas1 Dec 21, 2024
285fad8
implement recursive aggregate
hayas1 Dec 21, 2024
507edc1
pri
hayas1 Dec 21, 2024
248960a
modify testcase
hayas1 Dec 21, 2024
c5afe6c
update testcase comment
hayas1 Dec 21, 2024
979fbcc
report metrics (now, error)
hayas1 Dec 21, 2024
f592912
TODO
hayas1 Dec 21, 2024
78d422a
give priority to add / other
hayas1 Dec 21, 2024
0471649
unit
hayas1 Dec 21, 2024
3e02d43
service example
hayas1 Dec 21, 2024
8166842
remove TODO
hayas1 Dec 22, 2024
4ebc68d
`console_aggregate` default implementation
hayas1 Dec 22, 2024
033ca82
rename trait and implementation
hayas1 Dec 22, 2024
00b86a5
Aggregate struct
hayas1 Dec 22, 2024
4958c82
colorize console report
hayas1 Dec 22, 2024
b953079
todo
hayas1 Dec 22, 2024
6b026f0
writeln
hayas1 Dec 22, 2024
1b3be59
update threshold
hayas1 Dec 22, 2024
f95c049
summary of all requests
hayas1 Dec 22, 2024
b26112e
measure or not
hayas1 Dec 23, 2024
6be4b54
add evaluate aggregate test
hayas1 Dec 23, 2024
6a7d01e
sigfig < 5 is allowed
hayas1 Dec 23, 2024
cb80fd7
quantile from cmd
hayas1 Dec 23, 2024
dc8240a
percentile as f64 (for p99.9)
hayas1 Dec 23, 2024
abf086b
RunCommandError::NanPercentile
hayas1 Dec 23, 2024
e31c580
rename
hayas1 Dec 23, 2024
c59a124
move to top of the file
hayas1 Dec 23, 2024
ee7a83d
resolve todo
hayas1 Dec 23, 2024
6b03a75
add measure test
hayas1 Dec 23, 2024
ffdcbef
micros
hayas1 Dec 23, 2024
99aeb7b
implement github markdown measure report
hayas1 Dec 23, 2024
497edf5
implement github markdown measure report test
hayas1 Dec 23, 2024
344be9f
cargo fmt
hayas1 Dec 23, 2024
c9927d4
Classify / Classified
hayas1 Dec 23, 2024
fa30e30
classification
hayas1 Dec 24, 2024
e6359d0
use Classification
hayas1 Dec 24, 2024
41efea5
pass_rate
hayas1 Dec 24, 2024
4c948ed
arg: Query
hayas1 Dec 24, 2024
e229889
MdStyle
hayas1 Dec 24, 2024
f7bb655
remove MdStyle
hayas1 Dec 24, 2024
d411914
writeln!
hayas1 Dec 24, 2024
9b76195
instant
hayas1 Dec 25, 2024
9117f55
remove Option / Result
hayas1 Dec 25, 2024
88aa3e7
modify test
hayas1 Dec 25, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 58 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ jsonptr = { version = "0.6.3", optional = true }
clap = { version = "4.5.23", features = ["derive"], optional = true }
console = { version = "0.15.10", optional = true }
nom = "7.1.3"
# average = "0.15.1" # Quantile (that use p2 algorithm) do not impl Extend
hdrhistogram = "7.5.4"


[dev-dependencies]
Expand Down
26 changes: 26 additions & 0 deletions examples/service.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
use std::process::ExitCode;

#[tokio::main]
#[cfg(all(feature = "yaml", feature = "json", feature = "console-report"))]
async fn main() -> Result<ExitCode, Box<dyn std::error::Error + Send + Sync>> {
use axum::{body::Body, extract::Request};
use relentless::{interface::command::Relentless, Error};
use relentless_dev_server::route;

let cmd = Relentless {
file: vec!["examples/config/assault.yaml".into(), "examples/config/compare.yaml".into()],
..Default::default()
};
let configs = cmd.configs().map_err(Error::from)?;
let service = route::app_with(Default::default());
let report = cmd.assault_with::<_, Request<Body>>(configs, service).await?;

cmd.report(&report)?;
Ok(report.exit_code(&cmd))
}

#[cfg(not(all(feature = "yaml", feature = "json", feature = "console-report")))]
fn main() -> ExitCode {
eprintln!("Insufficient features for this example");
ExitCode::FAILURE
}
26 changes: 26 additions & 0 deletions src/assault/error.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
use std::time::{Duration, SystemTimeError};

use thiserror::Error;

use super::measure::metrics::MeasuredResponse;

pub type RequestResult<Res> = Result<MeasuredResponse<Res>, RequestError>;

#[derive(Error, Debug)]
pub enum RequestError {
#[error("request timeout: {0:?}")]
Timeout(Duration),

#[error(transparent)]
FailToMakeRequest(Box<dyn std::error::Error + Send + Sync>),

#[error(transparent)]
NoReady(Box<dyn std::error::Error + Send + Sync>),
#[error(transparent)]
InnerServiceError(Box<dyn std::error::Error + Send + Sync>),

#[error(transparent)]
FailToMeasureLatency(SystemTimeError),
#[error(transparent)]
Unknown(Box<dyn std::error::Error + Send + Sync>),
}
2 changes: 1 addition & 1 deletion src/assault/evaluator.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use super::{destinations::Destinations, messages::Messages, metrics::RequestResult};
use super::{destinations::Destinations, error::RequestResult, messages::Messages};

#[allow(async_fn_in_trait)] // TODO #[warn(async_fn_in_trait)] by default
pub trait Evaluator<Res> {
Expand Down
Loading
Loading