Class: Notion::Middleware::Instrumentation
- Inherits:
-
Object
- Object
- Notion::Middleware::Instrumentation
- Defined in:
- lib/notion/middleware/instrumentation.rb
Class Attribute Summary collapse
-
.subscribers ⇒ Object
readonly
Returns the value of attribute subscribers.
Class Method Summary collapse
- .each_subscriber ⇒ Object
- .publish(name, payload) ⇒ Object
- .subscribe(&block) ⇒ Object
- .unsubscribe(block) ⇒ Object
Instance Method Summary collapse
- #call(request) ⇒ Object
-
#initialize(app, clock: Process.method(:clock_gettime)) ⇒ Instrumentation
constructor
A new instance of Instrumentation.
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
.subscribers ⇒ Object (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_subscriber ⇒ Object
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 |