Sha256: 2fc04fbb87fd872c06a5a7a9b1b82d0db7e4fdabe2bf5fa170da1ff0d2a5bf8c

Contents?: true

Size: 1.79 KB

Versions: 33

Compression:

Stored size: 1.79 KB

Contents

# encoding: utf-8

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

33 entries across 33 versions & 1 rubygems

Version Path
oneapm_rpm-1.3.6 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.6.rc1 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.5 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.5.rc1 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.4 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.4.rc1 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.3 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.3.rc1 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.2 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.2.rc1 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.1 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.1.rc1 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.0 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.3.0.rc1 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.2.9 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.2.9.rc1 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.2.8 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.2.8.rc1 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.2.7 lib/one_apm/metrics/metric_spec.rb
oneapm_rpm-1.2.7.rc1 lib/one_apm/metrics/metric_spec.rb