github.com/safing/portbase@v0.19.5/metrics/metric_histogram.go (about)

     1  package metrics
     2  
     3  import (
     4  	vm "github.com/VictoriaMetrics/metrics"
     5  )
     6  
     7  // Histogram is a histogram metric.
     8  type Histogram struct {
     9  	*metricBase
    10  	*vm.Histogram
    11  }
    12  
    13  // NewHistogram registers a new histogram metric.
    14  func NewHistogram(id string, labels map[string]string, opts *Options) (*Histogram, error) {
    15  	// Ensure that there are options.
    16  	if opts == nil {
    17  		opts = &Options{}
    18  	}
    19  
    20  	// Make base.
    21  	base, err := newMetricBase(id, labels, *opts)
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  
    26  	// Create metric struct.
    27  	m := &Histogram{
    28  		metricBase: base,
    29  	}
    30  
    31  	// Create metric in set
    32  	m.Histogram = m.set.NewHistogram(m.LabeledID())
    33  
    34  	// Register metric.
    35  	err = register(m)
    36  	if err != nil {
    37  		return nil, err
    38  	}
    39  
    40  	return m, nil
    41  }