Sha256: 17897111629b8861ba7e55e63220f1f2fa518f740bcabdb1f7b15c2d50ff37c1

Contents?: true

Size: 1.67 KB

Versions: 21

Compression:

Stored size: 1.67 KB

Contents

# this struct uniquely defines a metric, optionally inside
# the call scope of another metric
class NewRelic::MetricSpec
  attr_accessor   :name
  attr_accessor   :scope
  
  MAX_LENGTH = 100
  # Need a "zero-arg" constructor so it can be instantiated from java (using
  # jruby) for sending responses to ruby agents from the java collector.
  #
  def initialize(metric_name = '', metric_scope = '')
    self.name = (metric_name || '') && metric_name[0...MAX_LENGTH]
    self.scope = metric_scope && metric_scope[0...MAX_LENGTH]
  end
  
  def truncate!
    self.name = name[0...100] if name && name.size > 100
    self.scope = scope[0...100] if scope && scope.size > 100
  end
  
  def ==(o)
    self.eql?(o)
  end
  
  def eql? o
    self.class == o.class &&
    name.eql?(o.name) && 
    # coerce scope to a string and compare
     (scope || '') == (o.scope || '')
  end
  
  def hash
    h = name.hash
    h ^= scope.hash unless scope.nil?
    h
  end
  # return a new metric spec if the given regex
  # matches the name or scope.
  def sub(pattern, replacement, apply_to_scope = true)
    return nil if name !~ pattern && 
     (!apply_to_scope || scope.nil? || scope !~ pattern)
    new_name = name.sub(pattern, replacement)[0...MAX_LENGTH]
    
    if apply_to_scope
      new_scope = (scope && scope.sub(pattern, replacement)[0...MAX_LENGTH])
    else
      new_scope = scope
    end
    
    self.class.new new_name, new_scope
  end
  
  def to_s
    "#{name}:#{scope}"
  end
  
  def to_json(*a)
    {'name' => name, 
    'scope' => scope}.to_json(*a)
  end
  
  def <=>(o)
    namecmp = self.name <=> o.name
    return namecmp if namecmp != 0
    return (self.scope || '') <=> (o.scope || '')
  end
end

Version data entries

21 entries across 21 versions & 3 rubygems

Version Path
onyx_newrelic_rpm-2.12.5 lib/new_relic/metric_spec.rb
newrelic_rpm-2.12.3 lib/new_relic/metric_spec.rb
newrelic_rpm-2.12.2 lib/new_relic/metric_spec.rb
newrelic_rpm-2.12.2.beta2 lib/new_relic/metric_spec.rb
newrelic_rpm-2.12.2.beta lib/new_relic/metric_spec.rb
newrelic_rpm-2.12.1 lib/new_relic/metric_spec.rb
newrelic_rpm-2.12.1.alpha lib/new_relic/metric_spec.rb
newrelic_rpm-2.12.0 lib/new_relic/metric_spec.rb
newrelic_rpm-2.11.3 lib/new_relic/metric_spec.rb
newrelic_rpm-2.11.2 lib/new_relic/metric_spec.rb
newrelic_rpm-2.11.2.beta2 lib/new_relic/metric_spec.rb
newrelic_rpm-2.11.2.beta lib/new_relic/metric_spec.rb
newrelic_rpm-2.11.1 lib/new_relic/metric_spec.rb
newrelic_rpm-2.11.0.beta2 lib/new_relic/metric_spec.rb
newrelic_rpm-2.11.0.beta lib/new_relic/metric_spec.rb
newrelic_rpm-2.10.8 lib/new_relic/metric_spec.rb
newrelic_rpm-2.10.6 lib/new_relic/metric_spec.rb
newrelic_rpm-2.10.5 lib/new_relic/metric_spec.rb
newrelic_rpm-2.10.4 lib/new_relic/metric_spec.rb
newrelic_rpm-2.10.3 lib/new_relic/metric_spec.rb