Documentation
¶
Overview ¶
Package opencensus normalizes the use of OpenCensus through local, "sharded" aggregation that is GENERIC over the labels key K.
Instead of calling stats.Record per event (each call builds a tag.Map and sends a recordReq to the global worker), we accumulate per key K across N shards and emit in bursts every `interval`. The key K is any comparable struct you define; a Schema[K] (Strategy pattern) projects it onto OpenCensus.
Three variants behind the SAME Aggregator[K] interface (SumCount and Distribution here; LastValue in lastvalue.go). The hot path (Add) does not allocate on the heap after a key is seen for the first time; the flush swaps the map to avoid blocking writers and reuses the per-key context via ctxCache.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Aggregator ¶
type Aggregator[K comparable] interface { Add(k K, value float64) Stop() }
Aggregator is the common interface, generic over the labels key K.
type Config ¶
type Config[K comparable] struct { Shards int // rounded up to a power of 2. Default 16. Interval time.Duration // flush cadence. Default 20s. Schema Schema[K] // key projection strategy }
Config holds the settings shared by every aggregator variant: the shard count, the flush interval and the key projection Schema.
type CountAggregator ¶
type CountAggregator[K comparable] struct { // contains filtered or unexported fields }
CountAggregator accumulates the running count per key K across sharded stores and flushes both to OpenCensus on the configured interval.
func NewCountAggregator ¶
func NewCountAggregator[K comparable](cfg CountConfig[K]) *CountAggregator[K]
NewCountAggregator builds a CountAggregator from cfg, applying defaults and starting the background flusher.
func (*CountAggregator[K]) Add ¶
func (a *CountAggregator[K]) Add(k K, _ float64)
Add adds value to the running increments its count.
func (*CountAggregator[K]) Stop ¶
func (a *CountAggregator[K]) Stop()
Stop halts the background flusher.
type CountConfig ¶
type CountConfig[K comparable] struct { Config[K] CountMeasure *stats.Float64Measure }
CountConfig configures a SumCountAggregator, pairing the shared Config with the measures used to record the accumulated count.
type DistributionAggregator ¶
type DistributionAggregator[K comparable] struct { // contains filtered or unexported fields }
DistributionAggregator collects per-key samples across sharded stores and flushes them to OpenCensus on the configured interval. When MaxSamplesPerKey is set it keeps a bounded reservoir sample per key.
func NewDistributionAggregator ¶
func NewDistributionAggregator[K comparable](cfg DistributionConfig[K]) *DistributionAggregator[K]
NewDistributionAggregator builds a DistributionAggregator from cfg, applying defaults and starting the background flusher.
func (*DistributionAggregator[K]) Add ¶
func (a *DistributionAggregator[K]) Add(k K, value float64)
Add records value as a sample for k, using reservoir sampling once the per-key sample cap is reached.
func (*DistributionAggregator[K]) Stop ¶
func (a *DistributionAggregator[K]) Stop()
Stop halts the background flusher.
type DistributionConfig ¶
type DistributionConfig[K comparable] struct { Config[K] Measure *stats.Float64Measure MaxSamplesPerKey int // 0 = exact; >0 = reservoir sampling (bounded memory) }
DistributionConfig configures a DistributionAggregator with the shared Config, the measure to record samples against and the optional per-key sample cap.
type LastValueAggregator ¶
type LastValueAggregator[K comparable] struct { // contains filtered or unexported fields }
LastValueAggregator keeps the last value recorded per key K across sharded stores and flushes it to OpenCensus on the configured interval.
func NewLastValueAggregator ¶
func NewLastValueAggregator[K comparable](cfg LastValueConfig[K]) *LastValueAggregator[K]
NewLastValueAggregator builds a LastValueAggregator from cfg, applying defaults and starting the background flusher.
func (*LastValueAggregator[K]) Add ¶
func (a *LastValueAggregator[K]) Add(k K, value float64)
Add overwrites the value of the key. The shard lock serializes the writes: "last-write-wins" is well defined by the acquisition order.
func (*LastValueAggregator[K]) Stop ¶
func (a *LastValueAggregator[K]) Stop()
Stop halts the background flusher.
type LastValueConfig ¶
type LastValueConfig[K comparable] struct { Config[K] // Measure must be backed by a view of type view.LastValue(). Measure *stats.Float64Measure }
LastValueConfig configures a LastValueAggregator: it embeds the shared Config and the measure whose view must be of type view.LastValue().
type Schema ¶
type Schema[K comparable] interface { Hash(k K) uint64 Mutators(k K) []tag.Mutator }
Schema is the strategy that projects a labels key K onto OpenCensus: Hash distributes the key across shards on the hot path, and Mutators builds the tag.Mutator values used to derive the recording context.
type SumAggregator ¶
type SumAggregator[K comparable] struct { // contains filtered or unexported fields }
SumAggregator accumulates the running sum per key K across sharded stores and flushes both to OpenCensus on the configured interval.
func NewSumAggregator ¶
func NewSumAggregator[K comparable](cfg SumConfig[K]) *SumAggregator[K]
NewSumAggregator builds a SumCountAggregator from cfg, applying defaults and starting the background flusher.
func (*SumAggregator[K]) Add ¶
func (a *SumAggregator[K]) Add(k K, value float64)
Add adds value to the running sum for k.
func (*SumAggregator[K]) Stop ¶
func (a *SumAggregator[K]) Stop()
Stop halts the background flusher.
type SumConfig ¶
type SumConfig[K comparable] struct { Config[K] SumMeasure *stats.Float64Measure }
SumConfig configures a SumAggregator, pairing the shared Config with the measures used to record the accumulated sum and count.