diff --git a/packages/tracker/meshnet_tracker/billing.py b/packages/tracker/meshnet_tracker/billing.py index 0a87865..d3e9442 100644 --- a/packages/tracker/meshnet_tracker/billing.py +++ b/packages/tracker/meshnet_tracker/billing.py @@ -453,13 +453,12 @@ class BillingLedger: with self._lock: return self._node_pending.get(wallet, 0.0) - def usage_for(self, api_keys: list[str], *, recent_limit: int | None = None) -> dict: - """Aggregate charge history for a set of API keys (dashboard view).""" + def usage_totals_for(self, api_keys: list[str]) -> dict: + """Aggregate charge totals without per-request records (dashboard summary).""" keys = set(api_keys) requests = 0 total_tokens = 0 total_cost = 0.0 - records: list[dict] = [] with self._lock: for event in self._event_log: if event.get("type") != "charge" or event.get("api_key") not in keys: @@ -467,6 +466,20 @@ class BillingLedger: requests += 1 total_tokens += int(event.get("total_tokens", 0)) total_cost += float(event.get("cost", 0.0)) + return { + "requests": requests, + "total_tokens": total_tokens, + "total_cost": total_cost, + } + + def usage_for(self, api_keys: list[str], *, recent_limit: int | None = None) -> dict: + """Aggregate charge history for a set of API keys (dashboard view).""" + keys = set(api_keys) + records: list[dict] = [] + with self._lock: + for event in self._event_log: + if event.get("type") != "charge" or event.get("api_key") not in keys: + continue records.append({ "api_key": event["api_key"], "model": event.get("model"), @@ -476,9 +489,9 @@ class BillingLedger: }) recent = records[-recent_limit:] if recent_limit is not None else records return { - "requests": requests, - "total_tokens": total_tokens, - "total_cost": total_cost, + "requests": len(records), + "total_tokens": sum(int(r.get("total_tokens", 0)) for r in records), + "total_cost": sum(float(r.get("cost", 0.0)) for r in records), "records": records, "recent": recent, } diff --git a/packages/tracker/meshnet_tracker/dashboard.html b/packages/tracker/meshnet_tracker/dashboard.html index a302228..ea30ac6 100644 --- a/packages/tracker/meshnet_tracker/dashboard.html +++ b/packages/tracker/meshnet_tracker/dashboard.html @@ -219,6 +219,7 @@

meshnet tracker

+