This commit is contained in:
Mateusz Gruszczyński committed 2026-11-07 13:13:25 +01:00
1 parent 3a384baa6b
commit 672c84bc13
21 files changed
+450 -70

No files matched your search

+52 -18
View File
@@ -237,11 +237,22 @@ async fn events(
#[serde(default, deny_unknown_fields)]
struct TrafficQuery {
vhost: Option<String>,
view: Option<String>,
}
async fn traffic_status(
State(state): State<Arc<App>>,
Query(query): Query<TrafficQuery>,
) -> Result<Json<Value>, ApiError> {
let live = match query.view.as_deref() {
None => false,
Some("live") => true,
_ => {
return Err(ApiError(
StatusCode::BAD_REQUEST,
"invalid traffic view".into(),
));
}
};
let snapshot = state.config.load_full();
if query.vhost.as_ref().is_some_and(|id| {
id != "*"
@@ -258,14 +269,8 @@ async fn traffic_status(
));
}
let scope = query.vhost.as_deref().unwrap_or("*");
let vhosts = snapshot
.envelope
.config
.vhosts
.iter()
.map(|vhost| json!({"id": vhost.id, "hosts": vhost.frontend.hosts}))
.collect::<Vec<_>>();
Ok(Json(json!({
let mut payload = json!({
"revision": snapshot.envelope.revision,
"scope": scope,
"since": "process_start",
"settings": {
@@ -273,9 +278,19 @@ async fn traffic_status(
"capture_country": snapshot.envelope.config.logging.capture_country
},
"geoip": state.geoip.load().view(),
"analytics": state.traffic.view(Some(scope)),
"vhosts": vhosts
})))
"analytics": state.traffic.view(Some(scope))
});
if live {
return Ok(Json(payload));
}
payload["vhosts"] = json!(snapshot
.envelope
.config
.vhosts
.iter()
.map(|vhost| json!({"id": vhost.id, "hosts": vhost.frontend.hosts}))
.collect::<Vec<_>>());
Ok(Json(payload))
}
#[derive(Default, Deserialize)]
@@ -284,11 +299,22 @@ struct CacheQuery {
vhost: Option<String>,
offset: Option<usize>,
limit: Option<usize>,
view: Option<String>,
}
async fn cache_status(
State(state): State<Arc<App>>,
Query(query): Query<CacheQuery>,
) -> Result<Json<Value>, ApiError> {
let live = match query.view.as_deref() {
None => false,
Some("live") => true,
_ => {
return Err(ApiError(
StatusCode::BAD_REQUEST,
"invalid cache view".into(),
));
}
};
let snapshot = state.config.load_full();
if query
.vhost
@@ -300,16 +326,24 @@ async fn cache_status(
"unknown vhost cache scope".into(),
));
}
let scopes: Vec<_> = snapshot.envelope.config.vhosts.iter().map(|vhost| {
json!({"id":vhost.id, "hosts":vhost.frontend.hosts, "metrics":state.cache.scope_view(&vhost.id),
"settings":vhost.cache.resolve(&snapshot.envelope.config.cache).ok()})
}).collect();
let dashboard = state.cache.dashboard(
query.vhost.as_deref(),
query.offset.unwrap_or(0).min(16384),
query.limit.unwrap_or(50),
);
Ok(Json(
json!({"settings":snapshot.envelope.config.cache, "metrics":state.cache.view(), "vhosts":scopes, "dashboard":dashboard, "bans":state.cache.bans()}),
))
let mut payload = json!({
"revision": snapshot.envelope.revision,
"metrics": state.cache.view(),
"dashboard": dashboard,
"bans": state.cache.bans()
});
if live {
return Ok(Json(payload));
}
payload["settings"] = json!(snapshot.envelope.config.cache);
payload["vhosts"] = json!(snapshot.envelope.config.vhosts.iter().map(|vhost| {
json!({"id":vhost.id, "hosts":vhost.frontend.hosts, "metrics":state.cache.scope_view(&vhost.id),
"settings":vhost.cache.resolve(&snapshot.envelope.config.cache).ok()})
}).collect::<Vec<_>>());
Ok(Json(payload))
}