nightwing 0.0.4
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 +4 -0
- data/.rspec +1 -0
- data/.rubocop.yml +18 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +70 -0
- data/README.md +55 -0
- data/circle.yml +5 -0
- data/lib/nightwing.rb +4 -0
- data/lib/nightwing/metric.rb +23 -0
- data/lib/nightwing/nil_client.rb +10 -0
- data/lib/nightwing/sidekiq/base.rb +22 -0
- data/lib/nightwing/sidekiq/queue_stats.rb +41 -0
- data/lib/nightwing/sidekiq/stats.rb +49 -0
- data/lib/nightwing/sidekiq/worker_stats.rb +27 -0
- data/lib/nightwing/version.rb +3 -0
- data/nightwing.gemspec +21 -0
- data/spec/nightwing/metric_spec.rb +20 -0
- data/spec/nightwing/sidekiq/queue_stats_spec.rb +40 -0
- data/spec/nightwing/sidekiq/stats_spec.rb +40 -0
- data/spec/nightwing/sidekiq/worker_stats_spec.rb +33 -0
- data/spec/spec_helper.rb +2 -0
- metadata +148 -0
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
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
data/Gemfile
ADDED
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
data/lib/nightwing.rb
ADDED
@@ -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,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
|
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
|
data/spec/spec_helper.rb
ADDED
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: []
|