Class: SolidEvents::Subscribers::ControllerSubscriber

Inherits:
Object
  • Object
show all
Defined in:
lib/solid_events/subscribers/controller_subscriber.rb

Instance Method Summary collapse

Instance Method Details

#call(_name, started, finished, _unique_id, payload) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/solid_events/subscribers/controller_subscriber.rb', line 6

def call(_name, started, finished, _unique_id, payload)
  path = payload[:path].to_s
  return if SolidEvents.ignore_paths.any? { |prefix| path.start_with?(prefix.to_s) }

  controller = payload[:controller].to_s
  action = payload[:action].to_s
  status = payload[:status].to_i
  name = SolidEvents::Labeler.controller_action(controller_name: controller, action_name: action, status: status)

  trace = SolidEvents::Tracer.start_trace!(
    name: name,
    trace_type: "request",
    source: "#{controller}##{action}",
    context: payload.slice(:path, :method, :format, :status)
  )

  SolidEvents::Tracer.record_event!(
    event_type: "controller",
    name: "#{controller}##{action}",
    payload: payload.slice(:path, :method, :format, :status),
    duration_ms: ((finished - started) * 1000.0).round(2)
  )

  if defined?(SolidErrors::Error) && payload[:exception_object]&.respond_to?(:message)
    solid_error = SolidErrors::Error.find_by(message: payload[:exception_object].message)
    SolidEvents::Tracer.link_error!(solid_error.id) if solid_error
  end

  SolidEvents::Tracer.finish_trace!(status: payload[:exception].present? ? "error" : "ok")
  trace
end