fuchsia / third_party / github.com / census-instrumentation / opencensus-go / refs/heads/upstream/v0.20.x / . / stats / view / aggregation.go

// 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. | |

// | |

// An 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 { | |

return &Aggregation{ | |

Type: AggTypeDistribution, | |

Buckets: bounds, | |

newData: func() AggregationData { | |

return newDistributionData(bounds) | |

}, | |

} | |

} | |

// 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{} | |

}, | |

} | |

} |