From b611449b009e88ef2df240148601942a2629c96a Mon Sep 17 00:00:00 2001 From: Fabien83560 Date: Fri, 29 May 2026 15:15:55 +0200 Subject: [PATCH 1/2] feat(cloud): forward enriched metrics fields to SaaS ingest --- apiforgepy/cloud_transport.py | 39 +++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/apiforgepy/cloud_transport.py b/apiforgepy/cloud_transport.py index b4d8455..024e686 100644 --- a/apiforgepy/cloud_transport.py +++ b/apiforgepy/cloud_transport.py @@ -49,21 +49,30 @@ def write(self, rows: list[dict]) -> None: metrics = [ { - "route": r["route"], - "method": r["method"], - "service": self._service, - "env": r["env"], - "release": r.get("release_tag"), - "time": datetime.fromtimestamp(r["bucket_ts"], tz=timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.000Z'), - "calls_total": r["total_calls"], - "calls_2xx": r["status_2xx"], - "calls_4xx": r["status_4xx"], - "calls_5xx": r["status_5xx"], - "lat_p50": r.get("lat_p50"), - "lat_p90": r.get("lat_p90"), - "lat_p99": r.get("lat_p99"), - "lat_avg": r.get("lat_avg"), - "bytes_avg": r.get("bytes_avg"), + "route": r["route"], + "method": r["method"], + "service": self._service, + "env": r["env"], + "release": r.get("release_tag"), + "time": datetime.fromtimestamp(r["bucket_ts"], tz=timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.000Z'), + "calls_total": r["total_calls"], + "calls_2xx": r["status_2xx"], + "calls_3xx": r.get("status_3xx", 0), + "calls_4xx": r["status_4xx"], + "calls_5xx": r["status_5xx"], + "status_dist": r.get("status_dist"), + "lat_p50": r.get("lat_p50"), + "lat_p90": r.get("lat_p90"), + "lat_p99": r.get("lat_p99"), + "lat_avg": r.get("lat_avg"), + "lat_ttfb_p50": r.get("lat_ttfb_p50"), + "lat_ttfb_p90": r.get("lat_ttfb_p90"), + "lat_ttfb_p99": r.get("lat_ttfb_p99"), + "bytes_avg": r.get("bytes_avg"), + "request_size_avg": r.get("request_size_avg"), + "inflight_avg": r.get("inflight_avg"), + "inflight_max": r.get("inflight_max"), + "is_ghost": bool(r.get("is_ghost", 0)), } for r in rows ] From 046124063df39410f266f7410a318e6be7bfa21c Mon Sep 17 00:00:00 2001 From: Fabien83560 Date: Fri, 29 May 2026 15:20:47 +0200 Subject: [PATCH 2/2] chore(release): bump version to 2.2.1 --- apiforgepy/__init__.py | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apiforgepy/__init__.py b/apiforgepy/__init__.py index 17bdd02..0bf4c80 100644 --- a/apiforgepy/__init__.py +++ b/apiforgepy/__init__.py @@ -24,7 +24,7 @@ from .transport import LocalTransport from .cloud_transport import CloudTransport -__version__ = "2.2.0" +__version__ = "2.2.1" __all__ = ["ApiForgeMiddleware"] diff --git a/pyproject.toml b/pyproject.toml index 4bbab17..07cd111 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "apiforgepy" -version = "2.2.0" +version = "2.2.1" description = "API observability & intelligence for FastAPI/Starlette — local-first, privacy-first" readme = "README.md"