Class: Kraftwerk::Telemetry
- Inherits:
-
Object
- Object
- Kraftwerk::Telemetry
- Defined in:
- lib/kraftwerk/telemetry.rb
Overview
Based on
- BEAM Telemetry module
- Work of Tony Pitale: https://github.com/tpitale/telemetry-ruby
Constant Summary collapse
- HandlerIdAlreadyUsed =
Class.new(RuntimeError)
Instance Method Summary collapse
- #attach(id, event_key, &handler) ⇒ Object
- #detach(id) ⇒ Object
- #execute(event_key, values = {}, meta = {}) ⇒ Object
-
#initialize ⇒ Telemetry
constructor
A new instance of Telemetry.
Constructor Details
#initialize ⇒ Telemetry
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 = {}, = {}) handlers = @handlers[event_key] return if handlers.nil? handlers.each do |handler| handler[:handler].call(values, {_event_key: event_key}.merge()) end end |