Class: OpenTelemetry::SDK::Metrics::Meter

Inherits:
Metrics::Meter
  • Object
show all
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

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.

Parameters:

  • name (String)

    Instrumentation package name

  • version (String)

    Instrumentation package version



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

Raises:

  • (InstrumentNameError)


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

Parameters:

  • instruments (Array)

    A list (or tuple, etc.) of Instruments used in the callback function.

  • callback (Proc)

    A callback function



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

Returns:

  • (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