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 {