fix(usage): 完善 cache-affinity 时间线的用户名回退与模型空值兜底

- 当 auth 用户查询失败时回退到历史 username,避免时间线丢失用户信息
- SQL 投影对 usage.model 使用 COALESCE 兜底空值
- IntervalTimelineCard 在刷新间隔为 0 时跳过定时刷新
- Usage 页面关闭时间线卡片的自动轮询
This commit is contained in:
fawney19
2026-04-19 16:07:01 +08:00
parent 41b51f10a9
commit c302dfe42d
5 changed files with 107 additions and 6 deletions

View File

@@ -86,11 +86,20 @@ pub(super) async fn build_admin_usage_cache_affinity_interval_timeline_response(
if include_user_info && user_id.is_none() {
let user_ids: Vec<_> = grouped.keys().cloned().collect();
let user_map = load_usage_cache_affinity_usernames(state, &user_ids).await?;
for (user_id, username) in user_map {
usernames_by_user_id.insert(user_id, username);
let mut should_use_legacy_usernames = !state.has_auth_user_data_reader();
match load_usage_cache_affinity_usernames(state, &user_ids).await {
Ok(user_map) => {
usernames_by_user_id.extend(user_map);
}
Err(err) => {
tracing::warn!(
error = ?err,
"admin usage cache affinity interval timeline user lookup failed"
);
should_use_legacy_usernames = true;
}
}
if !state.has_auth_user_data_reader() {
if should_use_legacy_usernames {
for (user_id, username) in legacy_usernames_by_user_id {
usernames_by_user_id.entry(user_id).or_insert(username);
}