This commit is contained in:
Mateusz Gruszczyński committed 2026-10-04 11:15:58 +02:00
1 parent 87e571c170
commit fa7abc9e53
308 files changed
+49746 -50237

No files matched your search

+6 -59
View File
@@ -114,8 +114,7 @@ impl Counters {
self.response_bytes = self.response_bytes.saturating_add(sample.response_bytes);
self.methods.add(&sample.method, 1);
self.statuses.add(&format!("{}xx", sample.status / 100), 1);
self.routes
.add(sample.route.as_deref().unwrap_or("(main)"), 1);
self.routes.add(sample.route.as_deref().unwrap_or("(main)"), 1);
self.paths.add(&sample.path, 1);
self.cache.add(sample.cache, 1);
if let Some(country) = sample.country.as_deref() {
@@ -150,8 +149,7 @@ impl Counters {
duration_ms: self.duration_ms,
request_bytes: self.request_bytes,
response_bytes: self.response_bytes,
mean_duration_ms: (self.requests > 0)
.then(|| self.duration_ms as f64 / self.requests as f64),
mean_duration_ms: (self.requests > 0).then(|| self.duration_ms as f64 / self.requests as f64),
countries: self.countries.view(),
user_agents: self.user_agents.view(),
client_ips: self.client_ips.view(),
@@ -241,12 +239,7 @@ impl Analytics {
}
total.view()
} else {
state
.vhosts
.get(selected)
.cloned()
.unwrap_or_default()
.view()
state.vhosts.get(selected).cloned().unwrap_or_default().view()
};
View {
scope: selected.to_owned(),
@@ -271,12 +264,8 @@ impl Analytics {
let mut state = self.state.lock().unwrap_or_else(|e| e.into_inner());
match scope.filter(|value| !value.is_empty() && *value != "*") {
Some(scope) => {
if state.vhosts.remove(scope).is_some() {
1
} else {
0
}
}
if state.vhosts.remove(scope).is_some() { 1 } else { 0 }
},
None => {
let count = state.vhosts.len();
state.vhosts.clear();
@@ -298,46 +287,4 @@ fn truncate(value: &str, max_bytes: usize) -> String {
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn top_table_is_bounded() {
let mut table = TopTable::default();
for i in 0..1000 {
table.add(&format!("value-{i}"), 1);
}
assert_eq!(table.values.len(), TOP_CAPACITY);
}
#[test]
fn labels_are_truncated_at_utf8_boundaries() {
let value = "ą".repeat(200);
let trimmed = truncate(&value, 255);
assert!(trimmed.len() <= 255);
assert!(trimmed.is_char_boundary(trimmed.len()));
}
#[test]
fn client_ip_is_exposed_in_the_bounded_top_view() {
let mut counters = Counters::default();
counters.record(Sample {
vhost: "site".into(),
route: None,
method: "GET".into(),
path: "/".into(),
client_ip: Some("203.0.113.7".into()),
status: 200,
duration_ms: 2,
request_bytes: 10,
response_bytes: 20,
cache: "MISS",
user_agent: Some("test-agent".into()),
country: Some("PL".into()),
});
let view = counters.view();
assert_eq!(view.client_ips.len(), 1);
assert_eq!(view.client_ips[0].value, "203.0.113.7");
assert_eq!(view.client_ips[0].count, 1);
}
}
include!("traffic/tests.rs");