MCPcopy Create free account
hub / github.com/ZyphrZero/z.ai2api_python / collect_admin_stats

Function collect_admin_stats

app/admin/stats.py:86–184  ·  view source on GitHub ↗

聚合管理后台所需的 Token 与请求统计。

(
    provider: str,
    *,
    token_dao: Optional[TokenDAO] = None,
    request_log_dao: Optional[RequestLogDAO] = None,
    token_pool: Any = _TOKEN_POOL_SENTINEL,
    trend_window: str = DEFAULT_TREND_WINDOW,
)

Source from the content-addressed store, hash-verified

84
85
86async def collect_admin_stats(
87 provider: str,
88 *,
89 token_dao: Optional[TokenDAO] = None,
90 request_log_dao: Optional[RequestLogDAO] = None,
91 token_pool: Any = _TOKEN_POOL_SENTINEL,
92 trend_window: str = DEFAULT_TREND_WINDOW,
93) -> Dict[str, Any]:
94 """聚合管理后台所需的 Token 与请求统计。"""
95 token_dao = token_dao or get_token_dao()
96 request_log_dao = request_log_dao or get_request_log_dao()
97 if token_pool is _TOKEN_POOL_SENTINEL:
98 token_pool = get_token_pool()
99 trend_window = normalize_trend_window(trend_window)
100
101 token_counts = await token_dao.get_provider_token_counts(provider)
102 request_stats = await request_log_dao.get_provider_request_stats(provider)
103 usage_trend = await request_log_dao.get_provider_usage_trend(
104 provider,
105 window=trend_window,
106 )
107
108 pool_status: Dict[str, Any] = {}
109 if isinstance(token_pool, TokenPool) or hasattr(token_pool, "get_pool_status"):
110 pool_status = token_pool.get_pool_status() if token_pool else {}
111
112 total_tokens = _coerce_int(token_counts.get("total_tokens"))
113 enabled_tokens = _coerce_int(token_counts.get("enabled_tokens"))
114 user_tokens = _coerce_int(token_counts.get("user_tokens"))
115 guest_tokens = _coerce_int(token_counts.get("guest_tokens"))
116 unknown_tokens = _coerce_int(token_counts.get("unknown_tokens"))
117
118 pool_total_tokens = _coerce_int(pool_status.get("total_tokens"))
119 if pool_total_tokens == 0 and token_pool is None:
120 pool_total_tokens = max(0, enabled_tokens - guest_tokens)
121
122 available_tokens = _coerce_int(pool_status.get("available_tokens"))
123 healthy_tokens = _coerce_int(pool_status.get("healthy_tokens"))
124 unhealthy_tokens = _coerce_int(pool_status.get("unhealthy_tokens"))
125
126 total_requests = _coerce_int(request_stats.get("total_requests"))
127 successful_requests = _coerce_int(request_stats.get("successful_requests"))
128 failed_requests = _coerce_int(request_stats.get("failed_requests"))
129 input_tokens = _coerce_int(request_stats.get("input_tokens"))
130 output_tokens = _coerce_int(request_stats.get("output_tokens"))
131 total_consumed_tokens = _coerce_int(request_stats.get("total_tokens"))
132 cache_creation_tokens = _coerce_int(
133 request_stats.get("cache_creation_tokens")
134 )
135 cache_read_tokens = _coerce_int(request_stats.get("cache_read_tokens"))
136 cache_creation_requests = _coerce_int(
137 request_stats.get("cache_creation_requests")
138 )
139 cache_hit_requests = _coerce_int(request_stats.get("cache_hit_requests"))
140 average_latency = round(float(request_stats.get("avg_duration") or 0.0), 2)
141 average_first_token_latency = round(
142 float(request_stats.get("avg_first_token_time") or 0.0),
143 2,

Calls 11

get_token_daoFunction · 0.90
get_request_log_daoFunction · 0.90
get_token_poolFunction · 0.90
normalize_trend_windowFunction · 0.85
format_compact_numberFunction · 0.85
calculate_success_rateFunction · 0.85
_coerce_intFunction · 0.70
get_pool_statusMethod · 0.45