Sha256: 180b55b6323211024a47e56f4db0c9636ed9dce791962cbf6138bedf890b5454

Contents?: true

Size: 1.81 KB

Versions: 47

Compression:

Stored size: 1.81 KB

Contents

# encoding: utf-8
# This file is distributed under New Relic's license terms.
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.

module NewRelic
  # We really don't want to send bad values to the collector, and it doesn't
  # accept types like Rational that have occasionally slipped into our data.
  #
  # These methods are intended to safely coerce things into the form we want,
  # to provide documentation of expected types on to_collector_array methods,
  # and to log failures if totally invalid data gets into outgoing data
  module Coerce
    module_function

    def int(value, context=nil)
      Integer(value)
    rescue => error
      log_failure(value, Integer, context, error)
      0
    end

    def int_or_nil(value, context=nil)
      return nil if value.nil?
      Integer(value)
    rescue => error
      log_failure(value, Integer, context, error)
      nil
    end

    def float(value, context=nil)
      result = Float(value)
      raise "Value #{result.inspect} is not finite." unless result.finite?
      result
    rescue => error
      log_failure(value, Float, context, error)
      0.0
    end

    def string(value, context=nil)
      return value if value.nil?
      String(value)
    rescue => error
      log_failure(value.class, String, context, error)
      ""
    end

    def scalar(val)
      case val
      when String, Integer, TrueClass, FalseClass, NilClass
        val
      when Float
        if val.finite?
          val
        else
          nil
        end
      when Symbol
        val.to_s
      else
        "#<#{val.class.to_s}>"
      end
    end

    def log_failure(value, type, context, error)
      msg = "Unable to convert '#{value}' to #{type}"
      msg += " in context '#{context}'" if context
      NewRelic::Agent.logger.warn(msg, error)
    end
  end
end

Version data entries

47 entries across 47 versions & 2 rubygems

Version Path
newrelic_rpm-6.7.0.359 lib/new_relic/coerce.rb
newrelic_rpm-6.6.0.358 lib/new_relic/coerce.rb
newrelic_rpm-6.5.0.357 lib/new_relic/coerce.rb
newrelic_rpm-6.4.0.356 lib/new_relic/coerce.rb
newrelic_rpm-6.3.0.355 lib/new_relic/coerce.rb
newrelic_rpm-6.2.0.354 lib/new_relic/coerce.rb
newrelic_rpm-6.1.0.352 lib/new_relic/coerce.rb
newrelic_rpm-6.0.0.351 lib/new_relic/coerce.rb
newrelic_rpm-5.7.0.350 lib/new_relic/coerce.rb
newrelic_rpm-5.6.0.349 lib/new_relic/coerce.rb
newrelic_rpm-5.5.0.348 lib/new_relic/coerce.rb
newrelic_rpm-5.4.0.347 lib/new_relic/coerce.rb
newrelic_rpm-5.3.0.346 lib/new_relic/coerce.rb
newrelic_rpm-5.2.0.345 lib/new_relic/coerce.rb
newrelic_rpm-5.1.0.344 lib/new_relic/coerce.rb
newrelic_rpm-5.0.0.342 lib/new_relic/coerce.rb
newrelic_rpm-4.8.0.341 lib/new_relic/coerce.rb
newrelic_rpm-4.7.1.340 lib/new_relic/coerce.rb
newrelic_rpm-4.7.0.339 lib/new_relic/coerce.rb
newrelic_rpm-4.6.0.338 lib/new_relic/coerce.rb