Sha256: fa68591e2eb617b0155bed0bcd161f6a33c884339961ff1a2ce931ba771826e6
Contents?: true
Size: 1.1 KB
Versions: 1
Compression:
Stored size: 1.1 KB
Contents
# frozen_string_literal: true require "dry/events/publisher" require "dry/monitor/constants" module Dry module Monitor class Clock def measure start = current result = yield [result, current - start] end def current Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond) 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) result, time = @clock.measure { yield } if block_given? 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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dry-monitor-0.3.2 | lib/dry/monitor/notifications.rb |