class Rookout::Augs::AugFactory

Public Class Methods

new(output) click to toggle source
# File lib/rookout/augs/aug_factory.rb, line 16
def initialize output
  @output = output
  @factory = Processor::ProcessorFactory.new
end

Public Instance Methods

create_aug(configuration) click to toggle source
# File lib/rookout/augs/aug_factory.rb, line 21
def create_aug configuration
  aug_id = configuration["id"]
  raise Exceptions::RookAugInvalidKey.new("id", configuration) unless aug_id.is_a? String

  action_configuration = configuration["action"]
  raise Exceptions::RookAugInvalidKey.new("action", configuration) unless action_configuration.is_a? Hash
  action = Actions::ActionRunProcessor.new action_configuration, @factory

  max_aug_time = configuration["maxAugTime"] || Config.instrumentation_max_aug_time

  condition_configuration = configuration["conditional"]
  raise Exceptions::RookAugInvalidKey.new("conditional", configuration) unless
      condition_configuration.nil? || condition_configuration.is_a?(String)
  condition = condition_configuration.nil? ? nil : Conditions::Condition.new(condition_configuration)

  rate_limit = create_rate_limit configuration

  max_aug_time_ns = Utils.milliseconds_to_nanoseconds max_aug_time
  aug = Aug.new aug_id, action, condition, rate_limit, max_aug_time_ns

  location_configuration = configuration["location"]
  raise Exceptions::RookAugInvalidKey.new("location", configuration) unless location_configuration.is_a? Hash
  create_location location_configuration, aug
end

Private Instance Methods

create_location(configuration, aug) click to toggle source
# File lib/rookout/augs/aug_factory.rb, line 48
def create_location configuration, aug
  name = configuration["name"]
  raise Exceptions::RookObjectNameMissing if name.nil?

  case name
  when "file_line"
    return Locations::LocationFileLine.new configuration, @output, aug
  when "exception_handler"
    return Locations::LocationExceptionHandler.new configuration, @output, aug
  else
    raise Exceptions::RookUnsupportedLocation if name != "file_line"
  end
end
create_rate_limit(configuration) click to toggle source
# File lib/rookout/augs/aug_factory.rb, line 62
def create_rate_limit configuration
  window_quota = 200
  window_size = 5000

  rate_limit = configuration["rateLimit"]
  if rate_limit
    rate_limit_splitted = rate_limit.split "/"
    if rate_limit_splitted.length == 2
      window_quota = rate_limit_splitted[0].to_i
      window_size = rate_limit_splitted[1].to_i
    end
  end

  rate_limit_modifier = configuration["rateLimitModifier"] || 5

  window_quota_ns = Utils.milliseconds_to_nanoseconds window_quota
  window_size_ns = Utils.milliseconds_to_nanoseconds window_size

  AugRateLimiter.new window_quota_ns, window_size_ns, rate_limit_modifier
end