Module: FFWD::Plugin::Statsd::Parser

Defined in:
lib/ffwd/plugin/statsd/parser.rb

Constant Summary collapse

COUNT =
"count"
HISTOGRAM =
"histogram"
RATE =
"rate"

Class Method Summary collapse

Class Method Details

.count(name, value) ⇒ Object



28
29
30
# File 'lib/ffwd/plugin/statsd/parser.rb', line 28

def self.count name, value
  {:proc => COUNT, :key => name, :value => value}
end

.gauge(name, value) ⇒ Object



24
25
26
# File 'lib/ffwd/plugin/statsd/parser.rb', line 24

def self.gauge name, value
  {:proc => nil, :key => name, :value => value}
end

.meter(name, value) ⇒ Object



32
33
34
# File 'lib/ffwd/plugin/statsd/parser.rb', line 32

def self.meter name, value
  {:proc => RATE, :key => name, :value => value}
end

.parse(m) ⇒ Object

Raises:



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/ffwd/plugin/statsd/parser.rb', line 40

def self.parse m
  name, value = m.split ':', 2

  if value.nil?
    raise ParserError.new("Missing value")
  end

  value, type_block = value.split '|', 2

  if type_block.nil?
    raise ParserError.new("Missing type")
  end

  type, sample_rate = type_block.split '|@', 2

  if type.nil? or type.empty?
    raise ParserError.new("Missing type")
  end

  if value.nil? or value.empty?
    raise ParserError.new("Missing value")
  end

  value = value.to_f

  sample_rate = sample_rate.to_f unless sample_rate.nil?

  value /= sample_rate unless sample_rate.nil?

  if type == "g"
    return gauge(name, value)
  end

  if type == "c"
    return count(name, value)
  end

  if type == "m"
    return meter(name, value)
  end

  if type == "ms" or type == "h"
    return timing(name, value)
  end

  raise ParserError.new(
    "Received message of unsupported type '#{type}'")
end

.timing(name, value) ⇒ Object



36
37
38
# File 'lib/ffwd/plugin/statsd/parser.rb', line 36

def self.timing name, value
  {:proc => HISTOGRAM, :key => name, :value => value}
end