Class: OpenTelemetry::SDK::Metrics::Meter
- Inherits:
-
Metrics::Meter
- Object
- Metrics::Meter
- OpenTelemetry::SDK::Metrics::Meter
- Defined in:
- lib/opentelemetry/sdk/metrics/meter.rb
Overview
Meter is the SDK implementation of Metrics::Meter.
Constant Summary collapse
- NAME_REGEX =
%r{\A[a-zA-Z][-./\w]{0,254}\z}
Instance Method Summary collapse
- #add_metric_reader(metric_reader) ⇒ Object private
- #create_instrument(kind, name, unit, description, callback) ⇒ Object
-
#initialize(name, version, meter_provider) ⇒ Meter
constructor
private
Returns a new Meter instance.
-
#register_callback(instruments, callback) ⇒ Object
Multiple-instrument callbacks Callbacks registered after the time of instrument creation MAY be associated with multiple instruments.
- #unregister(instruments, callback) ⇒ Object
- #utf8mb3_encoding?(string) ⇒ Boolean
Constructor Details
#initialize(name, version, meter_provider) ⇒ Meter
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.
Returns a new OpenTelemetry::SDK::Metrics::Meter instance.
24 25 26 27 28 29 |
# File 'lib/opentelemetry/sdk/metrics/meter.rb', line 24 def initialize(name, version, meter_provider) @mutex = Mutex.new @instrument_registry = {} @instrumentation_scope = InstrumentationScope.new(name, version) @meter_provider = meter_provider end |
Instance Method Details
#add_metric_reader(metric_reader) ⇒ 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.
56 57 58 59 60 |
# File 'lib/opentelemetry/sdk/metrics/meter.rb', line 56 def add_metric_reader(metric_reader) @instrument_registry.each_value do |instrument| instrument.register_with_new_metric_store(metric_reader.metric_store) end end |
#create_instrument(kind, name, unit, description, callback) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/opentelemetry/sdk/metrics/meter.rb', line 62 def create_instrument(kind, name, unit, description, callback) raise InstrumentNameError if name.nil? raise InstrumentNameError if name.empty? raise InstrumentNameError unless NAME_REGEX.match?(name) raise InstrumentUnitError if unit && (!unit.ascii_only? || unit.size > 63) raise InstrumentDescriptionError if description && (description.size > 1023 || !utf8mb3_encoding?(description.dup)) super do case kind when :counter then OpenTelemetry::SDK::Metrics::Instrument::Counter.new(name, unit, description, @instrumentation_scope, @meter_provider) when :observable_counter then OpenTelemetry::SDK::Metrics::Instrument::ObservableCounter.new(name, unit, description, callback, @instrumentation_scope, @meter_provider) when :gauge then OpenTelemetry::SDK::Metrics::Instrument::Gauge.new(name, unit, description, @instrumentation_scope, @meter_provider) when :histogram then OpenTelemetry::SDK::Metrics::Instrument::Histogram.new(name, unit, description, @instrumentation_scope, @meter_provider) when :observable_gauge then OpenTelemetry::SDK::Metrics::Instrument::ObservableGauge.new(name, unit, description, callback, @instrumentation_scope, @meter_provider) when :up_down_counter then OpenTelemetry::SDK::Metrics::Instrument::UpDownCounter.new(name, unit, description, @instrumentation_scope, @meter_provider) when :observable_up_down_counter then OpenTelemetry::SDK::Metrics::Instrument::ObservableUpDownCounter.new(name, unit, description, callback, @instrumentation_scope, @meter_provider) end end end |
#register_callback(instruments, callback) ⇒ Object
Multiple-instrument callbacks Callbacks registered after the time of instrument creation MAY be associated with multiple instruments. Related spec: github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md#multiple-instrument-callbacks Related spec: github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md#synchronous-instrument-api
It is RECOMMENDED that the API authors use one of the following forms for the callback function: The list (or tuple, etc.) returned by the callback function contains (Instrument, Measurement) pairs. the Observable Result parameter receives an additional (Instrument, Measurement) pairs Here it chose the second form
43 44 45 46 47 |
# File 'lib/opentelemetry/sdk/metrics/meter.rb', line 43 def register_callback(instruments, callback) instruments.each do |instrument| instrument.register_callback(callback) end end |
#unregister(instruments, callback) ⇒ Object
49 50 51 52 53 |
# File 'lib/opentelemetry/sdk/metrics/meter.rb', line 49 def unregister(instruments, callback) instruments.each do |instrument| instrument.unregister(callback) end end |
#utf8mb3_encoding?(string) ⇒ Boolean
82 83 84 85 |
# File 'lib/opentelemetry/sdk/metrics/meter.rb', line 82 def utf8mb3_encoding?(string) string.force_encoding('UTF-8').valid_encoding? && string.each_char { |c| return false if c.bytesize >= 4 } end |