module OneApm::LanguageSupport

Public Instance Methods

broken_gc?() click to toggle source
# File lib/one_apm/support/language_support.rb, line 35
def broken_gc?
  OneApm::LanguageSupport.using_version?('1.8.7') &&
    RUBY_PATCHLEVEL < 348 &&
    !OneApm::LanguageSupport.using_engine?('jruby') &&
    !OneApm::LanguageSupport.using_engine?('rbx')
end
can_fork?() click to toggle source
# File lib/one_apm/support/language_support.rb, line 13
def can_fork?
  # this is expensive to check, so we should only check once
  return @@forkable if @@forkable != nil

  if Process.respond_to?(:fork)
    # if this is not 1.9.2 or higher, we have to make sure
    @@forkable = ::RUBY_VERSION < '1.9.2' ? test_forkability : true
  else
    @@forkable = false
  end

  @@forkable
end
constant_is_defined?(const_name) click to toggle source
# File lib/one_apm/support/language_support.rb, line 122
def constant_is_defined?(const_name)
  const_name.to_s.sub(/\A::/,'').split('::').inject(Object) do |namespace, name|
    begin
      result = namespace.const_get(name)

      # const_get looks up the inheritence chain, so if it's a class
      # in the constant make sure we found the one in our namespace.
      #
      # Can't help if the constant isn't a class...
      if result.is_a?(Module)
        expected_name = "#{namespace}::#{name}".gsub(/^Object::/, "")
        return false unless expected_name == result.to_s
      end

      result
    rescue NameError
      false
    end
  end
end
gc_profiler_enabled?() click to toggle source
# File lib/one_apm/support/language_support.rb, line 73
def gc_profiler_enabled?
  if gc_profiler_usable? && ::GC::Profiler.enabled? && !OneApm::Manager.config[:disable_gc_profiler]
    true
  else
    false
  end
end
gc_profiler_usable?() click to toggle source
# File lib/one_apm/support/language_support.rb, line 65
def gc_profiler_usable?
  if defined?(::GC::Profiler) && !jruby?
    true
  else
    false
  end
end
jruby?() click to toggle source
# File lib/one_apm/support/language_support.rb, line 91
def jruby?
  defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
end
needs_syck?() click to toggle source

need to use syck rather than psych when possible

# File lib/one_apm/support/language_support.rb, line 7
def needs_syck?
  !OneApm::LanguageSupport.using_engine?('jruby') &&
       OneApm::LanguageSupport.using_version?('1.9.2')
end
object_space_usable?() click to toggle source
# File lib/one_apm/support/language_support.rb, line 81
def object_space_usable?
  if defined?(::JRuby) && JRuby.respond_to?(:runtime)
    JRuby.runtime.is_object_space_enabled
  elsif defined?(::ObjectSpace) && !rubinius?
    true
  else
    false
  end
end
ree?() click to toggle source
# File lib/one_apm/support/language_support.rb, line 99
def ree?
  defined?(RUBY_DESCRIPTION) && RUBY_DESCRIPTION =~ /Ruby Enterprise Edition/
end
rubinius?() click to toggle source
# File lib/one_apm/support/language_support.rb, line 95
def rubinius?
  defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
end
supports_string_encodings?() click to toggle source
# File lib/one_apm/support/language_support.rb, line 108
def supports_string_encodings?
  RUBY_VERSION >= '1.9.0'
end
test_forkability() click to toggle source
# File lib/one_apm/support/language_support.rb, line 112
def test_forkability
  child = Process.fork { exit! }
  # calling wait here doesn't seem like it should necessary, but it seems to
  # resolve some weird edge cases with resque forking.
  Process.wait child
  true
rescue NotImplementedError
  false
end
using_engine?(engine) click to toggle source
# File lib/one_apm/support/language_support.rb, line 27
def using_engine?(engine)
  if defined?(::RUBY_ENGINE)
    ::RUBY_ENGINE == engine
  else
    engine == 'ruby'
  end
end
using_version?(version) click to toggle source
# File lib/one_apm/support/language_support.rb, line 103
def using_version?(version)
  numbers = version.split('.')
  numbers == ::RUBY_VERSION.split('.')[0, numbers.size]
end
with_cautious_gc() { || ... } click to toggle source
# File lib/one_apm/support/language_support.rb, line 57
def with_cautious_gc
  if broken_gc?
    with_disabled_gc { yield }
  else
    yield
  end
end
with_disabled_gc() { || ... } click to toggle source
# File lib/one_apm/support/language_support.rb, line 42
def with_disabled_gc
  if defined?(::GC) && ::GC.respond_to?(:disable)
    val = nil
    begin
      ::GC.disable
      val = yield
    ensure
      ::GC.enable
    end
    val
  else
    yield
  end
end