github.com/v2fly/tools@v0.100.0/internal/event/export/metric/info.go (about)

     1  // Copyright 2019 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package metric
     6  
     7  import (
     8  	"github.com/v2fly/tools/internal/event/keys"
     9  	"github.com/v2fly/tools/internal/event/label"
    10  )
    11  
    12  // Scalar represents the construction information for a scalar metric.
    13  type Scalar struct {
    14  	// Name is the unique name of this metric.
    15  	Name string
    16  	// Description can be used by observers to describe the metric to users.
    17  	Description string
    18  	// Keys is the set of labels that collectively describe rows of the metric.
    19  	Keys []label.Key
    20  }
    21  
    22  // HistogramInt64 represents the construction information for an int64 histogram metric.
    23  type HistogramInt64 struct {
    24  	// Name is the unique name of this metric.
    25  	Name string
    26  	// Description can be used by observers to describe the metric to users.
    27  	Description string
    28  	// Keys is the set of labels that collectively describe rows of the metric.
    29  	Keys []label.Key
    30  	// Buckets holds the inclusive upper bound of each bucket in the histogram.
    31  	Buckets []int64
    32  }
    33  
    34  // HistogramFloat64 represents the construction information for an float64 histogram metric.
    35  type HistogramFloat64 struct {
    36  	// Name is the unique name of this metric.
    37  	Name string
    38  	// Description can be used by observers to describe the metric to users.
    39  	Description string
    40  	// Keys is the set of labels that collectively describe rows of the metric.
    41  	Keys []label.Key
    42  	// Buckets holds the inclusive upper bound of each bucket in the histogram.
    43  	Buckets []float64
    44  }
    45  
    46  // Count creates a new metric based on the Scalar information that counts
    47  // the number of times the supplied int64 measure is set.
    48  // Metrics of this type will use Int64Data.
    49  func (info Scalar) Count(e *Config, key label.Key) {
    50  	data := &Int64Data{Info: &info, key: nil}
    51  	e.subscribe(key, data.count)
    52  }
    53  
    54  // SumInt64 creates a new metric based on the Scalar information that sums all
    55  // the values recorded on the int64 measure.
    56  // Metrics of this type will use Int64Data.
    57  func (info Scalar) SumInt64(e *Config, key *keys.Int64) {
    58  	data := &Int64Data{Info: &info, key: key}
    59  	e.subscribe(key, data.sum)
    60  }
    61  
    62  // LatestInt64 creates a new metric based on the Scalar information that tracks
    63  // the most recent value recorded on the int64 measure.
    64  // Metrics of this type will use Int64Data.
    65  func (info Scalar) LatestInt64(e *Config, key *keys.Int64) {
    66  	data := &Int64Data{Info: &info, IsGauge: true, key: key}
    67  	e.subscribe(key, data.latest)
    68  }
    69  
    70  // SumFloat64 creates a new metric based on the Scalar information that sums all
    71  // the values recorded on the float64 measure.
    72  // Metrics of this type will use Float64Data.
    73  func (info Scalar) SumFloat64(e *Config, key *keys.Float64) {
    74  	data := &Float64Data{Info: &info, key: key}
    75  	e.subscribe(key, data.sum)
    76  }
    77  
    78  // LatestFloat64 creates a new metric based on the Scalar information that tracks
    79  // the most recent value recorded on the float64 measure.
    80  // Metrics of this type will use Float64Data.
    81  func (info Scalar) LatestFloat64(e *Config, key *keys.Float64) {
    82  	data := &Float64Data{Info: &info, IsGauge: true, key: key}
    83  	e.subscribe(key, data.latest)
    84  }
    85  
    86  // Record creates a new metric based on the HistogramInt64 information that
    87  // tracks the bucketized counts of values recorded on the int64 measure.
    88  // Metrics of this type will use HistogramInt64Data.
    89  func (info HistogramInt64) Record(e *Config, key *keys.Int64) {
    90  	data := &HistogramInt64Data{Info: &info, key: key}
    91  	e.subscribe(key, data.record)
    92  }
    93  
    94  // Record creates a new metric based on the HistogramFloat64 information that
    95  // tracks the bucketized counts of values recorded on the float64 measure.
    96  // Metrics of this type will use HistogramFloat64Data.
    97  func (info HistogramFloat64) Record(e *Config, key *keys.Float64) {
    98  	data := &HistogramFloat64Data{Info: &info, key: key}
    99  	e.subscribe(key, data.record)
   100  }