Class: Notion::Middleware::Instrumentation

Inherits:
Object
  • Object
show all
Defined in:
lib/notion/middleware/instrumentation.rb

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, clock: Process.method(:clock_gettime)) ⇒ Instrumentation

Returns a new instance of Instrumentation.



31
32
33
34
# File 'lib/notion/middleware/instrumentation.rb', line 31

def initialize(app, clock: Process.method(:clock_gettime))
  @app = app
  @clock = clock
end

Class Attribute Details

.subscribersObject (readonly)

Returns the value of attribute subscribers.



10
11
12
# File 'lib/notion/middleware/instrumentation.rb', line 10

def subscribers
  @subscribers
end

Class Method Details

.each_subscriberObject



21
22
23
# File 'lib/notion/middleware/instrumentation.rb', line 21

def each_subscriber(&)
  @mutex.synchronize { subscribers.dup }.each(&)
end

.publish(name, payload) ⇒ Object



25
26
27
28
# File 'lib/notion/middleware/instrumentation.rb', line 25

def publish(name, payload)
  each_subscriber { |subscriber| subscriber.call(name, payload) }
  ActiveSupport::Notifications.instrument(name, payload) if defined?(ActiveSupport::Notifications)
end

.subscribe(&block) ⇒ Object



12
13
14
15
# File 'lib/notion/middleware/instrumentation.rb', line 12

def subscribe(&block)
  @mutex.synchronize { subscribers << block }
  block
end

.unsubscribe(block) ⇒ Object



17
18
19
# File 'lib/notion/middleware/instrumentation.rb', line 17

def unsubscribe(block)
  @mutex.synchronize { subscribers.delete(block) }
end

Instance Method Details

#call(request) ⇒ Object



36
37
38
39
40
41
# File 'lib/notion/middleware/instrumentation.rb', line 36

def call(request)
  started = monotonic
  response = @app.call(request)
  publish(request, response, monotonic - started)
  response
end