fix(usage): track provider limit refreshes per account

This commit is contained in:
R.D.
2026-03-30 21:17:24 -04:00
parent 028874fd05
commit e7addec0a1
3 changed files with 20 additions and 12 deletions
@@ -88,7 +88,7 @@ export default function ProviderLimits() {
if (typeof window === "undefined") return false;
return localStorage.getItem(LS_AUTO_REFRESH) === "true";
});
const [lastUpdated, setLastUpdated] = useState(null);
const [lastRefreshedAt, setLastRefreshedAt] = useState<Record<string, string>>({});
const [refreshingAll, setRefreshingAll] = useState(false);
const [countdown, setCountdown] = useState(120);
const [initialLoading, setInitialLoading] = useState(true);
@@ -181,6 +181,10 @@ export default function ProviderLimits() {
raw: data,
},
}));
setLastRefreshedAt((prev) => ({
...prev,
[connectionId]: new Date().toISOString(),
}));
} catch (error) {
setErrors((prev) => ({
...prev,
@@ -195,8 +199,7 @@ export default function ProviderLimits() {
const refreshProvider = useCallback(
async (connectionId, provider) => {
await fetchQuota(connectionId, provider);
setLastUpdated(new Date());
await fetchQuota(connectionId, provider, { force: true });
},
[fetchQuota]
);
@@ -216,9 +219,8 @@ export default function ProviderLimits() {
const chunkSize = 5;
for (let i = 0; i < usageConnections.length; i += chunkSize) {
const chunk = usageConnections.slice(i, i + chunkSize);
await Promise.all(chunk.map((conn) => fetchQuota(conn.id, conn.provider)));
await Promise.all(chunk.map((conn) => fetchQuota(conn.id, conn.provider, { force: true })));
}
setLastUpdated(new Date());
} catch (error) {
console.error("Error refreshing all:", error);
} finally {
@@ -520,7 +522,7 @@ export default function ProviderLimits() {
{/* Table header */}
<div
className="items-center px-4 py-2.5 border-b border-border text-[11px] font-semibold uppercase tracking-wider text-text-muted"
style={{ display: "grid", gridTemplateColumns: "280px 1fr 100px 48px" }}
style={{ display: "grid", gridTemplateColumns: "280px 1fr 128px 48px" }}
>
<div>{t("account")}</div>
<div>{t("modelQuotas")}</div>
@@ -539,6 +541,7 @@ export default function ProviderLimits() {
};
const tierMeta = tierByConnection[conn.id] || normalizePlanTier(null);
const resolvedPlan = resolvedPlanByConnection[conn.id];
const refreshedAt = lastRefreshedAt[conn.id];
return (
<div
@@ -546,7 +549,7 @@ export default function ProviderLimits() {
className="items-center px-4 py-3.5 transition-[background] duration-150 hover:bg-black/[0.03] dark:hover:bg-white/[0.02]"
style={{
display: "grid",
gridTemplateColumns: "280px 1fr 100px 48px",
gridTemplateColumns: "280px 1fr 128px 48px",
borderBottom: !isLast ? "1px solid var(--color-border)" : "none",
}}
>
@@ -670,11 +673,16 @@ export default function ProviderLimits() {
)}
</div>
{/* Last Used */}
{/* Last Refreshed */}
<div className="text-center text-[11px] text-text-muted">
{lastUpdated ? (
{refreshedAt ? (
<span>
{lastUpdated.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })}
{new Date(refreshedAt).toLocaleTimeString([], {
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false,
})}
</span>
) : (
"-"
+1 -1
View File
@@ -2382,7 +2382,7 @@
"loadingQuotas": "Loading...",
"account": "Account",
"modelQuotas": "Model Quotas",
"lastUsed": "Last Used",
"lastUsed": "Last Refreshed",
"actions": "Actions",
"refreshQuota": "Refresh quota",
"today": "Today",
+1 -1
View File
@@ -2376,7 +2376,7 @@
"loadingQuotas": "正在加载...",
"account": "账户",
"modelQuotas": "模型配额",
"lastUsed": "最后使用",
"lastUsed": "最后刷新",
"actions": "操作",
"refreshQuota": "刷新配额",
"today": "今天",