feat(admin): manual request-records cleanup with typed confirmation

This commit is contained in:
Kayphoon
2026-05-13 00:36:43 +08:00
parent 8714d93d4b
commit 15800d7a80
21 changed files with 1064 additions and 28 deletions

View File

@@ -18,8 +18,8 @@ pub use types::{
UsageAuditListQuery, UsageAuditSummaryQuery, UsageBodyCaptureResult, UsageBodyCaptureState,
UsageBodyCaptureStorage, UsageBodyField, UsageBreakdownGroupBy, UsageBreakdownSummaryQuery,
UsageCacheAffinityHitSummaryQuery, UsageCacheAffinityIntervalGroupBy,
UsageCacheAffinityIntervalQuery, UsageCacheHitSummaryQuery, UsageCleanupSummary,
UsageCleanupWindow, UsageCostSavingsSummaryQuery, UsageDailyHeatmapQuery,
UsageCacheAffinityIntervalQuery, UsageCacheHitSummaryQuery, UsageCleanupPreviewCounts,
UsageCleanupSummary, UsageCleanupWindow, UsageCostSavingsSummaryQuery, UsageDailyHeatmapQuery,
UsageDashboardDailyBreakdownQuery, UsageDashboardProviderCountsQuery,
UsageDashboardSummaryQuery, UsageErrorDistributionQuery, UsageLeaderboardGroupBy,
UsageLeaderboardQuery, UsageMonitoringErrorCountQuery, UsageMonitoringErrorListQuery,

View File

@@ -1692,6 +1692,14 @@ pub trait UsageWriteRepository: Send + Sync {
let _ = (window, batch_size, auto_delete_expired_keys);
Ok(UsageCleanupSummary::default())
}
async fn preview_usage_cleanup(
&self,
window: &UsageCleanupWindow,
) -> Result<UsageCleanupPreviewCounts, crate::DataLayerError> {
let _ = window;
Ok(UsageCleanupPreviewCounts::default())
}
}
pub trait UsageRepository: UsageReadRepository + UsageWriteRepository + Send + Sync {}
@@ -1722,6 +1730,14 @@ pub struct UsageCleanupWindow {
pub log_cutoff: DateTime<Utc>,
}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct UsageCleanupPreviewCounts {
pub detail: u64,
pub compressed: u64,
pub header: u64,
pub log: u64,
}
fn parse_u64(value: i32, field_name: &str) -> Result<u64, crate::DataLayerError> {
u64::try_from(value).map_err(|_| {
crate::DataLayerError::UnexpectedValue(format!("invalid {field_name}: {value}"))