module Skylight::Core::Probes

@api private

Public Class Methods

add_path(path) click to toggle source
# File lib/skylight/core/probes.rb, line 26
def add_path(path)
  root = Pathname.new(path)
  Pathname.glob(root.join("./**/*.rb")).each do |f|
    name = f.relative_path_from(root).sub_ext("").to_s
    if available.key?(name)
      raise "duplicate probe name: #{name}; original=#{available[name]}; new=#{f}"
    end
    available[name] = f
  end
end
available() click to toggle source
# File lib/skylight/core/probes.rb, line 37
def available
  @available ||= {}
end
available?(klass_name) click to toggle source
# File lib/skylight/core/probes.rb, line 60
def available?(klass_name)
  !!Skylight::Core::Util::Inflector.safe_constantize(klass_name)
end
installed() click to toggle source
# File lib/skylight/core/probes.rb, line 56
def installed
  @installed ||= {}
end
lookup_by_require_path(require_path) click to toggle source
# File lib/skylight/core/probes.rb, line 101
def lookup_by_require_path(require_path)
  require_hooks[require_path]
end
paths() click to toggle source
# File lib/skylight/core/probes.rb, line 22
def paths
  @paths ||= []
end
probe(*probes) click to toggle source
# File lib/skylight/core/probes.rb, line 41
def probe(*probes)
  unknown = probes.map(&:to_s) - available.keys
  unless unknown.empty?
    raise ArgumentError, "unknown probes: #{unknown.join(', ')}"
  end

  probes.each do |p|
    require available[p.to_s]
  end
end
register(name, *args) click to toggle source
# File lib/skylight/core/probes.rb, line 64
def register(name, *args)
  registration = ProbeRegistration.new(name, *args)

  if available?(registration.klass_name)
    installed[registration.klass_name] = registration
    registration.install
  else
    register_require_hook(registration)
  end
end
register_require_hook(registration) click to toggle source
# File lib/skylight/core/probes.rb, line 89
def register_require_hook(registration)
  registration.require_paths.each do |p|
    require_hooks[p] = registration
  end
end
require_hook(require_path) click to toggle source
# File lib/skylight/core/probes.rb, line 75
def require_hook(require_path)
  registration = lookup_by_require_path(require_path)
  return unless registration

  # Double check constant is available
  if available?(registration.klass_name)
    installed[registration.klass_name] = registration
    registration.install

    # Don't need this to be called again
    unregister_require_hook(registration)
  end
end
require_hooks() click to toggle source
# File lib/skylight/core/probes.rb, line 52
def require_hooks
  @require_hooks ||= {}
end
unregister_require_hook(registration) click to toggle source
# File lib/skylight/core/probes.rb, line 95
def unregister_require_hook(registration)
  registration.require_paths.each do |p|
    require_hooks.delete(p)
  end
end