| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package metric |
| |
| import ( |
| "golang.org/x/tools/internal/event/keys" |
| "golang.org/x/tools/internal/event/label" |
| ) |
| |
| // Scalar represents the construction information for a scalar metric. |
| type Scalar struct { |
| // Name is the unique name of this metric. |
| Name string |
| // Description can be used by observers to describe the metric to users. |
| Description string |
| // Keys is the set of labels that collectively describe rows of the metric. |
| Keys []label.Key |
| } |
| |
| // HistogramInt64 represents the construction information for an int64 histogram metric. |
| type HistogramInt64 struct { |
| // Name is the unique name of this metric. |
| Name string |
| // Description can be used by observers to describe the metric to users. |
| Description string |
| // Keys is the set of labels that collectively describe rows of the metric. |
| Keys []label.Key |
| // Buckets holds the inclusive upper bound of each bucket in the histogram. |
| Buckets []int64 |
| } |
| |
| // HistogramFloat64 represents the construction information for an float64 histogram metric. |
| type HistogramFloat64 struct { |
| // Name is the unique name of this metric. |
| Name string |
| // Description can be used by observers to describe the metric to users. |
| Description string |
| // Keys is the set of labels that collectively describe rows of the metric. |
| Keys []label.Key |
| // Buckets holds the inclusive upper bound of each bucket in the histogram. |
| Buckets []float64 |
| } |
| |
| // Count creates a new metric based on the Scalar information that counts |
| // the number of times the supplied int64 measure is set. |
| // Metrics of this type will use Int64Data. |
| func (info Scalar) Count(e *Config, key label.Key) { |
| data := &Int64Data{Info: &info, key: nil} |
| e.subscribe(key, data.count) |
| } |
| |
| // SumInt64 creates a new metric based on the Scalar information that sums all |
| // the values recorded on the int64 measure. |
| // Metrics of this type will use Int64Data. |
| func (info Scalar) SumInt64(e *Config, key *keys.Int64) { |
| data := &Int64Data{Info: &info, key: key} |
| e.subscribe(key, data.sum) |
| } |
| |
| // LatestInt64 creates a new metric based on the Scalar information that tracks |
| // the most recent value recorded on the int64 measure. |
| // Metrics of this type will use Int64Data. |
| func (info Scalar) LatestInt64(e *Config, key *keys.Int64) { |
| data := &Int64Data{Info: &info, IsGauge: true, key: key} |
| e.subscribe(key, data.latest) |
| } |
| |
| // SumFloat64 creates a new metric based on the Scalar information that sums all |
| // the values recorded on the float64 measure. |
| // Metrics of this type will use Float64Data. |
| func (info Scalar) SumFloat64(e *Config, key *keys.Float64) { |
| data := &Float64Data{Info: &info, key: key} |
| e.subscribe(key, data.sum) |
| } |
| |
| // LatestFloat64 creates a new metric based on the Scalar information that tracks |
| // the most recent value recorded on the float64 measure. |
| // Metrics of this type will use Float64Data. |
| func (info Scalar) LatestFloat64(e *Config, key *keys.Float64) { |
| data := &Float64Data{Info: &info, IsGauge: true, key: key} |
| e.subscribe(key, data.latest) |
| } |
| |
| // Record creates a new metric based on the HistogramInt64 information that |
| // tracks the bucketized counts of values recorded on the int64 measure. |
| // Metrics of this type will use HistogramInt64Data. |
| func (info HistogramInt64) Record(e *Config, key *keys.Int64) { |
| data := &HistogramInt64Data{Info: &info, key: key} |
| e.subscribe(key, data.record) |
| } |
| |
| // Record creates a new metric based on the HistogramFloat64 information that |
| // tracks the bucketized counts of values recorded on the float64 measure. |
| // Metrics of this type will use HistogramFloat64Data. |
| func (info HistogramFloat64) Record(e *Config, key *keys.Float64) { |
| data := &HistogramFloat64Data{Info: &info, key: key} |
| e.subscribe(key, data.record) |
| } |