From fd21ebf6819dc828e9a0e24298cba02aa307498b Mon Sep 17 00:00:00 2001 From: liuwei Date: Wed, 15 Apr 2026 17:25:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A6=96=E9=A1=B5=E7=83=AD?= =?UTF-8?q?=E9=97=A8=E4=BF=A1=E6=81=AF=E4=B8=BA=E7=A9=BA=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=B9=B6=E5=A2=9E=E5=8A=A0=E5=8E=86=E5=8F=B2=E5=85=9C=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 变更项: 1. 保留热门用户/热门群组/热门插件逻辑,未移除任何热门模块。 2. 为热门数据增加兜底策略:最近N天无数据时自动回退到全量历史Top5。 3. 覆盖插件、用户、群组三类热门榜单,避免首页出现整块空表。 --- db/stats_db.py | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/db/stats_db.py b/db/stats_db.py index fea8d16..49efba7 100644 --- a/db/stats_db.py +++ b/db/stats_db.py @@ -533,7 +533,7 @@ class StatsDBOperator(BaseDBOperator): latency_score = max(0, min(100, ((5000 - avg_response_time) / 4500) * 100)) group_health_score = (success_rate * 0.7) + (latency_score * 0.3) - # 7. 最常用的插件 + # 7. 最常用的插件(优先统计窗口,无数据时回退全量) top_plugins_sql = """ SELECT plugin_name, SUM(total_calls) as total_calls FROM t_plugin_stats @@ -543,8 +543,17 @@ class StatsDBOperator(BaseDBOperator): LIMIT 5 """ top_plugins = self.execute_query(top_plugins_sql, (start_date_str,)) or [] - - # 8. 最活跃的用户 + if not top_plugins: + top_plugins_all_sql = """ + SELECT plugin_name, SUM(total_calls) as total_calls + FROM t_plugin_stats + GROUP BY plugin_name + ORDER BY total_calls DESC + LIMIT 5 + """ + top_plugins = self.execute_query(top_plugins_all_sql) or [] + + # 8. 最活跃的用户(优先统计窗口,无数据时回退全量) top_users_sql = """ SELECT user_id, SUM(total_calls) as total_calls FROM t_user_stats @@ -554,8 +563,17 @@ class StatsDBOperator(BaseDBOperator): LIMIT 5 """ top_users = self.execute_query(top_users_sql, (start_date_str,)) or [] - - # 9. 最活跃的群组 + if not top_users: + top_users_all_sql = """ + SELECT user_id, SUM(total_calls) as total_calls + FROM t_user_stats + GROUP BY user_id + ORDER BY total_calls DESC + LIMIT 5 + """ + top_users = self.execute_query(top_users_all_sql) or [] + + # 9. 最活跃的群组(优先统计窗口,无数据时回退全量) top_groups_sql = """ SELECT group_id, SUM(total_calls) as total_calls FROM t_group_stats @@ -565,6 +583,15 @@ class StatsDBOperator(BaseDBOperator): LIMIT 5 """ top_groups = self.execute_query(top_groups_sql, (start_date_str,)) or [] + if not top_groups: + top_groups_all_sql = """ + SELECT group_id, SUM(total_calls) as total_calls + FROM t_group_stats + GROUP BY group_id + ORDER BY total_calls DESC + LIMIT 5 + """ + top_groups = self.execute_query(top_groups_all_sql) or [] # 返回汇总数据 return {