diff options
author | 2025-03-09 17:47:56 +0100 | |
---|---|---|
committer | 2025-03-10 01:59:49 +0100 | |
commit | 3ac1ee16f377d31a0fb80c8dae28b6239ac4229e (patch) | |
tree | f61faa581feaaeaba2542b9f2b8234a590684413 /vendor/go.opentelemetry.io/otel/sdk/metric/instrument.go | |
parent | [chore] update URLs to forked source (diff) | |
download | gotosocial-3ac1ee16f377d31a0fb80c8dae28b6239ac4229e.tar.xz |
[chore] remove vendor
Diffstat (limited to 'vendor/go.opentelemetry.io/otel/sdk/metric/instrument.go')
-rw-r--r-- | vendor/go.opentelemetry.io/otel/sdk/metric/instrument.go | 364 |
1 files changed, 0 insertions, 364 deletions
diff --git a/vendor/go.opentelemetry.io/otel/sdk/metric/instrument.go b/vendor/go.opentelemetry.io/otel/sdk/metric/instrument.go deleted file mode 100644 index c33e1a28c..000000000 --- a/vendor/go.opentelemetry.io/otel/sdk/metric/instrument.go +++ /dev/null @@ -1,364 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -//go:generate stringer -type=InstrumentKind -trimprefix=InstrumentKind - -package metric // import "go.opentelemetry.io/otel/sdk/metric" - -import ( - "context" - "errors" - "fmt" - "strings" - - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/metric/embedded" - "go.opentelemetry.io/otel/sdk/instrumentation" - "go.opentelemetry.io/otel/sdk/metric/internal/aggregate" - "go.opentelemetry.io/otel/sdk/metric/internal/x" -) - -var zeroScope instrumentation.Scope - -// InstrumentKind is the identifier of a group of instruments that all -// performing the same function. -type InstrumentKind uint8 - -const ( - // instrumentKindUndefined is an undefined instrument kind, it should not - // be used by any initialized type. - instrumentKindUndefined InstrumentKind = 0 // nolint:deadcode,varcheck,unused - // InstrumentKindCounter identifies a group of instruments that record - // increasing values synchronously with the code path they are measuring. - InstrumentKindCounter InstrumentKind = 1 - // InstrumentKindUpDownCounter identifies a group of instruments that - // record increasing and decreasing values synchronously with the code path - // they are measuring. - InstrumentKindUpDownCounter InstrumentKind = 2 - // InstrumentKindHistogram identifies a group of instruments that record a - // distribution of values synchronously with the code path they are - // measuring. - InstrumentKindHistogram InstrumentKind = 3 - // InstrumentKindObservableCounter identifies a group of instruments that - // record increasing values in an asynchronous callback. - InstrumentKindObservableCounter InstrumentKind = 4 - // InstrumentKindObservableUpDownCounter identifies a group of instruments - // that record increasing and decreasing values in an asynchronous - // callback. - InstrumentKindObservableUpDownCounter InstrumentKind = 5 - // InstrumentKindObservableGauge identifies a group of instruments that - // record current values in an asynchronous callback. - InstrumentKindObservableGauge InstrumentKind = 6 - // InstrumentKindGauge identifies a group of instruments that record - // instantaneous values synchronously with the code path they are - // measuring. - InstrumentKindGauge InstrumentKind = 7 -) - -type nonComparable [0]func() // nolint: unused // This is indeed used. - -// Instrument describes properties an instrument is created with. -type Instrument struct { - // Name is the human-readable identifier of the instrument. - Name string - // Description describes the purpose of the instrument. - Description string - // Kind defines the functional group of the instrument. - Kind InstrumentKind - // Unit is the unit of measurement recorded by the instrument. - Unit string - // Scope identifies the instrumentation that created the instrument. - Scope instrumentation.Scope - - // Ensure forward compatibility if non-comparable fields need to be added. - nonComparable // nolint: unused -} - -// IsEmpty returns if all Instrument fields are their zero-value. -func (i Instrument) IsEmpty() bool { - return i.Name == "" && - i.Description == "" && - i.Kind == instrumentKindUndefined && - i.Unit == "" && - i.Scope == zeroScope -} - -// matches returns whether all the non-zero-value fields of i match the -// corresponding fields of other. If i is empty it will match all other, and -// true will always be returned. -func (i Instrument) matches(other Instrument) bool { - return i.matchesName(other) && - i.matchesDescription(other) && - i.matchesKind(other) && - i.matchesUnit(other) && - i.matchesScope(other) -} - -// matchesName returns true if the Name of i is "" or it equals the Name of -// other, otherwise false. -func (i Instrument) matchesName(other Instrument) bool { - return i.Name == "" || i.Name == other.Name -} - -// matchesDescription returns true if the Description of i is "" or it equals -// the Description of other, otherwise false. -func (i Instrument) matchesDescription(other Instrument) bool { - return i.Description == "" || i.Description == other.Description -} - -// matchesKind returns true if the Kind of i is its zero-value or it equals the -// Kind of other, otherwise false. -func (i Instrument) matchesKind(other Instrument) bool { - return i.Kind == instrumentKindUndefined || i.Kind == other.Kind -} - -// matchesUnit returns true if the Unit of i is its zero-value or it equals the -// Unit of other, otherwise false. -func (i Instrument) matchesUnit(other Instrument) bool { - return i.Unit == "" || i.Unit == other.Unit -} - -// matchesScope returns true if the Scope of i is its zero-value or it equals -// the Scope of other, otherwise false. -func (i Instrument) matchesScope(other Instrument) bool { - return (i.Scope.Name == "" || i.Scope.Name == other.Scope.Name) && - (i.Scope.Version == "" || i.Scope.Version == other.Scope.Version) && - (i.Scope.SchemaURL == "" || i.Scope.SchemaURL == other.Scope.SchemaURL) -} - -// Stream describes the stream of data an instrument produces. -type Stream struct { - // Name is the human-readable identifier of the stream. - Name string - // Description describes the purpose of the data. - Description string - // Unit is the unit of measurement recorded. - Unit string - // Aggregation the stream uses for an instrument. - Aggregation Aggregation - // AttributeFilter is an attribute Filter applied to the attributes - // recorded for an instrument's measurement. If the filter returns false - // the attribute will not be recorded, otherwise, if it returns true, it - // will record the attribute. - // - // Use NewAllowKeysFilter from "go.opentelemetry.io/otel/attribute" to - // provide an allow-list of attribute keys here. - AttributeFilter attribute.Filter - // ExemplarReservoirProvider selects the - // [go.opentelemetry.io/otel/sdk/metric/exemplar.ReservoirProvider] based - // on the [Aggregation]. - // - // If unspecified, [DefaultExemplarReservoirProviderSelector] is used. - ExemplarReservoirProviderSelector ExemplarReservoirProviderSelector -} - -// instID are the identifying properties of a instrument. -type instID struct { - // Name is the name of the stream. - Name string - // Description is the description of the stream. - Description string - // Kind defines the functional group of the instrument. - Kind InstrumentKind - // Unit is the unit of the stream. - Unit string - // Number is the number type of the stream. - Number string -} - -// Returns a normalized copy of the instID i. -// -// Instrument names are considered case-insensitive. Standardize the instrument -// name to always be lowercase for the returned instID so it can be compared -// without the name casing affecting the comparison. -func (i instID) normalize() instID { - i.Name = strings.ToLower(i.Name) - return i -} - -type int64Inst struct { - measures []aggregate.Measure[int64] - - embedded.Int64Counter - embedded.Int64UpDownCounter - embedded.Int64Histogram - embedded.Int64Gauge -} - -var ( - _ metric.Int64Counter = (*int64Inst)(nil) - _ metric.Int64UpDownCounter = (*int64Inst)(nil) - _ metric.Int64Histogram = (*int64Inst)(nil) - _ metric.Int64Gauge = (*int64Inst)(nil) - _ x.EnabledInstrument = (*int64Inst)(nil) -) - -func (i *int64Inst) Add(ctx context.Context, val int64, opts ...metric.AddOption) { - c := metric.NewAddConfig(opts) - i.aggregate(ctx, val, c.Attributes()) -} - -func (i *int64Inst) Record(ctx context.Context, val int64, opts ...metric.RecordOption) { - c := metric.NewRecordConfig(opts) - i.aggregate(ctx, val, c.Attributes()) -} - -func (i *int64Inst) Enabled(_ context.Context) bool { - return len(i.measures) != 0 -} - -func (i *int64Inst) aggregate(ctx context.Context, val int64, s attribute.Set) { // nolint:revive // okay to shadow pkg with method. - for _, in := range i.measures { - in(ctx, val, s) - } -} - -type float64Inst struct { - measures []aggregate.Measure[float64] - - embedded.Float64Counter - embedded.Float64UpDownCounter - embedded.Float64Histogram - embedded.Float64Gauge -} - -var ( - _ metric.Float64Counter = (*float64Inst)(nil) - _ metric.Float64UpDownCounter = (*float64Inst)(nil) - _ metric.Float64Histogram = (*float64Inst)(nil) - _ metric.Float64Gauge = (*float64Inst)(nil) - _ x.EnabledInstrument = (*float64Inst)(nil) -) - -func (i *float64Inst) Add(ctx context.Context, val float64, opts ...metric.AddOption) { - c := metric.NewAddConfig(opts) - i.aggregate(ctx, val, c.Attributes()) -} - -func (i *float64Inst) Record(ctx context.Context, val float64, opts ...metric.RecordOption) { - c := metric.NewRecordConfig(opts) - i.aggregate(ctx, val, c.Attributes()) -} - -func (i *float64Inst) Enabled(_ context.Context) bool { - return len(i.measures) != 0 -} - -func (i *float64Inst) aggregate(ctx context.Context, val float64, s attribute.Set) { - for _, in := range i.measures { - in(ctx, val, s) - } -} - -// observableID is a comparable unique identifier of an observable. -type observableID[N int64 | float64] struct { - name string - description string - kind InstrumentKind - unit string - scope instrumentation.Scope -} - -type float64Observable struct { - metric.Float64Observable - *observable[float64] - - embedded.Float64ObservableCounter - embedded.Float64ObservableUpDownCounter - embedded.Float64ObservableGauge -} - -var ( - _ metric.Float64ObservableCounter = float64Observable{} - _ metric.Float64ObservableUpDownCounter = float64Observable{} - _ metric.Float64ObservableGauge = float64Observable{} -) - -func newFloat64Observable(m *meter, kind InstrumentKind, name, desc, u string) float64Observable { - return float64Observable{ - observable: newObservable[float64](m, kind, name, desc, u), - } -} - -type int64Observable struct { - metric.Int64Observable - *observable[int64] - - embedded.Int64ObservableCounter - embedded.Int64ObservableUpDownCounter - embedded.Int64ObservableGauge -} - -var ( - _ metric.Int64ObservableCounter = int64Observable{} - _ metric.Int64ObservableUpDownCounter = int64Observable{} - _ metric.Int64ObservableGauge = int64Observable{} -) - -func newInt64Observable(m *meter, kind InstrumentKind, name, desc, u string) int64Observable { - return int64Observable{ - observable: newObservable[int64](m, kind, name, desc, u), - } -} - -type observable[N int64 | float64] struct { - metric.Observable - observableID[N] - - meter *meter - measures measures[N] - dropAggregation bool -} - -func newObservable[N int64 | float64](m *meter, kind InstrumentKind, name, desc, u string) *observable[N] { - return &observable[N]{ - observableID: observableID[N]{ - name: name, - description: desc, - kind: kind, - unit: u, - scope: m.scope, - }, - meter: m, - } -} - -// observe records the val for the set of attrs. -func (o *observable[N]) observe(val N, s attribute.Set) { - o.measures.observe(val, s) -} - -func (o *observable[N]) appendMeasures(meas []aggregate.Measure[N]) { - o.measures = append(o.measures, meas...) -} - -type measures[N int64 | float64] []aggregate.Measure[N] - -// observe records the val for the set of attrs. -func (m measures[N]) observe(val N, s attribute.Set) { - for _, in := range m { - in(context.Background(), val, s) - } -} - -var errEmptyAgg = errors.New("no aggregators for observable instrument") - -// registerable returns an error if the observable o should not be registered, -// and nil if it should. An errEmptyAgg error is returned if o is effectively a -// no-op because it does not have any aggregators. Also, an error is returned -// if scope defines a Meter other than the one o was created by. -func (o *observable[N]) registerable(m *meter) error { - if len(o.measures) == 0 { - return errEmptyAgg - } - if m != o.meter { - return fmt.Errorf( - "invalid registration: observable %q from Meter %q, registered with Meter %q", - o.name, - o.scope.Name, - m.scope.Name, - ) - } - return nil -} |