ventable-statsd 0.2.0
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 +7 -0
- data/.gitignore +16 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +227 -0
- data/Rakefile +16 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/ventable/statsd.rb +38 -0
- data/lib/ventable/statsd/tracker.rb +102 -0
- data/lib/ventable/statsd/version.rb +5 -0
- data/ventable-statsd.gemspec +34 -0
- metadata +171 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dcc39504e8969b950d09412fb294e9374363113b
|
4
|
+
data.tar.gz: 6404aafc8fc04e43600bb7ac613a84566b0e133e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 51acb90d7d8a388ab4b652b0380bfd9642de5d78dae31af1237a943228a9105e323bf072aebf200630396cf5e32f2ed470030f154ebcb0bffa817f9f3c55793b
|
7
|
+
data.tar.gz: a787a16e1d26efcb7388d1611f708e01404a9c1659cbfc38dc1ffa1f710079ddbf980d52d26249f27dcc27752d89afe6da7a0c3b7fbb009b38d2a2486aa4acae
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 Konstantin Gredeskoul
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,227 @@
|
|
1
|
+
|
2
|
+
[](https://travis-ci.org/kigster/ventable-statsd)
|
3
|
+
[](https://badge.fury.io/rb/ventable-statsd)
|
4
|
+
[](https://github.com/kigster/simple-feed/master/LICENSE.txt)
|
5
|
+
|
6
|
+
# Ventable::Statsd – Easily Track Application Events with Statsd
|
7
|
+
|
8
|
+
This library is a small extension to the
|
9
|
+
[Ventable](https://github.com/kigster/ventable) eventing library. It
|
10
|
+
provides out of the box support for tracking Ventable events using
|
11
|
+
Statsd.
|
12
|
+
|
13
|
+
Why? Because by utilizing Ventable's powerful abstraction you can map
|
14
|
+
the most important events in the system as classes, and then subscribe
|
15
|
+
them all globally to the `Statsd` collector.
|
16
|
+
|
17
|
+
This gem does not depend on any particular implementation of `statsd`
|
18
|
+
client library, and it expects that you create a `statsd` client and
|
19
|
+
pass it via the `.configure` to the `Ventable::Statsd`.
|
20
|
+
|
21
|
+
The client should typically respond to the methods such as `increment`,
|
22
|
+
`gauge`, `set`, `measure` and expect the metric name and value to be
|
23
|
+
it's parameters. The methods were modelled based on the
|
24
|
+
[`statsd-instrument`](https://github.com/Shopify/statsd-instrument) ruby
|
25
|
+
gem, but it should be compatible with many others.
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
The gem works as follows:
|
30
|
+
|
31
|
+
1. You configure the backend
|
32
|
+
2. You register your ventable events to notify `Ventable::Statsd`
|
33
|
+
3. You either follow the default naming strategy, or provide your own.
|
34
|
+
See [Naming Events](#naming-events) further down.
|
35
|
+
|
36
|
+
### Configuration
|
37
|
+
|
38
|
+
Before we can track our events, let's configure our statsd:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
require 'statsd-instrument'
|
42
|
+
require 'ventable/statsd'
|
43
|
+
|
44
|
+
# see https://github.com/Shopify/statsd-instrument for more info
|
45
|
+
StatsD.backend = StatsD::Instrument::Backends::UDPBackend.new("172.16.0.1:8125", :statsd)
|
46
|
+
|
47
|
+
Ventable::Statsd.configure do |config|
|
48
|
+
config.statsd = StatsD
|
49
|
+
config.enabled = true
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
### Registration of the Events
|
54
|
+
|
55
|
+
Now we must connect the event dispatch mechanism with the
|
56
|
+
`Ventable::Statsd` module:
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
class ApplicationOpenedEvent
|
60
|
+
include Ventable::Event
|
61
|
+
end
|
62
|
+
|
63
|
+
# Subscribe the event to track event dispatch
|
64
|
+
ApplicationOpenedEvent.notifies Ventable::Statsd
|
65
|
+
|
66
|
+
# Now fire the event, and it should send a packet to statsd!
|
67
|
+
ApplicationOpenedEvent.new.fire!
|
68
|
+
#=> calls StatsD.increment('application_opened_count', 1)
|
69
|
+
```
|
70
|
+
|
71
|
+
Or you can register `Ventable::Statsd` in a super class of all of your
|
72
|
+
application events, so that you don't have to repeat this code:
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
class AbstractEvent
|
76
|
+
def self.inherited(klass)
|
77
|
+
klass.instance_eval do
|
78
|
+
include Ventable::Event
|
79
|
+
end
|
80
|
+
klass.notifies Ventable::Statsd
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class ApplicationOpenedEvent < AbstractEvent; end
|
85
|
+
```
|
86
|
+
|
87
|
+
<a name='naming-events'></a>
|
88
|
+
|
89
|
+
### Naming Metrics from Events
|
90
|
+
|
91
|
+
The biggest customization lies within the way you might like to map
|
92
|
+
various event occurring to a specific metric name in the Graphite
|
93
|
+
database.
|
94
|
+
|
95
|
+
As you might now, when metric name is separated by a dot '.', Graphite
|
96
|
+
create sub-folders and group sub-metrics together. For example
|
97
|
+
`order.completed.count` and `order.cancelled.count` would be grouped
|
98
|
+
together under `order.*` in Graphite.
|
99
|
+
|
100
|
+
This is why the default naming scheme uses your event class name,
|
101
|
+
converts it to a lower-case underscored version, and replaces all
|
102
|
+
underscores with a dot (while also removing redundant `_event` if
|
103
|
+
there). This way, an event named, say `UserRegistrationCompletedEvent`
|
104
|
+
would be converted to a metric name `user.registration.completed.count`.
|
105
|
+
Note how the default metric type is `count`, which would be registered
|
106
|
+
by calling `increment(name, 1)` on `Statsd`.
|
107
|
+
|
108
|
+
#### Customizing Event-to-Metric Naming
|
109
|
+
|
110
|
+
But what if you wanted to customize how metrics are called?
|
111
|
+
|
112
|
+
What if you want to keep track of some events as a gauge and not the counter?
|
113
|
+
|
114
|
+
In these and other cases, there are two ways to customize the event
|
115
|
+
names. But before we jump in to see how these are configured, let's
|
116
|
+
discuss what these procs are expected to return.
|
117
|
+
|
118
|
+
##### Event Naming Hash
|
119
|
+
|
120
|
+
The *return* of naming customization method/proc is a complete or any
|
121
|
+
portion of the following hash — and here are a couple of examples that
|
122
|
+
hopefully explain how this hash is used by the library:
|
123
|
+
|
124
|
+
```ruby
|
125
|
+
# Method to call on statsd; and its value Metric to pass to Statsd
|
126
|
+
{ method: :increment, value: 1, name: 'graphite.metric.name' }
|
127
|
+
{ method: :gauge, value: event.total, name: 'graphite.aggregate.gauge' }
|
128
|
+
```
|
129
|
+
|
130
|
+
|
131
|
+
##### Globally via a Proc
|
132
|
+
|
133
|
+
You can configure a proc at the top level that receives an event as a
|
134
|
+
parameter, and returns an _event naming hash_ (see above) for a given
|
135
|
+
event. This can be useful if you can write a single proc that covers all
|
136
|
+
of your cases in one place, but is distinct from the default naming.
|
137
|
+
|
138
|
+
The argument to the proc or method is the event instance.
|
139
|
+
|
140
|
+
Below we provide the metric naming algorithm in the configuration clause
|
141
|
+
for the gem:
|
142
|
+
|
143
|
+
```ruby
|
144
|
+
Ventable::Stats.configure do |c|
|
145
|
+
# this would return a name 'my_event.count' for MyEvent
|
146
|
+
c.event_to_metric_proc = ->(event) { { method: :increment,
|
147
|
+
value: 1,
|
148
|
+
name: event.class.name.underscore + '.count' } }
|
149
|
+
end
|
150
|
+
```
|
151
|
+
|
152
|
+
##### Via a class method `statsd_config`
|
153
|
+
|
154
|
+
You can also configure each event with a class method `statsd_config`
|
155
|
+
that receives an event instance as an argument, and must return the
|
156
|
+
_event naming hash_ to customize the naming and statsd methods.
|
157
|
+
|
158
|
+
While in the previous example above the proc was applied to all events,
|
159
|
+
the following would only apply to the concrete event classes below:
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
class OrderShippedEvent
|
163
|
+
attr_accessor :carrier
|
164
|
+
class << self
|
165
|
+
def statsd_config
|
166
|
+
->(event) { { method: :increment,
|
167
|
+
value: 1,
|
168
|
+
name: "order.shipped.#{event.carrier.code}.count" } }
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
class OrderReturnStartedEvent
|
174
|
+
class << self
|
175
|
+
def statsd_config
|
176
|
+
->(*) { { name: 'order.returns.count' } }
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
```
|
181
|
+
|
182
|
+
The above examples demonstrate the flexibility of the naming:
|
183
|
+
|
184
|
+
1. In the first example, `OrderShippedEvent` is supposed have `carrier`
|
185
|
+
accessor, which in turn has a `code` — presumably returning a short
|
186
|
+
string, one of `%w(fedex ups dhl)` etc. By using this custom naming
|
187
|
+
scheme we are able to group in Graphite our shipping completions by
|
188
|
+
carrier without having to create a new event class for each carrier
|
189
|
+
type.
|
190
|
+
2. In the second example we do not care about the event instance, but
|
191
|
+
provide the gem with an alternative name for this event. Note also
|
192
|
+
that we are not including `:method` or `:value`, which would then be
|
193
|
+
used from the defaults.
|
194
|
+
|
195
|
+
|
196
|
+
## Installation
|
197
|
+
|
198
|
+
Add this line to your application's Gemfile:
|
199
|
+
|
200
|
+
```ruby
|
201
|
+
gem 'ventable-statsd'
|
202
|
+
```
|
203
|
+
|
204
|
+
And then execute:
|
205
|
+
|
206
|
+
$ bundle
|
207
|
+
|
208
|
+
Or install it yourself as:
|
209
|
+
|
210
|
+
$ gem install ventable-statsd
|
211
|
+
|
212
|
+
## Development
|
213
|
+
|
214
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
215
|
+
|
216
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
217
|
+
|
218
|
+
## Contributing
|
219
|
+
|
220
|
+
Bug reports and pull requests are welcome on GitHub at
|
221
|
+
https://github.com/kigster/ventable-statsd.
|
222
|
+
|
223
|
+
|
224
|
+
## License
|
225
|
+
|
226
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
227
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
require 'yard'
|
5
|
+
|
6
|
+
|
7
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
8
|
+
t.files = %w(lib/**/*.rb exe/*.rb - README.md LICENSE.txt)
|
9
|
+
t.options.unshift('--title', '"SimpleFeed — Fast and Scalable "write-time" Simple Feed for Social Networks, with a Redis-based default backend implementation."')
|
10
|
+
t.after = ->() { exec('open doc/index.html') } if RUBY_PLATFORM =~ /darwin/
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
RSpec::Core::RakeTask.new(:spec)
|
15
|
+
|
16
|
+
task :default => :spec
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "ventable/statsd"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'ventable/statsd/version'
|
2
|
+
require 'ventable/statsd/tracker'
|
3
|
+
|
4
|
+
module Ventable
|
5
|
+
module Statsd
|
6
|
+
# @!parse extend Ventable::Statsd::Tracker::InstanceMethods
|
7
|
+
def tracker
|
8
|
+
Ventable::Statsd::Tracker.instance
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.tracker
|
12
|
+
Ventable::Statsd::Tracker.instance
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.configure
|
16
|
+
yield(Ventable::Statsd::Tracker.instance)
|
17
|
+
end
|
18
|
+
|
19
|
+
class << self
|
20
|
+
# @!macro [attach] generate_method
|
21
|
+
# @method $1_way
|
22
|
+
# Sends $1 to +Ventable::Statsd::Tracker.instance+
|
23
|
+
def self.gen(method)
|
24
|
+
define_method(method) do |*args|
|
25
|
+
tracker.send(method, *args)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
gen :handle_event
|
30
|
+
gen :event_to_metric
|
31
|
+
gen :event_to_metric_proc=
|
32
|
+
gen :enable!
|
33
|
+
gen :disable!
|
34
|
+
gen :statsd=
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
require 'ventable'
|
3
|
+
require 'active_support/inflections'
|
4
|
+
|
5
|
+
module Ventable
|
6
|
+
module Statsd
|
7
|
+
PROXIED_METHODS = %i(increment gauge set measure)
|
8
|
+
|
9
|
+
DEFAULT_CONFIGURATION = ->(event) { { method: :increment,
|
10
|
+
value: 1,
|
11
|
+
name: event_to_metric(event) + '.count' } }
|
12
|
+
|
13
|
+
# Main interface class which delegates some methods to the instance of
|
14
|
+
# statsd in order to increment, or gauge/set various metrics.
|
15
|
+
#
|
16
|
+
# @attr [Statsd] statsd any statsd interface class that responds to methods listed in +PROXIED_METHODS+
|
17
|
+
# @attr_reader [Bool] enabled set to false to bypass delegation
|
18
|
+
# @attr_writer [Proc] event_to_metric_proc optional proc returning event configuration hash
|
19
|
+
class Tracker
|
20
|
+
include Singleton
|
21
|
+
|
22
|
+
attr_writer :statsd, :enabled, :event_to_metric_proc
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def initialize
|
27
|
+
super
|
28
|
+
@statsd = nil
|
29
|
+
@enabled = true
|
30
|
+
@event_to_metric_proc = nil
|
31
|
+
end
|
32
|
+
|
33
|
+
public
|
34
|
+
|
35
|
+
PROXIED_METHODS.each do |method|
|
36
|
+
define_method(method) do |metric, amount, *args|
|
37
|
+
@statsd.send(method, metric, amount, *args)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def enable!
|
42
|
+
self.enabled = true
|
43
|
+
end
|
44
|
+
|
45
|
+
def disable!
|
46
|
+
self.enabled = false
|
47
|
+
end
|
48
|
+
|
49
|
+
# A wrapper around the actual +Statsd+, which checks whether
|
50
|
+
# the gem is enabled or disabled before calling +Statsd+.
|
51
|
+
#
|
52
|
+
# @param [Symbol] operation method name to send to the actual +Statsd+
|
53
|
+
#
|
54
|
+
# @example Increment a counter
|
55
|
+
# enable!
|
56
|
+
# statsd(:increment, 'my_event_count', 1)
|
57
|
+
#
|
58
|
+
# @return nil if disabled, or whatever +Statsd+ returns otherwise.
|
59
|
+
def statsd(operation, *args, **opts, &block)
|
60
|
+
if @enabled
|
61
|
+
raise ArgumentError, 'statsd is not configured, please set it before recording events' unless @statsd
|
62
|
+
self.send(operation, *args, **opts, &block)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def handle_event(event)
|
67
|
+
ec = event_config(event)
|
68
|
+
options = ec[:options] || {}
|
69
|
+
statsd(ec[:method], *[ec[:name], ec[:value]], **options)
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def event_config(event)
|
75
|
+
# defaults:
|
76
|
+
config = DEFAULT_CONFIGURATION[event]
|
77
|
+
|
78
|
+
if @event_to_metric_proc
|
79
|
+
proc_config = @event_to_metric_proc.call(event) # expect a config Hash
|
80
|
+
raise TypeError, "#event_to_metric_proc must return a hash, \neg. { method: :gauge, value: 0.1, name: 'frauds_detected_this_hour' }, \nbut I got #{proc_config.class.name}" unless proc_config.is_a?(Hash)
|
81
|
+
config.merge!(proc_config) if proc_config
|
82
|
+
end
|
83
|
+
|
84
|
+
if event.class.respond_to?(:statsd_config)
|
85
|
+
config.merge!(event.class.statsd_config(event))
|
86
|
+
end
|
87
|
+
|
88
|
+
config
|
89
|
+
end
|
90
|
+
|
91
|
+
def event_to_metric(event)
|
92
|
+
event.
|
93
|
+
class.
|
94
|
+
name.
|
95
|
+
gsub(/.*::/, '').
|
96
|
+
underscore.
|
97
|
+
gsub(/_?event/, '').
|
98
|
+
gsub('_', '.')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'ventable/statsd/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'ventable-statsd'
|
8
|
+
spec.version = Ventable::Statsd::VERSION
|
9
|
+
spec.authors = ['Konstantin Gredeskoul']
|
10
|
+
spec.email = ['kig@reinvent.one']
|
11
|
+
|
12
|
+
spec.summary = %q{Integrate Ventable with Statsd in order to track some or all events that occur using a light-weight UDP protocol.}
|
13
|
+
spec.description = %q{Integrate Ventable with Statsd in order to track some or all events that occur using a light-weight UDP protocol.}
|
14
|
+
spec.homepage = 'https://github.com/kigster/ventable-statsd'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^(test|spec|features)/})
|
19
|
+
end
|
20
|
+
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ['lib']
|
23
|
+
|
24
|
+
spec.add_dependency 'activesupport'
|
25
|
+
spec.add_dependency 'ventable', '~> 1.0'
|
26
|
+
|
27
|
+
spec.add_development_dependency 'yard'
|
28
|
+
spec.add_development_dependency 'simplecov', '~> 0.12'
|
29
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
|
30
|
+
|
31
|
+
spec.add_development_dependency 'bundler', '~> 1.13'
|
32
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
33
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ventable-statsd
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Konstantin Gredeskoul
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-11-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ventable
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: yard
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.12'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.12'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: codeclimate-test-reporter
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.13'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.13'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '10.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '10.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.0'
|
125
|
+
description: Integrate Ventable with Statsd in order to track some or all events that
|
126
|
+
occur using a light-weight UDP protocol.
|
127
|
+
email:
|
128
|
+
- kig@reinvent.one
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- ".gitignore"
|
134
|
+
- ".rspec"
|
135
|
+
- ".travis.yml"
|
136
|
+
- Gemfile
|
137
|
+
- LICENSE.txt
|
138
|
+
- README.md
|
139
|
+
- Rakefile
|
140
|
+
- bin/console
|
141
|
+
- bin/setup
|
142
|
+
- lib/ventable/statsd.rb
|
143
|
+
- lib/ventable/statsd/tracker.rb
|
144
|
+
- lib/ventable/statsd/version.rb
|
145
|
+
- ventable-statsd.gemspec
|
146
|
+
homepage: https://github.com/kigster/ventable-statsd
|
147
|
+
licenses:
|
148
|
+
- MIT
|
149
|
+
metadata: {}
|
150
|
+
post_install_message:
|
151
|
+
rdoc_options: []
|
152
|
+
require_paths:
|
153
|
+
- lib
|
154
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
requirements: []
|
165
|
+
rubyforge_project:
|
166
|
+
rubygems_version: 2.6.6
|
167
|
+
signing_key:
|
168
|
+
specification_version: 4
|
169
|
+
summary: Integrate Ventable with Statsd in order to track some or all events that
|
170
|
+
occur using a light-weight UDP protocol.
|
171
|
+
test_files: []
|