nginx-ipng-stats-plugin (0.8.2-1) unstable; urgency=medium * Pre-release v0.8.2. - New per (source_tag, vip) in-flight gauges: nginx_ipng_active, nginx_ipng_reading, nginx_ipng_writing. Lifecycle: POST_READ handler increments active+reading on each main request, a header filter transitions reading->writing when headers are sent, and a pool cleanup decrements on request finalization. Gauges live in a dedicated rbtree in the shared zone; the slab mutex is taken only on first insert per (source, vip) pair — subsequent transitions are lock-free atomic inc/dec on the cached node. Subrequests and internal redirects do not double-count. Gauges are emitted in both Prometheus (`gauge` typed) and JSON (`"gauges":{...}` per record) scrape outputs. Invariant: reading + writing = active. -- Pim van Pelt Thu, 23 Apr 2026 12:00:00 +0200 nginx-ipng-stats-plugin (0.7.2-1) unstable; urgency=medium * Pre-release v0.7.2. - Listen wrapper now strips socket-level options (reuseport, bind, backlog=, rcvbuf=, sndbuf=, setfib=, fastopen=, accept_filter=, deferred, ipv6only=, so_keepalive=) from cf->args when a sockaddr recurs under a different server block. Previously this pattern — typical with a shared `include listens.conf;` across vhosts — tripped nginx's "duplicate listen options for " check because those options are one-shot per kernel socket. The first cscf now owns the options on the shared kernel socket and later cscfs merge cleanly via ngx_http_add_server. A NOTICE is logged each time socket options are stripped. This makes `reuseport` usable with the shared-include deployment pattern from docs/user-guide.md, which helps worker load-balancing on busy hosts. -- Pim van Pelt Sun, 19 Apr 2026 16:30:00 +0200 nginx-ipng-stats-plugin (0.7.1-1) unstable; urgency=medium * Pre-release v0.7.1. - Listen wrapper now deduplicates on (server block, sockaddr) across both plain and device-tagged listens. A plain `listen 80;` and `listen 80 device=eth0 ...;` in the same server block now coexist, matching the runtime reality under the IP_PKTINFO attribution model (all same-sockaddr listens collapse to one wildcard kernel socket). Docs updated to drop the "must be device-tagged" restriction. -- Pim van Pelt Sun, 19 Apr 2026 10:00:00 +0200 nginx-ipng-stats-plugin (0.7.0-1) unstable; urgency=medium * Pre-release v0.7.0. - New ipng_stats_rescan_interval directive (default 60s, 0 to disable). Per-worker timer that re-resolves every device= → ifindex mapping, self-healing attribution after interface teardown/recreate without requiring nginx -s reload. - New nginx_ipng_ifindex_misses_total counter: connections whose ingress ifindex didn't match any configured binding. Surfaces stale mappings and genuinely-unconfigured interfaces. - Expose the existing nginx_ipng_zone_full_events_total and nginx_ipng_flushes_total meta counters in both the Prometheus and JSON scrape outputs. JSON gains a top-level "meta" object alongside "records" (schema unchanged, additive). -- Pim van Pelt Sat, 18 Apr 2026 19:36:36 +0200 nginx-ipng-stats-plugin (0.6.0-1) unstable; urgency=medium * Pre-release v0.6.0. -- Pim van Pelt Sat, 18 Apr 2026 15:30:40 +0200 nginx-ipng-stats-plugin (0.5.0-1) unstable; urgency=medium * Pre-release v0.5.0. -- Pim van Pelt Sat, 18 Apr 2026 14:38:25 +0200 nginx-ipng-stats-plugin (0.4.0-1) unstable; urgency=medium * Pre-release v0.4.0. -- Pim van Pelt Sat, 18 Apr 2026 13:15:15 +0200 nginx-ipng-stats-plugin (0.3.0-1) unstable; urgency=medium * Pre-release v0.3.0. -- Pim van Pelt Sat, 18 Apr 2026 11:47:26 +0200 nginx-ipng-stats-plugin (0.2.0-1) unstable; urgency=medium * Reduce scrape cardinality. - Status codes are collapsed to six class lanes (1xx/2xx/3xx/4xx/5xx/unknown) on the counter key. Per-(source, vip) counter cardinality is now bounded at six regardless of response mix. - Histograms drop the code label entirely and aggregate across classes per (source, vip). - New nginx_ipng_latency_total counter (with code class label) exposes per-class mean latency via latency_total / requests_total. - New nginx_ipng_bytes_in and nginx_ipng_bytes_out histograms; bucket bounds configurable via the new ipng_stats_byte_buckets directive. - JSON schema bumped to 2. Records are now per-(source, vip) with an inner `classes` map. - Operators needing per-three-digit-code breakdowns should consume ipng_stats_logtail off-host; the stats zone intentionally trades that resolution for a smaller, bounded scrape. -- Pim van Pelt Fri, 17 Apr 2026 12:36:57 +0000 nginx-ipng-stats-plugin (0.1.0-1) unstable; urgency=medium * Initial release. - ngx_http_ipng_stats_module: per-VIP, per-device HTTP traffic counters, attributed via SO_BINDTODEVICE on per-interface listening sockets, exposed as Prometheus text and JSON from a single scrape endpoint. - Debian package libnginx-mod-http-ipng-stats builds against the target release's nginx-dev headers with --with-compat and loads into stock upstream nginx without recompiling nginx itself. -- Pim van Pelt Thu, 16 Apr 2026 00:00:00 +0000