Class: RSpecTelemetry::Subscribers::ActionController

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec_telemetry/subscribers/action_controller.rb

Constant Summary collapse

STACK_KEY =
:rspec_telemetry_ac_stack

Instance Method Summary collapse

Constructor Details

#initialize(recorder) ⇒ ActionController

Returns a new instance of ActionController.



17
18
19
20
# File 'lib/rspec_telemetry/subscribers/action_controller.rb', line 17

def initialize(recorder)
  @recorder = recorder
  @subscription = nil
end

Instance Method Details

#finish(_name, _id, payload) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/rspec_telemetry/subscribers/action_controller.rb', line 37

def finish(_name, _id, payload)
  RSpecTelemetry.safely("action_controller#finish") do
    started = stack.pop
    next unless started
    next unless @recorder.config.enabled && @recorder.config.capture_requests

    now = Process.clock_gettime(Process::CLOCK_MONOTONIC)

    # Deliberately no :path / :params: query strings and parameter values may
    # carry secrets, and controller#action already identifies the endpoint.
    @recorder.record(
      "action_controller.process_action",
      controller: payload[:controller],
      action: payload[:action],
      http_method: payload[:method],
      format: payload[:format].to_s,
      status: payload[:status],
      duration_ms: ((now - started) * 1000.0).round(3),
      db_runtime_ms: runtime_ms(payload[:db_runtime]),
      view_runtime_ms: runtime_ms(payload[:view_runtime]),
      exception_class: Array(payload[:exception]).first
    )
  end
end

#start(_name, _id, _payload) ⇒ Object



31
32
33
34
35
# File 'lib/rspec_telemetry/subscribers/action_controller.rb', line 31

def start(_name, _id, _payload)
  RSpecTelemetry.safely("action_controller#start") do
    stack.push(Process.clock_gettime(Process::CLOCK_MONOTONIC))
  end
end

#subscribeObject



22
23
24
# File 'lib/rspec_telemetry/subscribers/action_controller.rb', line 22

def subscribe
  @subscription = ActiveSupport::Notifications.subscribe("process_action.action_controller", self)
end

#unsubscribeObject



26
27
28
29
# File 'lib/rspec_telemetry/subscribers/action_controller.rb', line 26

def unsubscribe
  ActiveSupport::Notifications.unsubscribe(@subscription) if @subscription
  @subscription = nil
end