diff --git a/usage-dashboard/usage-dashboard.html b/usage-dashboard/usage-dashboard.html
index 302e1eb..90038bb 100644
--- a/usage-dashboard/usage-dashboard.html
+++ b/usage-dashboard/usage-dashboard.html
@@ -214,6 +214,7 @@
+
@@ -332,7 +333,7 @@ const STRINGS = {
en: {
title: "CLIProxyAPI Usage Dashboard",
rangeToday:"Today", range1h:"Last 1 hour", range5h:"Last 5 hours",
- range24h:"Last 24 hours", range7d:"Last 7 days",
+ range24h:"Last 24 hours", range7d:"Last 7 days", range30d:"Last 30 days",
btnRefresh:"Refresh", btnQuota:"Refresh Quota",
kpiRequests:"Requests / Tasks", kpiTotal:"Total Tokens",
kpiTotalSub:"Input + Output + Reasoning", kpiInput:"Input Tokens",
@@ -354,7 +355,7 @@ const STRINGS = {
vi: {
title: "Thống Kê Sử Dụng CLIProxyAPI",
rangeToday:"Hôm nay", range1h:"1 giờ qua", range5h:"5 giờ qua",
- range24h:"24 giờ qua", range7d:"7 ngày qua",
+ range24h:"24 giờ qua", range7d:"7 ngày qua", range30d:"30 ngày qua",
btnRefresh:"Làm mới", btnQuota:"Làm mới hạn mức",
kpiRequests:"Yêu cầu / Tác vụ", kpiTotal:"Tổng Tokens",
kpiTotalSub:"Đầu vào + Đầu ra + Suy luận", kpiInput:"Tokens đầu vào",
diff --git a/usage-dashboard/usage-dashboard.py b/usage-dashboard/usage-dashboard.py
index 4927826..165b5a4 100644
--- a/usage-dashboard/usage-dashboard.py
+++ b/usage-dashboard/usage-dashboard.py
@@ -568,6 +568,8 @@ def range_bounds(name):
start = now - dt.timedelta(hours=24)
elif name == "7d":
start = now - dt.timedelta(days=7)
+ elif name == "30d":
+ start = now - dt.timedelta(days=30)
else:
start = now.replace(hour=0, minute=0, second=0, microsecond=0)
return start.astimezone(dt.timezone.utc).timestamp(), now.astimezone(dt.timezone.utc).timestamp()
@@ -817,7 +819,7 @@ def main():
quota_p = sub.add_parser("quota", help="Show current quota snapshots")
quota_p.add_argument("--force", action="store_true")
report_p = sub.add_parser("report", help="Print usage summary as JSON")
- report_p.add_argument("range", choices=["today", "1h", "5h", "24h", "7d"])
+ report_p.add_argument("range", choices=["today", "1h", "5h", "24h", "7d", "30d"])
args = parser.parse_args()
if args.cmd == "init":
init_db()