asyncfloat64.go raw

   1  // Copyright The OpenTelemetry Authors
   2  // SPDX-License-Identifier: Apache-2.0
   3  
   4  package metric // import "go.opentelemetry.io/otel/metric"
   5  
   6  import (
   7  	"context"
   8  
   9  	"go.opentelemetry.io/otel/metric/embedded"
  10  )
  11  
  12  // Float64Observable describes a set of instruments used asynchronously to
  13  // record float64 measurements once per collection cycle. Observations of
  14  // these instruments are only made within a callback.
  15  //
  16  // Warning: Methods may be added to this interface in minor releases.
  17  type Float64Observable interface {
  18  	Observable
  19  
  20  	float64Observable()
  21  }
  22  
  23  // Float64ObservableCounter is an instrument used to asynchronously record
  24  // increasing float64 measurements once per collection cycle. Observations are
  25  // only made within a callback for this instrument. The value observed is
  26  // assumed the to be the cumulative sum of the count.
  27  //
  28  // Warning: Methods may be added to this interface in minor releases. See
  29  // package documentation on API implementation for information on how to set
  30  // default behavior for
  31  // unimplemented methods.
  32  type Float64ObservableCounter interface {
  33  	// Users of the interface can ignore this. This embedded type is only used
  34  	// by implementations of this interface. See the "API Implementations"
  35  	// section of the package documentation for more information.
  36  	embedded.Float64ObservableCounter
  37  
  38  	Float64Observable
  39  }
  40  
  41  // Float64ObservableCounterConfig contains options for asynchronous counter
  42  // instruments that record float64 values.
  43  type Float64ObservableCounterConfig struct {
  44  	description string
  45  	unit        string
  46  	callbacks   []Float64Callback
  47  }
  48  
  49  // NewFloat64ObservableCounterConfig returns a new
  50  // [Float64ObservableCounterConfig] with all opts applied.
  51  func NewFloat64ObservableCounterConfig(opts ...Float64ObservableCounterOption) Float64ObservableCounterConfig {
  52  	var config Float64ObservableCounterConfig
  53  	for _, o := range opts {
  54  		config = o.applyFloat64ObservableCounter(config)
  55  	}
  56  	return config
  57  }
  58  
  59  // Description returns the configured description.
  60  func (c Float64ObservableCounterConfig) Description() string {
  61  	return c.description
  62  }
  63  
  64  // Unit returns the configured unit.
  65  func (c Float64ObservableCounterConfig) Unit() string {
  66  	return c.unit
  67  }
  68  
  69  // Callbacks returns the configured callbacks.
  70  func (c Float64ObservableCounterConfig) Callbacks() []Float64Callback {
  71  	return c.callbacks
  72  }
  73  
  74  // Float64ObservableCounterOption applies options to a
  75  // [Float64ObservableCounterConfig]. See [Float64ObservableOption] and
  76  // [InstrumentOption] for other options that can be used as a
  77  // Float64ObservableCounterOption.
  78  type Float64ObservableCounterOption interface {
  79  	applyFloat64ObservableCounter(Float64ObservableCounterConfig) Float64ObservableCounterConfig
  80  }
  81  
  82  // Float64ObservableUpDownCounter is an instrument used to asynchronously
  83  // record float64 measurements once per collection cycle. Observations are only
  84  // made within a callback for this instrument. The value observed is assumed
  85  // the to be the cumulative sum of the count.
  86  //
  87  // Warning: Methods may be added to this interface in minor releases. See
  88  // package documentation on API implementation for information on how to set
  89  // default behavior for unimplemented methods.
  90  type Float64ObservableUpDownCounter interface {
  91  	// Users of the interface can ignore this. This embedded type is only used
  92  	// by implementations of this interface. See the "API Implementations"
  93  	// section of the package documentation for more information.
  94  	embedded.Float64ObservableUpDownCounter
  95  
  96  	Float64Observable
  97  }
  98  
  99  // Float64ObservableUpDownCounterConfig contains options for asynchronous
 100  // counter instruments that record float64 values.
 101  type Float64ObservableUpDownCounterConfig struct {
 102  	description string
 103  	unit        string
 104  	callbacks   []Float64Callback
 105  }
 106  
 107  // NewFloat64ObservableUpDownCounterConfig returns a new
 108  // [Float64ObservableUpDownCounterConfig] with all opts applied.
 109  func NewFloat64ObservableUpDownCounterConfig(
 110  	opts ...Float64ObservableUpDownCounterOption,
 111  ) Float64ObservableUpDownCounterConfig {
 112  	var config Float64ObservableUpDownCounterConfig
 113  	for _, o := range opts {
 114  		config = o.applyFloat64ObservableUpDownCounter(config)
 115  	}
 116  	return config
 117  }
 118  
 119  // Description returns the configured description.
 120  func (c Float64ObservableUpDownCounterConfig) Description() string {
 121  	return c.description
 122  }
 123  
 124  // Unit returns the configured unit.
 125  func (c Float64ObservableUpDownCounterConfig) Unit() string {
 126  	return c.unit
 127  }
 128  
 129  // Callbacks returns the configured callbacks.
 130  func (c Float64ObservableUpDownCounterConfig) Callbacks() []Float64Callback {
 131  	return c.callbacks
 132  }
 133  
 134  // Float64ObservableUpDownCounterOption applies options to a
 135  // [Float64ObservableUpDownCounterConfig]. See [Float64ObservableOption] and
 136  // [InstrumentOption] for other options that can be used as a
 137  // Float64ObservableUpDownCounterOption.
 138  type Float64ObservableUpDownCounterOption interface {
 139  	applyFloat64ObservableUpDownCounter(Float64ObservableUpDownCounterConfig) Float64ObservableUpDownCounterConfig
 140  }
 141  
 142  // Float64ObservableGauge is an instrument used to asynchronously record
 143  // instantaneous float64 measurements once per collection cycle. Observations
 144  // are only made within a callback for this instrument.
 145  //
 146  // Warning: Methods may be added to this interface in minor releases. See
 147  // package documentation on API implementation for information on how to set
 148  // default behavior for unimplemented methods.
 149  type Float64ObservableGauge interface {
 150  	// Users of the interface can ignore this. This embedded type is only used
 151  	// by implementations of this interface. See the "API Implementations"
 152  	// section of the package documentation for more information.
 153  	embedded.Float64ObservableGauge
 154  
 155  	Float64Observable
 156  }
 157  
 158  // Float64ObservableGaugeConfig contains options for asynchronous counter
 159  // instruments that record float64 values.
 160  type Float64ObservableGaugeConfig struct {
 161  	description string
 162  	unit        string
 163  	callbacks   []Float64Callback
 164  }
 165  
 166  // NewFloat64ObservableGaugeConfig returns a new [Float64ObservableGaugeConfig]
 167  // with all opts applied.
 168  func NewFloat64ObservableGaugeConfig(opts ...Float64ObservableGaugeOption) Float64ObservableGaugeConfig {
 169  	var config Float64ObservableGaugeConfig
 170  	for _, o := range opts {
 171  		config = o.applyFloat64ObservableGauge(config)
 172  	}
 173  	return config
 174  }
 175  
 176  // Description returns the configured description.
 177  func (c Float64ObservableGaugeConfig) Description() string {
 178  	return c.description
 179  }
 180  
 181  // Unit returns the configured unit.
 182  func (c Float64ObservableGaugeConfig) Unit() string {
 183  	return c.unit
 184  }
 185  
 186  // Callbacks returns the configured callbacks.
 187  func (c Float64ObservableGaugeConfig) Callbacks() []Float64Callback {
 188  	return c.callbacks
 189  }
 190  
 191  // Float64ObservableGaugeOption applies options to a
 192  // [Float64ObservableGaugeConfig]. See [Float64ObservableOption] and
 193  // [InstrumentOption] for other options that can be used as a
 194  // Float64ObservableGaugeOption.
 195  type Float64ObservableGaugeOption interface {
 196  	applyFloat64ObservableGauge(Float64ObservableGaugeConfig) Float64ObservableGaugeConfig
 197  }
 198  
 199  // Float64Observer is a recorder of float64 measurements.
 200  //
 201  // Warning: Methods may be added to this interface in minor releases. See
 202  // package documentation on API implementation for information on how to set
 203  // default behavior for unimplemented methods.
 204  type Float64Observer interface {
 205  	// Users of the interface can ignore this. This embedded type is only used
 206  	// by implementations of this interface. See the "API Implementations"
 207  	// section of the package documentation for more information.
 208  	embedded.Float64Observer
 209  
 210  	// Observe records the float64 value.
 211  	//
 212  	// Use the WithAttributeSet (or, if performance is not a concern,
 213  	// the WithAttributes) option to include measurement attributes.
 214  	Observe(value float64, options ...ObserveOption)
 215  }
 216  
 217  // Float64Callback is a function registered with a Meter that makes
 218  // observations for a Float64Observable instrument it is registered with.
 219  // Calls to the Float64Observer record measurement values for the
 220  // Float64Observable.
 221  //
 222  // The function needs to complete in a finite amount of time and the deadline
 223  // of the passed context is expected to be honored.
 224  //
 225  // The function needs to make unique observations across all registered
 226  // Float64Callbacks. Meaning, it should not report measurements with the same
 227  // attributes as another Float64Callbacks also registered for the same
 228  // instrument.
 229  //
 230  // The function needs to be concurrent safe.
 231  type Float64Callback func(context.Context, Float64Observer) error
 232  
 233  // Float64ObservableOption applies options to float64 Observer instruments.
 234  type Float64ObservableOption interface {
 235  	Float64ObservableCounterOption
 236  	Float64ObservableUpDownCounterOption
 237  	Float64ObservableGaugeOption
 238  }
 239  
 240  type float64CallbackOpt struct {
 241  	cback Float64Callback
 242  }
 243  
 244  func (o float64CallbackOpt) applyFloat64ObservableCounter(
 245  	cfg Float64ObservableCounterConfig,
 246  ) Float64ObservableCounterConfig {
 247  	cfg.callbacks = append(cfg.callbacks, o.cback)
 248  	return cfg
 249  }
 250  
 251  func (o float64CallbackOpt) applyFloat64ObservableUpDownCounter(
 252  	cfg Float64ObservableUpDownCounterConfig,
 253  ) Float64ObservableUpDownCounterConfig {
 254  	cfg.callbacks = append(cfg.callbacks, o.cback)
 255  	return cfg
 256  }
 257  
 258  func (o float64CallbackOpt) applyFloat64ObservableGauge(cfg Float64ObservableGaugeConfig) Float64ObservableGaugeConfig {
 259  	cfg.callbacks = append(cfg.callbacks, o.cback)
 260  	return cfg
 261  }
 262  
 263  // WithFloat64Callback adds callback to be called for an instrument.
 264  func WithFloat64Callback(callback Float64Callback) Float64ObservableOption {
 265  	return float64CallbackOpt{callback}
 266  }
 267