class Appsignal::Environment

@!visibility private

def self.report(key)

Returns:
  • (void) -

Other tags:
    Yieldreturn: - The value of the key of the environment metadata.

Parameters:
  • key (String) -- The name of the key of the environment metadata value.

Other tags:
    Example: When an error occurs -
    Example: When a value is nil -
    Example: Reporting a key and value -
def self.report(key)
  key =
    case key
    when String
      key
    else
      Appsignal.internal_logger.error "Unable to report on environment " \
        "metadata: Unsupported value type for #{key.inspect}"
      return
    end
  yielded_value =
    begin
      yield
    rescue => e
      Appsignal.internal_logger.error \
        "Unable to report on environment metadata #{key.inspect}:\n" \
          "#{e.class}: #{e}"
      ERROR_ON_YIELD
    end
  return if yielded_value == ERROR_ON_YIELD
  value =
    case yielded_value
    when TrueClass, FalseClass
      yielded_value.to_s
    when String
      yielded_value
    else
      Appsignal.internal_logger.error "Unable to report on environment " \
        "metadata #{key.inspect}: Unsupported value type for " \
        "#{yielded_value.inspect}"
      return
    end
  Appsignal::Extension.set_environment_metadata(key, value)
rescue => e
  Appsignal.internal_logger.error "Unable to report on environment " \
    "metadata:\n#{e.class}: #{e}"
end

def self.report_enabled(feature)

Returns:
  • (void) -

Parameters:
  • feature (String) -- Name of the feature to report as enabled.
def self.report_enabled(feature)
  Appsignal::Environment.report("ruby_#{feature}_enabled") { true }
rescue => e
  Appsignal.internal_logger.error "Unable to report integration " \
    "enabled:\n#{e.class}: #{e}"
end

def self.report_supported_gems

Returns:
  • (void) -
def self.report_supported_gems
  return unless defined?(Bundler) # Do nothing if Bundler is not present
  bundle_gem_specs =
    if ::Bundler.rubygems.respond_to?(:installed_specs)
      ::Bundler.rubygems.installed_specs
    else
      ::Bundler.rubygems.all_specs
    end
  SUPPORTED_GEMS.each do |gem_name|
    gem_spec = bundle_gem_specs.find { |spec| spec.name == gem_name }
    next unless gem_spec
    report("ruby_#{gem_name}_version") { gem_spec.version.to_s }
  end
rescue => e
  Appsignal.internal_logger.error "Unable to report supported gems:\n" \
    "#{e.class}: #{e}"
end