Class: StatsD::Instrument::Metric

Inherits:
Object
  • Object
show all
Defined in:
lib/statsd/instrument/metric.rb

Constant Summary collapse

TYPES =
{
  c:  'increment',
  ms: 'measure',
  g:  'gauge',
  h:  'histogram',
  kv: 'key/value',
  s:  'set',
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Metric

Returns a new instance of Metric.



5
6
7
8
9
10
11
12
13
# File 'lib/statsd/instrument/metric.rb', line 5

def initialize(options = {})
  @type = options[:type] or raise ArgumentError, "Metric :type is required."
  @name = options[:name] or raise ArgumentError, "Metric :name is required."
  @name = StatsD.prefix ? "#{StatsD.prefix}.#{@name}" : @name unless options[:no_prefix]

  @value       = options[:value] || default_value
  @sample_rate = options[:sample_rate] || StatsD.default_sample_rate
  @tags        = StatsD::Instrument::Metric.normalize_tags(options[:tags])
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



3
4
5
# File 'lib/statsd/instrument/metric.rb', line 3

def name
  @name
end

#sample_rateObject

Returns the value of attribute sample_rate.



3
4
5
# File 'lib/statsd/instrument/metric.rb', line 3

def sample_rate
  @sample_rate
end

#tagsObject

Returns the value of attribute tags.



3
4
5
# File 'lib/statsd/instrument/metric.rb', line 3

def tags
  @tags
end

#typeObject

Returns the value of attribute type.



3
4
5
# File 'lib/statsd/instrument/metric.rb', line 3

def type
  @type
end

#valueObject

Returns the value of attribute value.



3
4
5
# File 'lib/statsd/instrument/metric.rb', line 3

def value
  @value
end

Class Method Details

.normalize_tags(tags) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/statsd/instrument/metric.rb', line 42

def self.normalize_tags(tags)
  return if tags.nil?
  tags = tags.map { |k, v| "#{k}:#{v}" } if tags.is_a?(Hash)
  tags.map do |tag| 
    components = tag.split(':', 2)
    components.map { |c| c.gsub(/[^\w\.-]+/, '_') }.join(':')
  end
end

Instance Method Details

#default_valueObject



15
16
17
18
19
20
# File 'lib/statsd/instrument/metric.rb', line 15

def default_value
  case type
    when :c; 1
    else raise ArgumentError, "A value is required for metric type #{type.inspect}."
  end
end

#inspectObject



29
30
31
# File 'lib/statsd/instrument/metric.rb', line 29

def inspect
  "#<StatsD::Instrument::Metric #{self.to_s}>"
end

#to_sObject



22
23
24
25
26
27
# File 'lib/statsd/instrument/metric.rb', line 22

def to_s
  str = "#{TYPES[type]} #{name}:#{value}"
  str << " @#{sample_rate}" if sample_rate != 1.0
  str << " " << tags.map { |t| "##{t}"}.join(' ') if tags
  str
end