Sha256: 85236120af2fd5e9b3fcba98fe1ee8cf969b5dd2d21fc0e8f01fc26988b0ad67

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

# encoding: utf-8

# this struct uniquely defines a metric, optionally inside
# the call scope of another metric
# the call scope of another metric
module OneApm
  class MetricSpec
    attr_reader   :name, :scope

    # the maximum length of a metric name or metric scope
    MAX_LENGTH = 255
    LENGTH_RANGE = (0...MAX_LENGTH)
    EMPTY_SCOPE = ''.freeze

    def initialize(metric_name='', metric_scope=nil)
      if metric_name.to_s.length > MAX_LENGTH
        @name = metric_name.to_s[LENGTH_RANGE]
      else
        @name = metric_name.to_s
      end

      if metric_scope
        if metric_scope.to_s.length > MAX_LENGTH
          @scope = metric_scope.to_s[LENGTH_RANGE]
        else
          @scope = metric_scope.to_s
        end
      else
        @scope = EMPTY_SCOPE
      end
    end

    def ==(o)
      self.eql?(o)
    end

    def eql? o
      @name == o.name && @scope == o.scope
    end

    def hash
      @name.hash ^ @scope.hash
    end

    # return a new metric spec if the given regex
    # matches the name or scope.
    def sub(pattern, replacement, apply_to_scope = true)
      OneApm::Manager.logger.warn("The sub method on metric specs is deprecated") rescue nil
      return nil if name !~ pattern &&
       (!apply_to_scope || scope.nil? || scope !~ pattern)
      new_name = name.sub(pattern, replacement)[LENGTH_RANGE]

      if apply_to_scope
        new_scope = (scope && scope.sub(pattern, replacement)[LENGTH_RANGE])
      else
        new_scope = scope
      end

      self.class.new new_name, new_scope
    end

    def to_s
      return name if scope.empty?
      "#{name}:#{scope}"
    end

    def inspect
      "#<OneApm::MetricSpec '#{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
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
oneapm_rpm-1.1.3 lib/one_apm/metrics/metric_spec.rb