Class: OpenTelemetry::SDK::Metrics::Aggregation::LastValue

Inherits:
Object
  • Object
show all
Defined in:
lib/opentelemetry/sdk/metrics/aggregation/last_value.rb

Overview

Contains the implementation of the LastValue aggregation

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(exemplar_reservoir: nil) ⇒ LastValue

Returns a new instance of LastValue.



19
20
21
22
# File 'lib/opentelemetry/sdk/metrics/aggregation/last_value.rb', line 19

def initialize(exemplar_reservoir: nil)
  @exemplar_reservoir = exemplar_reservoir || DEFAULT_RESERVOIR
  @exemplar_reservoir_storage = {}
end

Instance Attribute Details

#exemplar_reservoirObject (readonly)

Returns the value of attribute exemplar_reservoir.



13
14
15
# File 'lib/opentelemetry/sdk/metrics/aggregation/last_value.rb', line 13

def exemplar_reservoir
  @exemplar_reservoir
end

Instance Method Details

#collect(start_time, end_time, data_points) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/opentelemetry/sdk/metrics/aggregation/last_value.rb', line 24

def collect(start_time, end_time, data_points)
  ndps = data_points.values.map! do |ndp|
    ndp.start_time_unix_nano = start_time
    ndp.time_unix_nano = end_time
    reservoir = @exemplar_reservoir_storage[ndp.attributes]
    ndp.exemplars = reservoir&.collect(attributes: ndp.attributes, aggregation_temporality: :delta)
    ndp
  end
  data_points.clear
  ndps
end

#update(increment, attributes, data_points, exemplar_offer: false) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/opentelemetry/sdk/metrics/aggregation/last_value.rb', line 36

def update(increment, attributes, data_points, exemplar_offer: false)
  reservoir = @exemplar_reservoir_storage[attributes]
  unless reservoir
    reservoir = @exemplar_reservoir.dup
    reservoir.reset
    @exemplar_reservoir_storage[attributes] = reservoir
  end

  if exemplar_offer
    reservoir.offer(value: increment,
                    timestamp: OpenTelemetry::Common::Utilities.time_in_nanoseconds,
                    attributes: attributes,
                    context: OpenTelemetry::Context.current)
  end

  data_points[attributes] = NumberDataPoint.new(
    attributes,
    nil,
    nil,
    increment,
    nil
  )
  nil
end