Sha256: 383217642d496790f2a975e770b78bb861ccc13a79ff498c7083848c092c3b90
Contents?: true
Size: 1.06 KB
Versions: 3
Compression:
Stored size: 1.06 KB
Contents
require 'dry/events/publisher' module Dry module Monitor class Clock def measure(&block) start = current result = block.() stop = current [result, ((stop - start) * 1000).round(2)] end def current Time.now end end CLOCK = Clock.new class Notifications include Events::Publisher['Dry::Monitor::Notifications'] attr_reader :id attr_reader :clock def initialize(id) @id = id @clock = CLOCK end def start(event_id, payload) instrument(event_id, payload) end def stop(event_id, payload) instrument(event_id, payload) end def instrument(event_id, payload = EMPTY_HASH, &block) if block result, time = clock.measure(&block) end process(event_id, payload) do |event, listener| if time listener.(event.payload(payload.merge(time: time))) else listener.(event) end end result end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dry-monitor-0.1.2 | lib/dry/monitor/notifications.rb |
dry-monitor-0.1.1 | lib/dry/monitor/notifications.rb |
dry-monitor-0.1.0 | lib/dry/monitor/notifications.rb |