Class: StatsD::Instrument::MetricExpectation

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

Constant Summary collapse

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ MetricExpectation

Returns a new instance of MetricExpectation.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/statsd/instrument/metric_expectation.rb', line 8

def initialize(options = {})
  if options[:type]
    @type = options[:type]
  else
    raise ArgumentError, "Metric :type is required."
  end

  if options[:name]
    @name = options[:name]
  else
    raise ArgumentError, "Metric :name is required."
  end

  if options[:times]
    @times = options[:times]
  else
    raise ArgumentError, "Metric :times is required."
  end

  @name = StatsD.prefix ? "#{StatsD.prefix}.#{@name}" : @name unless options[:no_prefix]
  @tags = StatsD::Instrument::Metric.normalize_tags(options[:tags])
  @sample_rate = options[:sample_rate]
  @value = options[:value]
  @ignore_tags = StatsD::Instrument::Metric.normalize_tags(options[:ignore_tags])
end

Instance Attribute Details

#ignore_tagsObject (readonly)

Returns the value of attribute ignore_tags.



6
7
8
# File 'lib/statsd/instrument/metric_expectation.rb', line 6

def ignore_tags
  @ignore_tags
end

#nameObject

Returns the value of attribute name.



5
6
7
# File 'lib/statsd/instrument/metric_expectation.rb', line 5

def name
  @name
end

#sample_rateObject

Returns the value of attribute sample_rate.



5
6
7
# File 'lib/statsd/instrument/metric_expectation.rb', line 5

def sample_rate
  @sample_rate
end

#tagsObject

Returns the value of attribute tags.



5
6
7
# File 'lib/statsd/instrument/metric_expectation.rb', line 5

def tags
  @tags
end

#timesObject

Returns the value of attribute times.



5
6
7
# File 'lib/statsd/instrument/metric_expectation.rb', line 5

def times
  @times
end

#typeObject

Returns the value of attribute type.



5
6
7
# File 'lib/statsd/instrument/metric_expectation.rb', line 5

def type
  @type
end

#valueObject

Returns the value of attribute value.



5
6
7
# File 'lib/statsd/instrument/metric_expectation.rb', line 5

def value
  @value
end

Instance Method Details

#default_valueObject



57
58
59
# File 'lib/statsd/instrument/metric_expectation.rb', line 57

def default_value
  1 if type == :c
end

#inspectObject



79
80
81
# File 'lib/statsd/instrument/metric_expectation.rb', line 79

def inspect
  "#<StatsD::Instrument::MetricExpectation #{self}>"
end

#matches(actual_metric) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/statsd/instrument/metric_expectation.rb', line 34

def matches(actual_metric)
  return false if sample_rate && sample_rate != actual_metric.sample_rate
  return false if value && value != actual_metric.value

  if tags

    expected_tags = Set.new(tags)
    actual_tags = Set.new(actual_metric.tags)

    if ignore_tags
      ignored_tags = Set.new(ignore_tags) - expected_tags
      actual_tags -= ignored_tags

      if ignore_tags.is_a?(Array)
        actual_tags.delete_if { |key| ignore_tags.include?(key.split(":").first) }
      end
    end

    return expected_tags.subset?(actual_tags)
  end
  true
end

#to_sObject



71
72
73
74
75
76
77
# File 'lib/statsd/instrument/metric_expectation.rb', line 71

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 << " times:#{times}" if times > 1
  str
end