#![allow(missing_docs)]
use criterion::{Criterion, criterion_group, criterion_main};
use std::hint::black_box;
use rlg::log::Log;
use tokio::io::AsyncWriteExt;
use rlg::log_format::LogFormat;
use rlg::log_level::LogLevel;
fn new_benchmark(c: &mut Criterion) {
c.bench_function("new", |b| {
b.iter(|| {
let log = Log::build(LogLevel::INFO, "test log message")
.session_id(123)
.time("2023-01-23 14:04:09.881393 +00:00:00")
.component("test")
.format(LogFormat::CLF);
black_box(log);
})
});
}
fn format_benchmark(c: &mut Criterion) {
let clf_log = Log::build(LogLevel::INFO, "test log message")
.session_id(123)
.time("2023-01-23 14:04:09.881393 +00:00:00")
.component("test")
.format(LogFormat::CLF);
let json_log = Log::build(LogLevel::INFO, "test log message")
.session_id(123)
.time("2023-01-23 14:04:09.881393 +00:00:00")
.component("test")
.format(LogFormat::JSON);
c.bench_function("clf_format", |b| b.iter(|| format!("{clf_log}")));
c.bench_function("json_format", |b| {
b.iter(|| format!("{json_log}"))
});
}
fn write_benchmark(c: &mut Criterion) {
let clf_log = Log::build(LogLevel::INFO, "test log message")
.session_id(123)
.time("2023-01-23 14:04:09.881393 +00:00:00")
.component("test")
.format(LogFormat::CLF);
let rt = tokio::runtime::Runtime::new().unwrap();
let mut group = c.benchmark_group("Ingestion Speed");
group.bench_function("Legacy Tokio File IO", |b| {
b.iter(|| {
rt.block_on(async {
let mut file = tokio::fs::OpenOptions::new()
.append(true)
.create(true)
.open("bench_legacy.log")
.await
.unwrap();
let _ = file
.write_all(format!("{clf_log}").as_bytes())
.await;
})
})
});
group.bench_function("Brutalist Lock-Free Engine", |b| {
b.iter(|| {
let event = rlg::engine::LogEvent {
level: LogLevel::INFO,
level_num: 6,
log: clf_log.clone(),
};
rlg::engine::ENGINE.ingest(black_box(event));
})
});
group.finish();
}
criterion_group!(
benches,
new_benchmark,
format_benchmark,
write_benchmark
);
criterion_main!(benches);