наблюдаемость: завершить базовый контур Community
Добавить структурированные журналы, метрики, трассировку и безопасный канал критических ошибок. Усилить границы рантайма, тесты, проверку зависимостей и сценарии развёртывания.
This commit is contained in:
@@ -6,7 +6,7 @@ use axum::{
|
||||
middleware::Next,
|
||||
response::Response,
|
||||
};
|
||||
use crank_runtime::RateLimitRejection;
|
||||
use crank_runtime::{RateLimitCheckError, RateLimitRejection};
|
||||
|
||||
use crate::{error::ApiError, state::AppState};
|
||||
|
||||
@@ -25,11 +25,16 @@ pub async fn apply_api_rate_limit(
|
||||
peer_ip,
|
||||
state.trust_forwarded_headers,
|
||||
);
|
||||
if let Err(rejection) = state.api_rate_limiter.check(&key).await {
|
||||
return Err(ApiError::rate_limited_with_context(
|
||||
"request rate limit exceeded",
|
||||
rejection_context(rejection),
|
||||
));
|
||||
if let Err(error) = state.api_rate_limiter.check(&key).await {
|
||||
return match error {
|
||||
RateLimitCheckError::Rejected(rejection) => Err(ApiError::rate_limited_with_context(
|
||||
"request rate limit exceeded",
|
||||
rejection_context(rejection),
|
||||
)),
|
||||
RateLimitCheckError::StoreUnavailable => {
|
||||
Err(ApiError::internal("rate limit service unavailable"))
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Ok(next.run(request).await)
|
||||
|
||||
Reference in New Issue
Block a user