From 96d8d01c71422f904aaeae7e561e8cb6579c386c Mon Sep 17 00:00:00 2001 From: b3nw Date: Thu, 22 Jan 2026 21:54:41 +0000 Subject: [PATCH] fix(quota): add reset_time_iso to quota stats API response --- src/rotator_library/usage_manager.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/rotator_library/usage_manager.py b/src/rotator_library/usage_manager.py index a46dcfbc..ceb8f5b6 100644 --- a/src/rotator_library/usage_manager.py +++ b/src/rotator_library/usage_manager.py @@ -1211,6 +1211,23 @@ def _format_timestamp_local(self, ts: Optional[float]) -> Optional[str]: except (OSError, ValueError, OverflowError): return None + def _format_timestamp_iso(self, ts: Optional[float]) -> Optional[str]: + """ + Format Unix timestamp as ISO 8601 UTC string for API responses. + + Args: + ts: Unix timestamp or None + + Returns: + Formatted string like "2025-12-07T14:30:17Z" or None + """ + if ts is None: + return None + try: + return datetime.fromtimestamp(ts, tz=timezone.utc).isoformat() + except (OSError, ValueError, OverflowError): + return None + def _add_readable_timestamps(self, data: Dict) -> Dict: """ Add human-readable timestamp fields to usage data before saving. @@ -3723,6 +3740,9 @@ async def get_stats_for_endpoint( "approx_cost": model_stats.get("approx_cost", 0.0), "window_start_ts": model_stats.get("window_start_ts"), "quota_reset_ts": model_stats.get("quota_reset_ts"), + "reset_time_iso": self._format_timestamp_iso( + model_stats.get("quota_reset_ts") + ), # Quota baseline fields (Antigravity-specific) "baseline_remaining_fraction": model_stats.get( "baseline_remaining_fraction"