Module: NSA::Statsd::Subscriber

Included in:
Informant
Defined in:
lib/nsa/statsd/subscriber.rb

Constant Summary collapse

EXPECTED_RESPONDABLE_METHODS =
%i( count decrement gauge increment set time timing ).freeze

Instance Method Summary collapse

Instance Method Details

#__send_event_to_statsd(backend, name, start, finish, id, payload) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/nsa/statsd/subscriber.rb', line 19

def __send_event_to_statsd(backend, name, start, finish, id, payload)
  action = name.to_s.split(".").first || :count

  key_name = payload[:key]
  sample_rate = payload.fetch(:sample_rate, 1)

  case action.to_sym
  when :count, :timing, :set, :gauge then
    value = payload.fetch(:value) { 1 }
    backend.__send__(action, key_name, value, sample_rate)
  when :increment, :decrement then
    backend.__send__(action, key_name, sample_rate)
  end
end

#backend_valid?(backend) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
# File 'lib/nsa/statsd/subscriber.rb', line 34

def backend_valid?(backend)
  EXPECTED_RESPONDABLE_METHODS.all? do |method_name|
    backend.respond_to?(method_name)
  end
end

#statsd_subscribe(backend) ⇒ Object



9
10
11
12
13
14
15
16
17
# File 'lib/nsa/statsd/subscriber.rb', line 9

def statsd_subscribe(backend)
  unless backend_valid?(backend)
    fail "Backend must respond to the following methods:\n\t#{EXPECTED_RESPONDABLE_METHODS.join(", ")}"
  end

  ::ActiveSupport::Notifications.subscribe(/.statsd$/) do |name, start, finish, id, payload|
    __send_event_to_statsd(backend, name, start, finish, id, payload)
  end
end