Class: OpenTelemetry::SDK::Metrics::Instrument::AsynchronousInstrument
- Inherits:
-
Object
- Object
- OpenTelemetry::SDK::Metrics::Instrument::AsynchronousInstrument
- Defined in:
- lib/opentelemetry/sdk/metrics/instrument/asynchronous_instrument.rb
Overview
AsynchronousInstrument contains the common functionality shared across the asynchronous instruments SDK instruments.
Direct Known Subclasses
Constant Summary collapse
- NOOP_EXEMPLAR_RESERVOIR =
Exemplar::NoopExemplarReservoir.new
Instance Method Summary collapse
- #add_attributes(attributes) ⇒ Object
-
#init_callback(callback) ⇒ Object
The API MUST support creation of asynchronous instruments by passing zero or more callback functions to be permanently registered to the newly created instrument.
-
#initialize(name, unit, description, callback, instrumentation_scope, meter_provider, exemplar_filter, exemplar_reservoir) ⇒ AsynchronousInstrument
constructor
A new instance of AsynchronousInstrument.
-
#register_callback(callback) ⇒ Object
Where the API supports registration of callback functions after asynchronous instrumentation creation, the user MUST be able to undo registration of the specific callback after its registration by some means.
- #register_with_new_metric_store(metric_store, aggregation: default_aggregation) ⇒ Object private
- #timeout(timeout) ⇒ Object
- #unregister(callback) ⇒ Object
Constructor Details
#initialize(name, unit, description, callback, instrumentation_scope, meter_provider, exemplar_filter, exemplar_reservoir) ⇒ AsynchronousInstrument
Returns a new instance of AsynchronousInstrument.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/opentelemetry/sdk/metrics/instrument/asynchronous_instrument.rb', line 16 def initialize(name, unit, description, callback, instrumentation_scope, meter_provider, exemplar_filter, exemplar_reservoir) @name = name @unit = unit @description = description @instrumentation_scope = instrumentation_scope @meter_provider = meter_provider @metric_streams = [] @callbacks = [] @timeout = nil @attributes = {} @exemplar_filter = exemplar_filter || meter_provider.exemplar_filter @exemplar_reservoir = exemplar_reservoir init_callback(callback) meter_provider.register_asynchronous_instrument(self) end |
Instance Method Details
#add_attributes(attributes) ⇒ Object
84 85 86 |
# File 'lib/opentelemetry/sdk/metrics/instrument/asynchronous_instrument.rb', line 84 def add_attributes(attributes) @attributes.merge!(attributes) if attributes.instance_of?(Hash) end |
#init_callback(callback) ⇒ Object
The API MUST support creation of asynchronous instruments by passing zero or more callback functions to be permanently registered to the newly created instrument.
55 56 57 58 59 60 61 62 63 |
# File 'lib/opentelemetry/sdk/metrics/instrument/asynchronous_instrument.rb', line 55 def init_callback(callback) if callback.instance_of?(Proc) @callbacks << callback elsif callback.instance_of?(Array) callback.each { |cb| @callbacks << cb if cb.instance_of?(Proc) } else OpenTelemetry.logger.warn "Only accept single Proc or Array of Proc for initialization with callback (given callback #{callback.class}" end end |
#register_callback(callback) ⇒ Object
Where the API supports registration of callback functions after asynchronous instrumentation creation, the user MUST be able to undo registration of the specific callback after its registration by some means.
67 68 69 70 71 72 73 74 |
# File 'lib/opentelemetry/sdk/metrics/instrument/asynchronous_instrument.rb', line 67 def register_callback(callback) if callback.instance_of?(Proc) @callbacks << callback callback else OpenTelemetry.logger.warn "Only accept single Proc for registering callback (given callback #{callback.class}" end end |
#register_with_new_metric_store(metric_store, aggregation: default_aggregation) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/opentelemetry/sdk/metrics/instrument/asynchronous_instrument.rb', line 34 def register_with_new_metric_store(metric_store, aggregation: default_aggregation) ms = OpenTelemetry::SDK::Metrics::State::AsynchronousMetricStream.new( @name, @description, @unit, instrument_kind, @meter_provider, @instrumentation_scope, aggregation, @callbacks, @timeout, @attributes, @exemplar_filter, @exemplar_reservoir ) @metric_streams << ms metric_store.add_metric_stream(ms) end |
#timeout(timeout) ⇒ Object
80 81 82 |
# File 'lib/opentelemetry/sdk/metrics/instrument/asynchronous_instrument.rb', line 80 def timeout(timeout) @timeout = timeout end |
#unregister(callback) ⇒ Object
76 77 78 |
# File 'lib/opentelemetry/sdk/metrics/instrument/asynchronous_instrument.rb', line 76 def unregister(callback) @callbacks.delete(callback) end |