class Dynflow::Actor::BacktraceCollector

Constants

CONCURRENT_RUBY_LINE
SIDEKIQ_LINE

Public Class Methods

current_actor_backtrace() click to toggle source
# File lib/dynflow/actor.rb, line 64
def current_actor_backtrace
  Thread.current[:_dynflow_actor_backtrace] || []
end
full_backtrace(backtrace) click to toggle source
# File lib/dynflow/actor.rb, line 68
def full_backtrace(backtrace)
  filter_backtrace((backtrace || []) + current_actor_backtrace)
end
with_backtrace(backtrace) { || ... } click to toggle source
# File lib/dynflow/actor.rb, line 56
def with_backtrace(backtrace)
  previous_actor_backtrace = Thread.current[:_dynflow_actor_backtrace]
  Thread.current[:_dynflow_actor_backtrace] = backtrace
  yield
ensure
  Thread.current[:_dynflow_actor_backtrace] = previous_actor_backtrace
end

Private Class Methods

filter_backtrace(backtrace) click to toggle source

takes an array of backtrace lines and replaces each chunk

# File lib/dynflow/actor.rb, line 85
def filter_backtrace(backtrace)
  backtrace.map { |line| filter_line(line) }
    .chunk_while { |l1, l2| l1 == l2}
    .map(&:first)
end
filter_line(line) click to toggle source
# File lib/dynflow/actor.rb, line 74
def filter_line(line)
  if %w[concurrent-ruby gems/logging actor.rb].any? { |pattern| line.include?(pattern) }
    CONCURRENT_RUBY_LINE
  elsif line.include?('lib/sidekiq')
    SIDEKIQ_LINE
  else
    line
  end
end