123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // Copyright 2017, OpenCensus Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- //
- package view
- // AggType represents the type of aggregation function used on a View.
- type AggType int
- // All available aggregation types.
- const (
- AggTypeNone AggType = iota // no aggregation; reserved for future use.
- AggTypeCount // the count aggregation, see Count.
- AggTypeSum // the sum aggregation, see Sum.
- AggTypeDistribution // the distribution aggregation, see Distribution.
- AggTypeLastValue // the last value aggregation, see LastValue.
- )
- func (t AggType) String() string {
- return aggTypeName[t]
- }
- var aggTypeName = map[AggType]string{
- AggTypeNone: "None",
- AggTypeCount: "Count",
- AggTypeSum: "Sum",
- AggTypeDistribution: "Distribution",
- AggTypeLastValue: "LastValue",
- }
- // Aggregation represents a data aggregation method. Use one of the functions:
- // Count, Sum, or Distribution to construct an Aggregation.
- type Aggregation struct {
- Type AggType // Type is the AggType of this Aggregation.
- Buckets []float64 // Buckets are the bucket endpoints if this Aggregation represents a distribution, see Distribution.
- newData func() AggregationData
- }
- var (
- aggCount = &Aggregation{
- Type: AggTypeCount,
- newData: func() AggregationData {
- return &CountData{}
- },
- }
- aggSum = &Aggregation{
- Type: AggTypeSum,
- newData: func() AggregationData {
- return &SumData{}
- },
- }
- )
- // Count indicates that data collected and aggregated
- // with this method will be turned into a count value.
- // For example, total number of accepted requests can be
- // aggregated by using Count.
- func Count() *Aggregation {
- return aggCount
- }
- // Sum indicates that data collected and aggregated
- // with this method will be summed up.
- // For example, accumulated request bytes can be aggregated by using
- // Sum.
- func Sum() *Aggregation {
- return aggSum
- }
- // Distribution indicates that the desired aggregation is
- // a histogram distribution.
- //
- // A distribution aggregation may contain a histogram of the values in the
- // population. The bucket boundaries for that histogram are described
- // by the bounds. This defines len(bounds)+1 buckets.
- //
- // If len(bounds) >= 2 then the boundaries for bucket index i are:
- //
- // [-infinity, bounds[i]) for i = 0
- // [bounds[i-1], bounds[i]) for 0 < i < length
- // [bounds[i-1], +infinity) for i = length
- //
- // If len(bounds) is 0 then there is no histogram associated with the
- // distribution. There will be a single bucket with boundaries
- // (-infinity, +infinity).
- //
- // If len(bounds) is 1 then there is no finite buckets, and that single
- // element is the common boundary of the overflow and underflow buckets.
- func Distribution(bounds ...float64) *Aggregation {
- agg := &Aggregation{
- Type: AggTypeDistribution,
- Buckets: bounds,
- }
- agg.newData = func() AggregationData {
- return newDistributionData(agg)
- }
- return agg
- }
- // LastValue only reports the last value recorded using this
- // aggregation. All other measurements will be dropped.
- func LastValue() *Aggregation {
- return &Aggregation{
- Type: AggTypeLastValue,
- newData: func() AggregationData {
- return &LastValueData{}
- },
- }
- }
|