ci: outdated

This commit is contained in:
nym21
2026-01-27 17:52:40 +01:00
parent 88145d08e5
commit 730e83472a
12 changed files with 500 additions and 36 deletions

View File

@@ -1,6 +1,7 @@
use std::time::Duration;
use std::{net::SocketAddr, time::Duration};
use axum::{
Extension,
body::Body,
extract::{Query, State},
http::{HeaderMap, StatusCode, Uri},
@@ -11,7 +12,7 @@ use quick_cache::sync::GuardResult;
use crate::{
Result,
api::metrics::{CACHE_CONTROL, MAX_WEIGHT},
api::metrics::{CACHE_CONTROL, max_weight},
extended::HeaderMapExtended,
};
@@ -20,11 +21,12 @@ use super::AppState;
pub async fn handler(
uri: Uri,
headers: HeaderMap,
Extension(addr): Extension<SocketAddr>,
Query(params): Query<MetricSelection>,
State(AppState { query, cache, .. }): State<AppState>,
) -> Result<Response> {
// Phase 1: Search and resolve metadata (cheap)
let resolved = query.run(move |q| q.resolve(params, MAX_WEIGHT)).await?;
let resolved = query.run(move |q| q.resolve(params, max_weight(&addr))).await?;
let format = resolved.format();
let etag = resolved.etag();

View File

@@ -1,6 +1,7 @@
use std::time::Duration;
use std::{net::SocketAddr, time::Duration};
use axum::{
Extension,
body::Body,
extract::{Query, State},
http::{HeaderMap, StatusCode, Uri},
@@ -11,7 +12,7 @@ use quick_cache::sync::GuardResult;
use crate::{
Result,
api::metrics::{CACHE_CONTROL, MAX_WEIGHT},
api::metrics::{CACHE_CONTROL, max_weight},
extended::HeaderMapExtended,
};
@@ -20,11 +21,12 @@ use super::AppState;
pub async fn handler(
uri: Uri,
headers: HeaderMap,
Extension(addr): Extension<SocketAddr>,
Query(params): Query<MetricSelection>,
State(AppState { query, cache, .. }): State<AppState>,
) -> Result<Response> {
// Phase 1: Search and resolve metadata (cheap)
let resolved = query.run(move |q| q.resolve(params, MAX_WEIGHT)).await?;
let resolved = query.run(move |q| q.resolve(params, max_weight(&addr))).await?;
let format = resolved.format();
let etag = resolved.etag();

View File

@@ -1,6 +1,7 @@
use std::time::Duration;
use std::{net::SocketAddr, time::Duration};
use axum::{
Extension,
body::Body,
extract::{Query, State},
http::{HeaderMap, StatusCode, Uri},
@@ -11,7 +12,7 @@ use quick_cache::sync::GuardResult;
use crate::{
Result,
api::metrics::{CACHE_CONTROL, MAX_WEIGHT},
api::metrics::{CACHE_CONTROL, max_weight},
extended::HeaderMapExtended,
};
@@ -20,11 +21,12 @@ use super::AppState;
pub async fn handler(
uri: Uri,
headers: HeaderMap,
Extension(addr): Extension<SocketAddr>,
Query(params): Query<MetricSelection>,
State(AppState { query, cache, .. }): State<AppState>,
) -> Result<Response> {
// Phase 1: Search and resolve metadata (cheap)
let resolved = query.run(move |q| q.resolve(params, MAX_WEIGHT)).await?;
let resolved = query.run(move |q| q.resolve(params, max_weight(&addr))).await?;
let format = resolved.format();
let etag = resolved.etag();

View File

@@ -1,5 +1,8 @@
use std::net::SocketAddr;
use aide::axum::{ApiRouter, routing::get_with};
use axum::{
Extension,
extract::{Path, Query, State},
http::{HeaderMap, Uri},
response::{IntoResponse, Response},
@@ -23,6 +26,16 @@ const MAX_WEIGHT: usize = 65 * 10_000;
/// Cache control header for metric data responses
const CACHE_CONTROL: &str = "public, max-age=1, must-revalidate";
/// Returns the max weight for a request based on the client address.
/// Localhost requests have no weight limit.
fn max_weight(addr: &SocketAddr) -> usize {
if addr.ip().is_loopback() {
usize::MAX
} else {
MAX_WEIGHT
}
}
pub trait ApiMetricsRoutes {
fn add_metrics_routes(self) -> Self;
}
@@ -159,6 +172,7 @@ impl ApiMetricsRoutes for ApiRouter<AppState> {
get_with(
async |uri: Uri,
headers: HeaderMap,
addr: Extension<SocketAddr>,
state: State<AppState>,
Path(path): Path<MetricWithIndex>,
Query(range): Query<DataRangeFormat>|
@@ -166,6 +180,7 @@ impl ApiMetricsRoutes for ApiRouter<AppState> {
data::handler(
uri,
headers,
addr,
Query(MetricSelection::from((path.index, path.metric, range))),
state,
)
@@ -189,8 +204,8 @@ impl ApiMetricsRoutes for ApiRouter<AppState> {
.api_route(
"/api/metrics/bulk",
get_with(
|uri, headers, query, state| async move {
bulk::handler(uri, headers, query, state).await.into_response()
|uri, headers, addr, query, state| async move {
bulk::handler(uri, headers, addr, query, state).await.into_response()
},
|op| op
.id("get_metrics")
@@ -210,6 +225,7 @@ impl ApiMetricsRoutes for ApiRouter<AppState> {
get_with(
async |uri: Uri,
headers: HeaderMap,
addr: Extension<SocketAddr>,
Path(variant): Path<String>,
Query(range): Query<DataRangeFormat>,
state: State<AppState>|
@@ -228,7 +244,7 @@ impl ApiMetricsRoutes for ApiRouter<AppState> {
Metrics::from(split.collect::<Vec<_>>().join(separator)),
range,
));
legacy::handler(uri, headers, Query(params), state)
legacy::handler(uri, headers, addr, Query(params), state)
.await
.into_response()
},
@@ -251,11 +267,12 @@ impl ApiMetricsRoutes for ApiRouter<AppState> {
get_with(
async |uri: Uri,
headers: HeaderMap,
addr: Extension<SocketAddr>,
Query(params): Query<MetricSelectionLegacy>,
state: State<AppState>|
-> Response {
let params: MetricSelection = params.into();
legacy::handler(uri, headers, Query(params), state)
legacy::handler(uri, headers, addr, Query(params), state)
.await
.into_response()
},