nsa 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8bdfbae20466016d5db607c944f63ce3a46a47c
4
- data.tar.gz: 4b8dea2faaeebafdce145bebb0ccd285221f6bad
3
+ metadata.gz: e00f8a3beffa73912bccaa929bbfd50fbfc89775
4
+ data.tar.gz: 6f3bc08197a8975d66bf970a74769d7ba74d2506
5
5
  SHA512:
6
- metadata.gz: 999bcc2be8968a66c23bff9662bff68ee0cc766aa8b36bcf5f98c83caf019ce492b2cd25fb558912f6f1d436712147ed0b0daf3fa6438015f237f0c39b42239e
7
- data.tar.gz: 28a3bc1173dcdf14e8ad1cf210bbf7b6a5fe6d157c80d6f2c96fbd70258ffed4f7e63d304e53b91750261d563d654e83d9e61ce189e5cb91da0952fe90e6b5b6
6
+ metadata.gz: d36ef682fb0278c9e8b1e54e051cf01df1f0c499a437889d204e339552aae977dd1398724f9dca174a98f830f0bc1ec3793f0be25d1f942e172fe7c3f090b7aa
7
+ data.tar.gz: db4e5a11691f10d8bb9e123d59502de8bf85280b61809d660e54f632325678e23c49897b3bdebfa7dd6862f42f4bc17a73a5145f98903830fb0bae22a96cbc31
data/README.md CHANGED
@@ -3,6 +3,9 @@
3
3
  Listen to Rails `ActiveSupport::Notifications` and deliver to a [Statsd](https://github.com/reinh/statsd) backend.
4
4
  This gem also supports writing your own custom collectors.
5
5
 
6
+ [![Gem Version](https://badge.fury.io/rb/nsa.svg)](https://badge.fury.io/rb/nsa)
7
+ [![Build Status](https://travis-ci.org/localshred/nsa.svg)](https://travis-ci.org/localshred/nsa)
8
+
6
9
  ## Installation
7
10
 
8
11
  Add this line to your application's Gemfile:
@@ -29,12 +32,12 @@ collectors you'd like to run. Each `collect` method specifies a Collector to use
29
32
  and the additional key namespace.
30
33
 
31
34
  ```ruby
32
- $statsd = ::Statsd.new(ENV["STATSD_HOST"], ENV["STATSD_PORT"])
35
+ statsd = ::Statsd.new(ENV["STATSD_HOST"], ENV["STATSD_PORT"])
33
36
  application_name = ::Rails.application.class.parent_name.underscore
34
37
  application_env = ENV["PLATFORM_ENV"] || ::Rails.env
35
- $statsd.namespace = [ application_name, application_env ].join(".")
38
+ statsd.namespace = [ application_name, application_env ].join(".")
36
39
 
37
- ::NSA.inform_statsd($statsd) do |informant|
40
+ ::NSA.inform_statsd(statsd) do |informant|
38
41
  # Load :action_controller collector with a key prefix of :web
39
42
  informant.collect(:action_controller, :web)
40
43
  informant.collect(:active_record, :db)
@@ -107,8 +110,18 @@ Writing your own collector is very simple. To take advantage of the keyspace han
107
110
 
108
111
  1. Create an object/module which responds to `collect`, taking the `key_prefix` as its only argument.
109
112
  2. Include or extend your class/module with `NSA::Statsd::Publisher`.
113
+ 3. Call any of the `statsd_*` prefixed methods provided by the `Publisher`:
114
+
115
+ + `statsd_count(key, value = 1, sample_rate = nil)`
116
+ + `statsd_decrement(key, sample_rate = nil)`
117
+ + `statsd_gauge(key, value = 1, sample_rate = nil)`
118
+ + `statsd_increment(key, sample_rate = nil)`
119
+ + `statsd_set(key, value = 1, sample_rate = nil)`
120
+ + `statsd_time(key, sample_rate = nil, &block)`
121
+ + `statsd_timing(key, value = 1, sample_rate = nil)`
110
122
 
111
- For example:
123
+ For example, first define your collector. Our (very naive) example will write
124
+ a gauge metric every 10 seconds of the User count in the db.
112
125
 
113
126
  ```ruby
114
127
  module UsersCollector
@@ -123,9 +136,11 @@ module UsersCollector
123
136
  end
124
137
  ```
125
138
 
126
- Then let the informant know about it:
139
+ Then let the informant know about it in some initializer:
127
140
 
128
141
  ```ruby
142
+ # file: config/initializers/statsd.rb
143
+
129
144
  # $statsd =
130
145
  NSA.inform_statsd($statsd) do |informant|
131
146
  # ...
@@ -133,16 +148,6 @@ NSA.inform_statsd($statsd) do |informant|
133
148
  end
134
149
  ```
135
150
 
136
- The `NSA::Statsd::Publisher` module exposes the following methods:
137
-
138
- + `statsd_count(key, value = 1, sample_rate = nil)`
139
- + `statsd_decrement(key, sample_rate = nil)`
140
- + `statsd_gauge(key, value = 1, sample_rate = nil)`
141
- + `statsd_increment(key, sample_rate = nil)`
142
- + `statsd_set(key, value = 1, sample_rate = nil)`
143
- + `statsd_time(key, sample_rate = nil, &block)`
144
- + `statsd_timing(key, value = 1, sample_rate = nil)`
145
-
146
151
  ## Development
147
152
 
148
153
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -4,8 +4,12 @@ module NSA
4
4
  module Statsd
5
5
  module Subscriber
6
6
 
7
+ EXPECTED_RESPONDABLE_METHODS = %i( count decrement gauge increment set time timing ).freeze
8
+
7
9
  def statsd_subscribe(backend)
8
- fail "Backend must be a Statsd object. Got '#{backend.class.name}' instead." unless backend.is_a?(::String)
10
+ unless backend_valid?(backend)
11
+ fail "Backend must respond to the following methods:\n\t#{EXPECTED_RESPONDABLE_METHODS.join(", ")}"
12
+ end
9
13
 
10
14
  ::ActiveSupport::Notifications.subscribe(/.statsd$/) do |name, start, finish, id, payload|
11
15
  __send_event_to_statsd(backend, name, start, finish, id, payload)
@@ -28,6 +32,12 @@ module NSA
28
32
  end
29
33
  end
30
34
 
35
+ def backend_valid?(backend)
36
+ EXPECTED_RESPONDABLE_METHODS.all? do |method_name|
37
+ backend.respond_to?(method_name)
38
+ end
39
+ end
40
+
31
41
  end
32
42
  end
33
43
  end
@@ -1,3 +1,3 @@
1
1
  module NSA
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nsa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - BJ Neilsen