nightwing 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 026f5c884e256b1db6ae3dfc0d491ef78355f181
4
+ data.tar.gz: bd780bd6f1331e749da81c91545ad2a0ef994ac0
5
+ SHA512:
6
+ metadata.gz: 1f068baec9849f613dce5da7971752904d8f2ebf260264ee36dd95c7a3807a0e0f5f70a583de518ec429dcfe3c0ba63cf7c008a077fbe60c30284d67155b176e
7
+ data.tar.gz: 4c311cb5de9248e5b5961cf088b6658dcb3207483cc158b6e1d7525d5fcdea7dda5f8a3be171d5e5dd572669689a775abd4e0f2a8c9f1ce9b16f5cef786667d5
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+ robin-*.gem
3
+ nightwing-*.gem
4
+ .idea
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --format documentation
data/.rubocop.yml ADDED
@@ -0,0 +1,18 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.3
3
+ Documentation:
4
+ Enabled: false
5
+ Metrics/AbcSize:
6
+ Max: 35
7
+ Metrics/MethodLength:
8
+ Enabled: false
9
+ Metrics/LineLength:
10
+ Max: 120
11
+ StringLiterals:
12
+ EnforcedStyle: double_quotes
13
+ Style/FrozenStringLiteralComment:
14
+ Enabled: false
15
+ Style/SignalException:
16
+ Enabled: false
17
+ Style/GuardClause:
18
+ Enabled: false
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.3.0
data/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ ## Unreleased
2
+
3
+ - Renamed project to "Nightwing"
4
+ - Gem name is now "nightwing"
5
+
6
+ ## 0.0.4
7
+
8
+ - Changed default namespace from "robin.sidekiq" to "sidekiq"
9
+ - Removed Librato dependency
10
+ - `:client` middleware option is now required
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,70 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ nightwing (0.0.4)
5
+ activesupport (>= 4.1.0)
6
+ sidekiq (>= 2.6)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (4.2.5.1)
12
+ i18n (~> 0.7)
13
+ json (~> 1.7, >= 1.7.7)
14
+ minitest (~> 5.1)
15
+ thread_safe (~> 0.3, >= 0.3.4)
16
+ tzinfo (~> 1.1)
17
+ ast (2.2.0)
18
+ builder (3.2.2)
19
+ concurrent-ruby (1.0.0)
20
+ connection_pool (2.2.0)
21
+ diff-lcs (1.2.5)
22
+ i18n (0.7.0)
23
+ json (1.8.3)
24
+ minitest (5.8.4)
25
+ parser (2.3.0.2)
26
+ ast (~> 2.2)
27
+ powerpack (0.1.1)
28
+ rainbow (2.1.0)
29
+ redis (3.2.2)
30
+ rspec (3.4.0)
31
+ rspec-core (~> 3.4.0)
32
+ rspec-expectations (~> 3.4.0)
33
+ rspec-mocks (~> 3.4.0)
34
+ rspec-core (3.4.1)
35
+ rspec-support (~> 3.4.0)
36
+ rspec-expectations (3.4.0)
37
+ diff-lcs (>= 1.2.0, < 2.0)
38
+ rspec-support (~> 3.4.0)
39
+ rspec-mocks (3.4.1)
40
+ diff-lcs (>= 1.2.0, < 2.0)
41
+ rspec-support (~> 3.4.0)
42
+ rspec-support (3.4.1)
43
+ rspec_junit_formatter (0.2.3)
44
+ builder (< 4)
45
+ rspec-core (>= 2, < 4, != 2.12.0)
46
+ rubocop (0.36.0)
47
+ parser (>= 2.3.0.0, < 3.0)
48
+ powerpack (~> 0.1)
49
+ rainbow (>= 1.99.1, < 3.0)
50
+ ruby-progressbar (~> 1.7)
51
+ ruby-progressbar (1.7.5)
52
+ sidekiq (4.1.0)
53
+ concurrent-ruby (~> 1.0)
54
+ connection_pool (~> 2.2, >= 2.2.0)
55
+ redis (~> 3.2, >= 3.2.1)
56
+ thread_safe (0.3.5)
57
+ tzinfo (1.2.2)
58
+ thread_safe (~> 0.1)
59
+
60
+ PLATFORMS
61
+ ruby
62
+
63
+ DEPENDENCIES
64
+ nightwing!
65
+ rspec (~> 3.4, >= 3.4.0)
66
+ rspec_junit_formatter (~> 0.2, >= 0.2.3)
67
+ rubocop (~> 0.36)
68
+
69
+ BUNDLED WITH
70
+ 1.11.2
data/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # Nightwing
2
+
3
+ Nightwing is a Sidekiq middleware for capturing worker metrics including number processed, number of failures, timing, etc.
4
+
5
+ ## Installation
6
+
7
+ Inside your Gemfile, add the following line:
8
+
9
+ ```Gemfile
10
+ gem 'nightwing', github: 'teespring/nightwing'
11
+ ```
12
+
13
+ ## Configuration
14
+
15
+ You will need to add the code below to your app. In a typical Rails app, this would go into an initializer.
16
+
17
+ ```ruby
18
+ # config/initializers/sidekiq.rb
19
+ Sidekiq.configure_server do |config|
20
+ config.server_middleware do |chain|
21
+ chain.add Nightwing::Sidekiq::Stats, client: Librato
22
+ chain.add Nightwing::Sidekiq::QueueStats, client: Librato
23
+ chain.add Nightwing::Sidekiq::WorkerStats, client: Librato
24
+ end
25
+ end
26
+ ```
27
+
28
+ ### Available options
29
+
30
+ - `client`: Librato or statsd client. Required.
31
+ - `namespace`: the string each metric is prefixed with. Defaults to `"sidekiq"`.
32
+
33
+ ## Metrics
34
+
35
+ Below are the metrics reported to Librato from the Sidekiq middleware
36
+
37
+ - `sidekiq.retries`: number of jobs to be retried
38
+ - `sidekiq.scheduled`: number of jobs scheduled to run
39
+ - `sidekiq.processed`: number of times middleware called
40
+ - `sidekiq.failed`: number of jobs that raised an error
41
+
42
+ ### Queue specific
43
+
44
+ - `sidekiq.<queue>.size`: depth for a given queue
45
+ - `sidekiq.<queue>.latency`: latency for given queue¹
46
+ - `sidekiq.<queue>.processed`: number of times middleware called for given queue
47
+ - `sidekiq.<queue>.failed`: number of jobs in given queue that raised an error
48
+
49
+ ¹: the difference between now and when the oldest job was enqueued (given in seconds)
50
+
51
+ ### Worker specific
52
+
53
+ - `sidekiq.<queue>.<worker>.processed`: number of times middleware called for given worker
54
+ - `sidekiq.<queue>.<worker>.failed`: number of jobs in given worker that raised an error
55
+ - `sidekiq.<queue>.<worker>.finished`: number of successful worker jobs
data/circle.yml ADDED
@@ -0,0 +1,5 @@
1
+ test:
2
+ pre:
3
+ - bundle exec rubocop
4
+ override:
5
+ - bundle exec rspec -r rspec_junit_formatter --format RspecJunitFormatter -o $CIRCLE_TEST_REPORTS/rspec/junit.xml
data/lib/nightwing.rb ADDED
@@ -0,0 +1,4 @@
1
+ require "nightwing/version"
2
+ require "nightwing/sidekiq/stats"
3
+ require "nightwing/sidekiq/queue_stats"
4
+ require "nightwing/sidekiq/worker_stats"
@@ -0,0 +1,23 @@
1
+ require "active_support/core_ext/string"
2
+
3
+ module Nightwing
4
+ class Metric
5
+ attr_reader :namespace
6
+
7
+ def initialize(namespace)
8
+ @namespace = namespace
9
+ end
10
+
11
+ ##
12
+ # Generates a metric name
13
+ #
14
+ # @param [String] queue
15
+ # @param [Class] worker
16
+ #
17
+ # returns a String object
18
+ def for(queue:, worker: nil)
19
+ worker_name = worker.to_s.underscore.tr("/", "_") if worker
20
+ [namespace, queue, worker_name].compact.join(".")
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ module Nightwing
2
+ class NilClient
3
+ def increment(*args)
4
+ end
5
+
6
+ def measure(*args)
7
+ end
8
+ alias timing measure
9
+ end
10
+ end
@@ -0,0 +1,22 @@
1
+ require "sidekiq/api"
2
+ require "nightwing/metric"
3
+ require "nightwing/nil_client"
4
+
5
+ module Nightwing
6
+ module Sidekiq
7
+ class Base
8
+ attr_reader :namespace, :client
9
+
10
+ def initialize(options = {})
11
+ @namespace = options.fetch(:namespace, "sidekiq")
12
+ @client = options.fetch(:client, Nightwing::NilClient.new)
13
+ end
14
+
15
+ private
16
+
17
+ def metrics
18
+ @_metrics ||= Nightwing::Metric.new(namespace)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,41 @@
1
+ require "nightwing/sidekiq/base"
2
+
3
+ module Nightwing
4
+ module Sidekiq
5
+ ##
6
+ # Sidekiq server middleware for measuring Sidekiq queues
7
+ class QueueStats < Base
8
+ ##
9
+ # Sends Sidekiq queue metrics to client then yields
10
+ #
11
+ # @param [Sidekiq::Worker] _worker
12
+ # The worker the job belongs to.
13
+ #
14
+ # @param [Hash] _msg
15
+ # The job message.
16
+ #
17
+ # @param [String] queue
18
+ # The current queue.
19
+ def call(_worker, _msg, queue)
20
+ exception = nil
21
+ sidekiq_queue = ::Sidekiq::Queue.new(queue)
22
+ queue_namespace = metrics.for(queue: queue)
23
+
24
+ client.measure "#{queue_namespace}.size", sidekiq_queue.size
25
+ client.measure "#{queue_namespace}.latency", sidekiq_queue.latency
26
+ client.increment "#{queue_namespace}.processed"
27
+
28
+ begin
29
+ yield
30
+ rescue => e
31
+ exception = e
32
+ end
33
+
34
+ if exception
35
+ client.increment "#{queue_namespace}.failed"
36
+ raise exception
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,49 @@
1
+ require "nightwing/sidekiq/base"
2
+
3
+ module Nightwing
4
+ module Sidekiq
5
+ ##
6
+ # Sidekiq server middleware for measuring Sidekiq stats
7
+ class Stats < Base
8
+ ##
9
+ # Sends Sidekiq metrics to statsd client then yields
10
+ #
11
+ # @param [Sidekiq::Worker] _worker
12
+ # The worker the job belongs to.
13
+ #
14
+ # @param [Hash] _msg
15
+ # The job message.
16
+ #
17
+ # @param [String] _queue
18
+ # The current queue.
19
+ def call(_worker, _msg, _queue)
20
+ exception = nil
21
+
22
+ client.measure "#{namespace}.retries", retries.size
23
+ client.measure "#{namespace}.scheduled", scheduled.size
24
+ client.increment "#{namespace}.processed"
25
+
26
+ begin
27
+ yield
28
+ rescue => e
29
+ exception = e
30
+ end
31
+
32
+ if exception
33
+ client.increment "#{namespace}.failed"
34
+ raise exception
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def retries
41
+ @_retries ||= ::Sidekiq::RetrySet.new
42
+ end
43
+
44
+ def scheduled
45
+ @_scheduled ||= ::Sidekiq::ScheduledSet.new
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,27 @@
1
+ require "nightwing/sidekiq/base"
2
+
3
+ module Nightwing
4
+ module Sidekiq
5
+ class WorkerStats < Base
6
+ def call(worker, _msg, queue)
7
+ exception = nil
8
+ worker_namespace = metrics.for(queue: queue, worker: worker.class)
9
+
10
+ client.increment "#{worker_namespace}.processed"
11
+
12
+ begin
13
+ yield
14
+ rescue => e
15
+ exception = e
16
+ end
17
+
18
+ if exception
19
+ client.increment "#{worker_namespace}.failed"
20
+ raise exception
21
+ end
22
+
23
+ client.increment "#{worker_namespace}.finished"
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module Nightwing
2
+ VERSION = "0.0.4".freeze
3
+ end
data/nightwing.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ require File.expand_path("../lib/nightwing/version", __FILE__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "nightwing"
5
+ s.version = Nightwing::VERSION
6
+ s.date = "2016-01-26"
7
+ s.summary = "Sidekiq metrics gathering"
8
+ s.description = "Sidekiq metrics gathering"
9
+ s.authors = ["Chris Ledet"]
10
+ s.email = "chris.ledet@teespring.com"
11
+ s.files = `git ls-files`.split
12
+ s.homepage = "https://github.com/teespring/nightwing"
13
+ s.license = "MIT"
14
+
15
+ s.add_runtime_dependency "sidekiq", ">= 2.6"
16
+ s.add_runtime_dependency "activesupport", ">= 4.1.0"
17
+
18
+ s.add_development_dependency "rubocop", "~> 0.36"
19
+ s.add_development_dependency "rspec", "~> 3.4", ">= 3.4.0"
20
+ s.add_development_dependency "rspec_junit_formatter", "~> 0.2", ">= 0.2.3"
21
+ end
@@ -0,0 +1,20 @@
1
+ require "spec_helper"
2
+
3
+ describe Nightwing::Metric do
4
+ subject { described_class.new("sidekiq") }
5
+
6
+ it "returns name for queue metric" do
7
+ metric_name = subject.for(queue: "default")
8
+ expect(metric_name).to eq("sidekiq.default")
9
+ end
10
+
11
+ it "returns name for worker metric" do
12
+ metric_name = subject.for(queue: "default", worker: "CoolWorker")
13
+ expect(metric_name).to eq("sidekiq.default.cool_worker")
14
+ end
15
+
16
+ it "returns name for module worker metric" do
17
+ metric_name = subject.for(queue: "default", worker: "App::AwesomeWorker")
18
+ expect(metric_name).to eq("sidekiq.default.app_awesome_worker")
19
+ end
20
+ end
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+ describe Nightwing::Sidekiq::QueueStats do
4
+ subject { Nightwing::Sidekiq::QueueStats.new(client: Nightwing::NilClient.new) }
5
+
6
+ describe "#call" do
7
+ let(:fake_queue) { Struct.new(:size, :latency).new(0, 0) }
8
+
9
+ before do
10
+ allow(Sidekiq::Queue).to receive(:new).and_return fake_queue
11
+ end
12
+
13
+ context "when everything just works" do
14
+ it "increments process count" do
15
+ expect(subject.client).to receive(:measure).with("sidekiq.default.size", 0)
16
+ expect(subject.client).to receive(:measure).with("sidekiq.default.latency", 0)
17
+ expect(subject.client).to receive(:increment).with("sidekiq.default.processed")
18
+
19
+ subject.call(nil, nil, "default") do
20
+ # beep
21
+ end
22
+ end
23
+ end
24
+
25
+ context "when something fails" do
26
+ it "increments process and failure count" do
27
+ expect(subject.client).to receive(:measure).with("sidekiq.default.size", 0)
28
+ expect(subject.client).to receive(:measure).with("sidekiq.default.latency", 0)
29
+ expect(subject.client).to receive(:increment).with("sidekiq.default.processed")
30
+ expect(subject.client).to receive(:increment).with("sidekiq.default.failed")
31
+
32
+ expect do
33
+ subject.call(nil, nil, "default") do
34
+ fail "beep"
35
+ end
36
+ end.to raise_error RuntimeError
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+ describe Nightwing::Sidekiq::Stats do
4
+ subject { Nightwing::Sidekiq::Stats.new(client: Nightwing::NilClient.new) }
5
+
6
+ before do
7
+ fake_set = Struct.new(:size).new(1)
8
+ allow(Sidekiq::RetrySet).to receive(:new).and_return(fake_set)
9
+ allow(Sidekiq::ScheduledSet).to receive(:new).and_return(fake_set)
10
+ end
11
+
12
+ describe "#call" do
13
+ context "when everything just works" do
14
+ it "increments process count" do
15
+ expect(subject.client).to receive(:measure).with("sidekiq.retries", 1)
16
+ expect(subject.client).to receive(:measure).with("sidekiq.scheduled", 1)
17
+ expect(subject.client).to receive(:increment).with("sidekiq.processed")
18
+
19
+ subject.call(nil, nil, nil) do
20
+ # beep
21
+ end
22
+ end
23
+ end
24
+
25
+ context "when something fails" do
26
+ it "increments process and failure count" do
27
+ expect(subject.client).to receive(:measure).with("sidekiq.retries", 1)
28
+ expect(subject.client).to receive(:measure).with("sidekiq.scheduled", 1)
29
+ expect(subject.client).to receive(:increment).with("sidekiq.processed")
30
+ expect(subject.client).to receive(:increment).with("sidekiq.failed")
31
+
32
+ expect do
33
+ subject.call(nil, nil, nil) do
34
+ fail "beep"
35
+ end
36
+ end.to raise_error RuntimeError
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ describe Nightwing::Sidekiq::WorkerStats do
4
+ MyWorker = Class.new
5
+
6
+ subject { Nightwing::Sidekiq::WorkerStats.new(client: Nightwing::NilClient.new) }
7
+
8
+ describe "#call" do
9
+ context "when everything just works" do
10
+ it "increments process count" do
11
+ expect(subject.client).to receive(:increment).with("sidekiq.default.my_worker.processed")
12
+ expect(subject.client).to receive(:increment).with("sidekiq.default.my_worker.finished")
13
+
14
+ subject.call(MyWorker.new, nil, "default") do
15
+ # beep
16
+ end
17
+ end
18
+ end
19
+
20
+ context "when something fails" do
21
+ it "increments process and failure count" do
22
+ expect(subject.client).to receive(:increment).with("sidekiq.default.my_worker.processed")
23
+ expect(subject.client).to receive(:increment).with("sidekiq.default.my_worker.failed")
24
+
25
+ expect do
26
+ subject.call(MyWorker.new, nil, "default") do
27
+ fail "beep"
28
+ end
29
+ end.to raise_error RuntimeError
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,2 @@
1
+ require "rspec"
2
+ require "nightwing"
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nightwing
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Chris Ledet
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sidekiq
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '2.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '2.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 4.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: 4.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.36'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.36'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.4'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 3.4.0
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '3.4'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 3.4.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec_junit_formatter
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.2'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 0.2.3
85
+ type: :development
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '0.2'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 0.2.3
95
+ description: Sidekiq metrics gathering
96
+ email: chris.ledet@teespring.com
97
+ executables: []
98
+ extensions: []
99
+ extra_rdoc_files: []
100
+ files:
101
+ - ".gitignore"
102
+ - ".rspec"
103
+ - ".rubocop.yml"
104
+ - ".ruby-version"
105
+ - CHANGELOG.md
106
+ - Gemfile
107
+ - Gemfile.lock
108
+ - README.md
109
+ - circle.yml
110
+ - lib/nightwing.rb
111
+ - lib/nightwing/metric.rb
112
+ - lib/nightwing/nil_client.rb
113
+ - lib/nightwing/sidekiq/base.rb
114
+ - lib/nightwing/sidekiq/queue_stats.rb
115
+ - lib/nightwing/sidekiq/stats.rb
116
+ - lib/nightwing/sidekiq/worker_stats.rb
117
+ - lib/nightwing/version.rb
118
+ - nightwing.gemspec
119
+ - spec/nightwing/metric_spec.rb
120
+ - spec/nightwing/sidekiq/queue_stats_spec.rb
121
+ - spec/nightwing/sidekiq/stats_spec.rb
122
+ - spec/nightwing/sidekiq/worker_stats_spec.rb
123
+ - spec/spec_helper.rb
124
+ homepage: https://github.com/teespring/nightwing
125
+ licenses:
126
+ - MIT
127
+ metadata: {}
128
+ post_install_message:
129
+ rdoc_options: []
130
+ require_paths:
131
+ - lib
132
+ required_ruby_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubyforge_project:
144
+ rubygems_version: 2.5.1
145
+ signing_key:
146
+ specification_version: 4
147
+ summary: Sidekiq metrics gathering
148
+ test_files: []