Pipeline stats snapshot — cumulative counters since
construction plus current bucket-state. Cheap O(1).
eventsObserved: total source events that contributed to a
bucket. Includes events replayed at construction from a
non-empty source. Late events (those whose bucket was
already closed under the watermark + grace window) are
silently dropped and do NOT increment this counter — match
the silent-drop shape in LiveSeries.stats for
late-event handling. Never decreases.
bucketsClosed: total buckets finalized (= length of the
closed-event stream, also exposed via length). Never
decreases.
openBuckets: current count of pending (unclosed) buckets.
Equal to #pending.size. Drops back as the watermark
advances and buckets close.
openBucketStart: earliest open bucket's start ms, or
undefined if no buckets are pending.
Note on field omission vs LiveRollingAggregation.stats: this
shape doesn't carry an emissions field because every closed
bucket pushes exactly one event to the output stream — the
count would be identical to bucketsClosed. openBuckets and
openBucketStart give the bucket-lifecycle observability
users actually reach for.
Pipeline stats snapshot — cumulative counters since construction plus current bucket-state. Cheap O(1).
eventsObserved: total source events that contributed to a bucket. Includes events replayed at construction from a non-empty source. Late events (those whose bucket was already closed under the watermark + grace window) are silently dropped and do NOT increment this counter — match the silent-drop shape in LiveSeries.stats for late-event handling. Never decreases.bucketsClosed: total buckets finalized (= length of the closed-event stream, also exposed vialength). Never decreases.openBuckets: current count of pending (unclosed) buckets. Equal to#pending.size. Drops back as the watermark advances and buckets close.openBucketStart: earliest open bucket's start ms, or undefined if no buckets are pending.Note on field omission vs
LiveRollingAggregation.stats: this shape doesn't carry anemissionsfield because every closed bucket pushes exactly one event to the output stream — the count would be identical tobucketsClosed.openBucketsandopenBucketStartgive the bucket-lifecycle observability users actually reach for.