1// Copyright The OpenTelemetry Authors
2// SPDX-License-Identifier: Apache-2.0
3
4package metric // import "go.opentelemetry.io/otel/metric"
5
6import (
7 "context"
8
9 "go.opentelemetry.io/otel/metric/embedded"
10)
11
12// Int64Counter is an instrument that records increasing int64 values.
13//
14// Warning: Methods may be added to this interface in minor releases. See
15// package documentation on API implementation for information on how to set
16// default behavior for unimplemented methods.
17type Int64Counter interface {
18 // Users of the interface can ignore this. This embedded type is only used
19 // by implementations of this interface. See the "API Implementations"
20 // section of the package documentation for more information.
21 embedded.Int64Counter
22
23 // Add records a change to the counter.
24 //
25 // Use the WithAttributeSet (or, if performance is not a concern,
26 // the WithAttributes) option to include measurement attributes.
27 Add(ctx context.Context, incr int64, options ...AddOption)
28}
29
30// Int64CounterConfig contains options for synchronous counter instruments that
31// record int64 values.
32type Int64CounterConfig struct {
33 description string
34 unit string
35}
36
37// NewInt64CounterConfig returns a new [Int64CounterConfig] with all opts
38// applied.
39func NewInt64CounterConfig(opts ...Int64CounterOption) Int64CounterConfig {
40 var config Int64CounterConfig
41 for _, o := range opts {
42 config = o.applyInt64Counter(config)
43 }
44 return config
45}
46
47// Description returns the configured description.
48func (c Int64CounterConfig) Description() string {
49 return c.description
50}
51
52// Unit returns the configured unit.
53func (c Int64CounterConfig) Unit() string {
54 return c.unit
55}
56
57// Int64CounterOption applies options to a [Int64CounterConfig]. See
58// [InstrumentOption] for other options that can be used as an
59// Int64CounterOption.
60type Int64CounterOption interface {
61 applyInt64Counter(Int64CounterConfig) Int64CounterConfig
62}
63
64// Int64UpDownCounter is an instrument that records increasing or decreasing
65// int64 values.
66//
67// Warning: Methods may be added to this interface in minor releases. See
68// package documentation on API implementation for information on how to set
69// default behavior for unimplemented methods.
70type Int64UpDownCounter interface {
71 // Users of the interface can ignore this. This embedded type is only used
72 // by implementations of this interface. See the "API Implementations"
73 // section of the package documentation for more information.
74 embedded.Int64UpDownCounter
75
76 // Add records a change to the counter.
77 //
78 // Use the WithAttributeSet (or, if performance is not a concern,
79 // the WithAttributes) option to include measurement attributes.
80 Add(ctx context.Context, incr int64, options ...AddOption)
81}
82
83// Int64UpDownCounterConfig contains options for synchronous counter
84// instruments that record int64 values.
85type Int64UpDownCounterConfig struct {
86 description string
87 unit string
88}
89
90// NewInt64UpDownCounterConfig returns a new [Int64UpDownCounterConfig] with
91// all opts applied.
92func NewInt64UpDownCounterConfig(opts ...Int64UpDownCounterOption) Int64UpDownCounterConfig {
93 var config Int64UpDownCounterConfig
94 for _, o := range opts {
95 config = o.applyInt64UpDownCounter(config)
96 }
97 return config
98}
99
100// Description returns the configured description.
101func (c Int64UpDownCounterConfig) Description() string {
102 return c.description
103}
104
105// Unit returns the configured unit.
106func (c Int64UpDownCounterConfig) Unit() string {
107 return c.unit
108}
109
110// Int64UpDownCounterOption applies options to a [Int64UpDownCounterConfig].
111// See [InstrumentOption] for other options that can be used as an
112// Int64UpDownCounterOption.
113type Int64UpDownCounterOption interface {
114 applyInt64UpDownCounter(Int64UpDownCounterConfig) Int64UpDownCounterConfig
115}
116
117// Int64Histogram is an instrument that records a distribution of int64
118// values.
119//
120// Warning: Methods may be added to this interface in minor releases. See
121// package documentation on API implementation for information on how to set
122// default behavior for unimplemented methods.
123type Int64Histogram interface {
124 // Users of the interface can ignore this. This embedded type is only used
125 // by implementations of this interface. See the "API Implementations"
126 // section of the package documentation for more information.
127 embedded.Int64Histogram
128
129 // Record adds an additional value to the distribution.
130 //
131 // Use the WithAttributeSet (or, if performance is not a concern,
132 // the WithAttributes) option to include measurement attributes.
133 Record(ctx context.Context, incr int64, options ...RecordOption)
134}
135
136// Int64HistogramConfig contains options for synchronous histogram instruments
137// that record int64 values.
138type Int64HistogramConfig struct {
139 description string
140 unit string
141 explicitBucketBoundaries []float64
142}
143
144// NewInt64HistogramConfig returns a new [Int64HistogramConfig] with all opts
145// applied.
146func NewInt64HistogramConfig(opts ...Int64HistogramOption) Int64HistogramConfig {
147 var config Int64HistogramConfig
148 for _, o := range opts {
149 config = o.applyInt64Histogram(config)
150 }
151 return config
152}
153
154// Description returns the configured description.
155func (c Int64HistogramConfig) Description() string {
156 return c.description
157}
158
159// Unit returns the configured unit.
160func (c Int64HistogramConfig) Unit() string {
161 return c.unit
162}
163
164// ExplicitBucketBoundaries returns the configured explicit bucket boundaries.
165func (c Int64HistogramConfig) ExplicitBucketBoundaries() []float64 {
166 return c.explicitBucketBoundaries
167}
168
169// Int64HistogramOption applies options to a [Int64HistogramConfig]. See
170// [InstrumentOption] for other options that can be used as an
171// Int64HistogramOption.
172type Int64HistogramOption interface {
173 applyInt64Histogram(Int64HistogramConfig) Int64HistogramConfig
174}
175
176// Int64Gauge is an instrument that records instantaneous int64 values.
177//
178// Warning: Methods may be added to this interface in minor releases. See
179// package documentation on API implementation for information on how to set
180// default behavior for unimplemented methods.
181type Int64Gauge interface {
182 // Users of the interface can ignore this. This embedded type is only used
183 // by implementations of this interface. See the "API Implementations"
184 // section of the package documentation for more information.
185 embedded.Int64Gauge
186
187 // Record records the instantaneous value.
188 //
189 // Use the WithAttributeSet (or, if performance is not a concern,
190 // the WithAttributes) option to include measurement attributes.
191 Record(ctx context.Context, value int64, options ...RecordOption)
192}
193
194// Int64GaugeConfig contains options for synchronous gauge instruments that
195// record int64 values.
196type Int64GaugeConfig struct {
197 description string
198 unit string
199}
200
201// NewInt64GaugeConfig returns a new [Int64GaugeConfig] with all opts
202// applied.
203func NewInt64GaugeConfig(opts ...Int64GaugeOption) Int64GaugeConfig {
204 var config Int64GaugeConfig
205 for _, o := range opts {
206 config = o.applyInt64Gauge(config)
207 }
208 return config
209}
210
211// Description returns the configured description.
212func (c Int64GaugeConfig) Description() string {
213 return c.description
214}
215
216// Unit returns the configured unit.
217func (c Int64GaugeConfig) Unit() string {
218 return c.unit
219}
220
221// Int64GaugeOption applies options to a [Int64GaugeConfig]. See
222// [InstrumentOption] for other options that can be used as a
223// Int64GaugeOption.
224type Int64GaugeOption interface {
225 applyInt64Gauge(Int64GaugeConfig) Int64GaugeConfig
226}