feat: add real detail views for stats pages
This commit is contained in:
@@ -608,3 +608,54 @@ class StatsDBOperator(BaseDBOperator):
|
||||
"plugin_count": int(result.get("plugin_count") or 0),
|
||||
"last_used_at": result.get("last_used_at") or "",
|
||||
}
|
||||
|
||||
def get_user_plugin_stats(self, user_id: str, days: int = 30, limit: int = 10) -> List[Dict]:
|
||||
"""获取指定用户的插件调用统计"""
|
||||
sql = """
|
||||
SELECT
|
||||
plugin_name,
|
||||
command,
|
||||
SUM(total_calls) AS total_calls,
|
||||
SUM(success_calls) AS success_calls,
|
||||
SUM(failed_calls) AS failed_calls,
|
||||
MIN(first_used_at) AS first_used_at,
|
||||
MAX(last_used_at) AS last_used_at
|
||||
FROM t_user_stats
|
||||
WHERE user_id = %s
|
||||
AND last_used_at >= DATE_SUB(NOW(), INTERVAL %s DAY)
|
||||
GROUP BY plugin_name, command
|
||||
ORDER BY total_calls DESC, last_used_at DESC
|
||||
LIMIT %s
|
||||
"""
|
||||
rows = self.execute_query(sql, (user_id, days, limit)) or []
|
||||
for row in rows:
|
||||
for key in ("first_used_at", "last_used_at"):
|
||||
dt = row.get(key)
|
||||
if isinstance(dt, datetime):
|
||||
row[key] = dt.strftime("%Y-%m-%d %H:%M:%S")
|
||||
return rows
|
||||
|
||||
def get_user_plugin_summary(self, user_id: str, days: int = 30) -> Dict:
|
||||
"""获取指定用户的插件调用摘要"""
|
||||
sql = """
|
||||
SELECT
|
||||
SUM(total_calls) AS total_calls,
|
||||
SUM(success_calls) AS success_calls,
|
||||
SUM(failed_calls) AS failed_calls,
|
||||
COUNT(DISTINCT plugin_name) AS plugin_count,
|
||||
MAX(last_used_at) AS last_used_at
|
||||
FROM t_user_stats
|
||||
WHERE user_id = %s
|
||||
AND last_used_at >= DATE_SUB(NOW(), INTERVAL %s DAY)
|
||||
"""
|
||||
result = self.execute_query(sql, (user_id, days), fetch_one=True) or {}
|
||||
dt = result.get("last_used_at")
|
||||
if isinstance(dt, datetime):
|
||||
result["last_used_at"] = dt.strftime("%Y-%m-%d %H:%M:%S")
|
||||
return {
|
||||
"total_calls": int(result.get("total_calls") or 0),
|
||||
"success_calls": int(result.get("success_calls") or 0),
|
||||
"failed_calls": int(result.get("failed_calls") or 0),
|
||||
"plugin_count": int(result.get("plugin_count") or 0),
|
||||
"last_used_at": result.get("last_used_at") or "",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user