diff --git a/benches/bench.rs b/benches/bench.rs index fac6b08..bea7d22 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -1,7 +1,9 @@ use bytes::Bytes; use criterion::{criterion_group, criterion_main, Criterion}; -use http::{HeaderName, HeaderValue}; +use http::{HeaderName, HeaderValue, StatusCode}; +use pingap::cache::{convert_headers, HttpResponse}; use pingora::http::ResponseHeader; +use std::time::{SystemTime, UNIX_EPOCH}; fn insert_bytes_header(c: &mut Criterion) { c.bench_function("bytes header", |b| { @@ -60,5 +62,40 @@ fn insert_header_name(c: &mut Criterion) { }); } -criterion_group!(benches, insert_bytes_header, insert_header_name,); +fn get_response_header(c: &mut Criterion) { + c.bench_function("get response header for http response", |b| { + let resp = HttpResponse { + status: StatusCode::OK, + body: Bytes::from("Hello world!"), + max_age: Some(3600), + created_at: Some( + SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_secs() + - 10, + ), + private: Some(true), + headers: Some( + convert_headers(&[ + "Contont-Type: application/json".to_string(), + "Content-Encoding: gzip".to_string(), + ]) + .unwrap(), + ), + }; + + b.iter(|| { + let value = resp.clone(); + value.get_response_header().unwrap(); + }); + }); +} + +criterion_group!( + benches, + insert_bytes_header, + insert_header_name, + get_response_header +); criterion_main!(benches); diff --git a/src/cache/http_response.rs b/src/cache/http_response.rs index 36a5e9e..a4621a3 100644 --- a/src/cache/http_response.rs +++ b/src/cache/http_response.rs @@ -5,7 +5,7 @@ use http::StatusCode; use pingora::{http::ResponseHeader, proxy::Session}; use std::time::{SystemTime, UNIX_EPOCH}; -#[derive(Default, Debug)] +#[derive(Default, Debug, Clone)] pub struct HttpResponse { pub status: StatusCode, pub body: Bytes, @@ -16,7 +16,7 @@ pub struct HttpResponse { } impl HttpResponse { - fn get_response_header(&self) -> pingora::Result { + pub fn get_response_header(&self) -> pingora::Result { let fix_size = 3; let size = self .headers diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..bb4f5a0 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,4 @@ +pub mod cache; +pub mod config; +pub mod proxy; +pub mod utils;