feat(data): 废弃 usage 表 HTTP/结算列,迁移至 settlement_snapshots 与 http_audits

- 新增迁移 20260413030000:标记 billing_status、finalized_at、request_headers 等列为 DEPRECATED
- 更新 baseline_v2.sql 同步废弃注释,BASELINE_V2_CUTOFF_VERSION 升至 20260413030000
- usage/sql.rs:inline body 阈值归零,强制所有 body 走 blob 存储;upsert 时清空 legacy header/output_price 列
- 查询层优先读 usage_settlement_snapshots 的 billing_status、finalized_at、output_price_per_1m
- runtime.rs:stale usage 处理同步写入 usage_settlement_snapshots;SELECT FOR UPDATE 改为 FOR UPDATE OF usage
- 前端:PerformanceAnalysis 页面重构为实时面板,新增 prometheus 工具函数与 monitoring API
This commit is contained in:
fawney19
2026-04-13 14:53:46 +08:00
parent e46629d11a
commit 6aa16ec792
16 changed files with 1587 additions and 87 deletions
+39 -19
View File
@@ -184,16 +184,18 @@ WHERE ledgers.billing_date = $1
"#;
const SELECT_STALE_PENDING_USAGE_BATCH_SQL: &str = r#"
SELECT
id,
request_id,
status,
billing_status
usage.id,
usage.request_id,
usage.status,
COALESCE(usage_settlement_snapshots.billing_status, usage.billing_status) AS billing_status
FROM usage
WHERE status = ANY($1)
AND created_at < $2
ORDER BY created_at ASC, id ASC
LEFT JOIN usage_settlement_snapshots
ON usage_settlement_snapshots.request_id = usage.request_id
WHERE usage.status = ANY($1)
AND usage.created_at < $2
ORDER BY usage.created_at ASC, usage.id ASC
LIMIT $3
FOR UPDATE SKIP LOCKED
FOR UPDATE OF usage SKIP LOCKED
"#;
const SELECT_COMPLETED_PENDING_REQUEST_IDS_SQL: &str = r#"
SELECT DISTINCT request_id
@@ -222,17 +224,35 @@ SET status = 'failed',
WHERE id = $1
"#;
const UPDATE_FAILED_VOID_STALE_USAGE_SQL: &str = r#"
UPDATE usage
SET status = 'failed',
status_code = 504,
error_message = $2,
billing_status = 'void',
finalized_at = $3,
total_cost_usd = 0,
request_cost_usd = 0,
actual_total_cost_usd = 0,
actual_request_cost_usd = 0
WHERE id = $1
WITH updated_usage AS (
UPDATE usage
SET status = 'failed',
status_code = 504,
error_message = $2,
billing_status = 'void',
finalized_at = $3,
total_cost_usd = 0,
request_cost_usd = 0,
actual_total_cost_usd = 0,
actual_request_cost_usd = 0
WHERE id = $1
RETURNING request_id
)
INSERT INTO usage_settlement_snapshots (
request_id,
billing_status,
finalized_at
)
SELECT request_id, 'void', $3
FROM updated_usage
ON CONFLICT (request_id)
DO UPDATE SET
billing_status = EXCLUDED.billing_status,
finalized_at = COALESCE(
usage_settlement_snapshots.finalized_at,
EXCLUDED.finalized_at
),
updated_at = NOW()
"#;
const UPDATE_RECOVERED_STREAMING_CANDIDATES_SQL: &str = r#"
UPDATE request_candidates