Class: Kraftwerk::Telemetry

Inherits:
Object
  • Object
show all
Defined in:
lib/kraftwerk/telemetry.rb

Overview

Based on

Constant Summary collapse

HandlerIdAlreadyUsed =
Class.new(RuntimeError)

Instance Method Summary collapse

Constructor Details

#initializeTelemetry

Returns a new instance of Telemetry.



10
11
12
13
14
# File 'lib/kraftwerk/telemetry.rb', line 10

def initialize
  @handlers = Concurrent::Map.new
  @used_ids = Concurrent::Map.new
  @semaphore = Concurrent::Semaphore.new(1)
end

Instance Method Details

#attach(id, event_key, &handler) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/kraftwerk/telemetry.rb', line 16

def attach(id, event_key, &handler)
  raise HandlerIdAlreadyUsed.new(id) if @used_ids.key?(id)

  @handlers[event_key] ||= Concurrent::Array.new
  @handlers[event_key] << { id: id, handler: handler }
  sync_used_ids_cache
end

#detach(id) ⇒ Object



24
25
26
27
28
# File 'lib/kraftwerk/telemetry.rb', line 24

def detach(id)
  event_key = @used_ids[id]
  @handlers[event_key].delete_if { |handler| handler[:id] == id }
  sync_used_ids_cache
end

#execute(event_key, values = {}, meta = {}) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/kraftwerk/telemetry.rb', line 30

def execute(event_key, values = {}, meta = {})
  handlers = @handlers[event_key]
  return if handlers.nil?

  handlers.each do |handler|
    handler[:handler].call(values, {_event_key: event_key}.merge(meta))
  end
end