CLI Proxy API Management Center
-
-
diff --git a/usage-dashboard/usage-dashboard.py b/usage-dashboard/usage-dashboard.py
index beef44d..6116a1b 100644
--- a/usage-dashboard/usage-dashboard.py
+++ b/usage-dashboard/usage-dashboard.py
@@ -292,10 +292,13 @@ def refresh_quota(force=False):
age = latest_quota_age()
if not force and age is not None and age < cfg["quota_refresh_seconds"]:
return 0
-
+
+ # Quét lại thư mục để lấy danh sách file JSON hiện tại (không dùng cache)
files = auth_files()
- # ✅ LOG 1: Số lượng auth files tìm thấy
- print(f"refresh_quota: found {len(files)} auth files in {JSON_DIR}", flush=True)
+ print(f"refresh_quota: rescanned {JSON_DIR} — found {len(files)} auth file(s)", flush=True)
+ if not files:
+ print(f"refresh_quota: no auth files found, nothing to fetch", flush=True)
+ return 0
now = dt.datetime.now(dt.timezone.utc)
inserted = 0
@@ -508,18 +511,39 @@ def query_summary(range_name):
}
+def active_emails():
+ """Trả về tập hợp email (hoặc basename) của các file JSON còn tồn tại trong JSON_DIR."""
+ emails = set()
+ for path in auth_files():
+ try:
+ auth = json.load(open(path))
+ email = auth.get("email") or os.path.basename(path)
+ emails.add(email)
+ except Exception:
+ emails.add(os.path.basename(path))
+ return emails
+
+
def latest_quotas(force=False):
if force:
refresh_quota(force=True)
+ # Chỉ lấy quota của những account có file JSON còn tồn tại hiện tại
+ emails = active_emails()
+ if not emails:
+ return []
+ placeholders = ",".join("?" * len(emails))
with db_connect() as conn:
rows = conn.execute(
- """
+ f"""
SELECT q.* FROM quota_snapshots q
JOIN (
- SELECT email, MAX(ts_epoch) ts FROM quota_snapshots GROUP BY email
+ SELECT email, MAX(ts_epoch) ts FROM quota_snapshots
+ WHERE email IN ({placeholders})
+ GROUP BY email
) latest ON latest.email = q.email AND latest.ts = q.ts_epoch
- ORDER BY email
- """
+ ORDER BY q.email
+ """,
+ list(emails),
).fetchall()
return [dict(row) for row in rows]