sidekiq-statsd 1.0.0 → 2.0.1
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 +4 -4
- data/.travis.yml +1 -2
- data/CHANGELOG.md +9 -0
- data/README.md +12 -2
- data/lib/sidekiq/statsd/server_middleware.rb +26 -32
- data/lib/sidekiq/statsd/version.rb +1 -1
- data/sidekiq-statsd.gemspec +1 -2
- data/spec/sidekiq/statsd/server_middleware_spec.rb +14 -31
- metadata +4 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c0a8286f6068e0cde4639ae549ddb4ffea4b615b5e21be7913e8a911f7a6d5e
|
4
|
+
data.tar.gz: eeacf3e1cacfda19717958059aab50d4f64a645934188530b842c2edd98a94de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed5110d9d73f6e0f7f4d7ba1521ab98af4187aeb271cbadc3c880af499cefab64a79da9aa87b9797ce8d75170f0c5bf209d22dc18671cc3f02f524c1e355c7fc
|
7
|
+
data.tar.gz: 5cbf10d942527cdc0e7ea3c43ee0e08ef5f14c7b6000673b81d66451c93bcbc2d66017240caea5b6d3f61e076713329f45d79e510b79235aea93ac18efa1ae78
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -11,8 +11,11 @@ Sidekiq::Statsd is tested against [several Ruby versions](.travis.yml#L4).
|
|
11
11
|
|
12
12
|
## Installation
|
13
13
|
|
14
|
-
Add
|
14
|
+
Add these lines to your application's Gemfile:
|
15
15
|
|
16
|
+
gem "statsd-ruby"
|
17
|
+
# or if you are using Datadog
|
18
|
+
# gem "dogstatsd-ruby"
|
16
19
|
gem "sidekiq-statsd"
|
17
20
|
|
18
21
|
And then execute:
|
@@ -29,9 +32,16 @@ In a Rails initializer or wherever you've configured Sidekiq, add
|
|
29
32
|
Sidekiq::Statsd to your server middleware:
|
30
33
|
|
31
34
|
```ruby
|
35
|
+
require 'statsd'
|
36
|
+
statsd = Statsd.new('localhost', 8125)
|
37
|
+
|
38
|
+
# or if you are using Datadog
|
39
|
+
# require 'datadog/statsd'
|
40
|
+
# statsd = Datadog::Statsd.new('localhost', 8125)
|
41
|
+
|
32
42
|
Sidekiq.configure_server do |config|
|
33
43
|
config.server_middleware do |chain|
|
34
|
-
chain.add Sidekiq::Statsd::ServerMiddleware, env: "production", prefix: "worker",
|
44
|
+
chain.add Sidekiq::Statsd::ServerMiddleware, env: "production", prefix: "worker", statsd: statsd
|
35
45
|
end
|
36
46
|
end
|
37
47
|
```
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'statsd'
|
4
|
-
|
5
3
|
module Sidekiq::Statsd
|
6
4
|
##
|
7
5
|
# Sidekiq StatsD is a middleware to track worker execution metrics through statsd.
|
@@ -11,21 +9,14 @@ module Sidekiq::Statsd
|
|
11
9
|
# Initializes the middleware with options.
|
12
10
|
#
|
13
11
|
# @param [Hash] options The options to initialize the StatsD client.
|
14
|
-
# @option options [Statsd] :statsd Existing
|
12
|
+
# @option options [Statsd] :statsd Existing StatsD client.
|
15
13
|
# @option options [String] :env ("production") The env to segment the metric key (e.g. env.prefix.worker_name.success|failure).
|
16
14
|
# @option options [String] :prefix ("worker") The prefix to segment the metric key (e.g. env.prefix.worker_name.success|failure).
|
17
|
-
# @option options [String] :host ("localhost") The StatsD host.
|
18
|
-
# @option options [String] :port ("8125") The StatsD port.
|
19
15
|
# @option options [String] :sidekiq_stats ("true") Send Sidekiq global stats e.g. total enqueued, processed and failed.
|
20
16
|
def initialize(options = {})
|
21
|
-
@options = { env:
|
22
|
-
prefix: 'worker',
|
23
|
-
host: 'localhost',
|
24
|
-
port: 8125,
|
25
|
-
sidekiq_stats: true }.merge options
|
17
|
+
@options = { env: 'production', prefix: 'worker', sidekiq_stats: true }.merge options
|
26
18
|
|
27
|
-
@statsd = options[:statsd] ||
|
28
|
-
@sidekiq_stats = Sidekiq::Stats.new if @options[:sidekiq_stats]
|
19
|
+
@statsd = options[:statsd] || raise("A StatsD client must be provided")
|
29
20
|
end
|
30
21
|
|
31
22
|
##
|
@@ -49,32 +40,35 @@ module Sidekiq::Statsd
|
|
49
40
|
b.increment prefix(worker_name, 'failure')
|
50
41
|
raise e
|
51
42
|
ensure
|
52
|
-
if @options[:sidekiq_stats]
|
53
|
-
|
54
|
-
b.gauge prefix('enqueued'), @sidekiq_stats.enqueued
|
55
|
-
if @sidekiq_stats.respond_to?(:retry_size)
|
56
|
-
# 2.6.0 doesn't have `retry_size`
|
57
|
-
b.gauge prefix('retry_set_size'), @sidekiq_stats.retry_size
|
58
|
-
end
|
59
|
-
|
60
|
-
# All-time counts
|
61
|
-
b.gauge prefix('processed'), @sidekiq_stats.processed
|
62
|
-
b.gauge prefix('failed'), @sidekiq_stats.failed
|
63
|
-
end
|
64
|
-
|
65
|
-
# Queue metrics
|
66
|
-
queue_name = msg['queue']
|
67
|
-
sidekiq_queue = Sidekiq::Queue.new(queue_name)
|
68
|
-
b.gauge prefix('queues', queue_name, 'enqueued'), sidekiq_queue.size
|
69
|
-
if sidekiq_queue.respond_to?(:latency)
|
70
|
-
b.gauge prefix('queues', queue_name, 'latency'), sidekiq_queue.latency
|
71
|
-
end
|
43
|
+
report_global_stats(b) if @options[:sidekiq_stats]
|
44
|
+
report_queue_stats(b, msg['queue'])
|
72
45
|
end
|
73
46
|
end
|
74
47
|
end
|
75
48
|
|
76
49
|
private
|
77
50
|
|
51
|
+
def report_global_stats(statsd)
|
52
|
+
sidekiq_stats = Sidekiq::Stats.new
|
53
|
+
|
54
|
+
# Queue sizes
|
55
|
+
statsd.gauge prefix('enqueued'), sidekiq_stats.enqueued
|
56
|
+
statsd.gauge prefix('retry_set_size'), sidekiq_stats.retry_size
|
57
|
+
|
58
|
+
# All-time counts
|
59
|
+
statsd.gauge prefix('processed'), sidekiq_stats.processed
|
60
|
+
statsd.gauge prefix('failed'), sidekiq_stats.failed
|
61
|
+
end
|
62
|
+
|
63
|
+
def report_queue_stats(statsd, queue_name)
|
64
|
+
sidekiq_queue = Sidekiq::Queue.new(queue_name)
|
65
|
+
statsd.gauge prefix('queues', queue_name, 'enqueued'), sidekiq_queue.size
|
66
|
+
|
67
|
+
if sidekiq_queue.respond_to?(:latency)
|
68
|
+
statsd.gauge prefix('queues', queue_name, 'latency'), sidekiq_queue.latency
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
78
72
|
##
|
79
73
|
# Converts args passed to it into a metric name with prefix.
|
80
74
|
#
|
data/sidekiq-statsd.gemspec
CHANGED
@@ -18,8 +18,7 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
20
|
gem.add_dependency "activesupport"
|
21
|
-
gem.add_dependency "sidekiq", ">=
|
22
|
-
gem.add_dependency "statsd-ruby", ">= 1.1.0"
|
21
|
+
gem.add_dependency "sidekiq", ">= 3.3.1"
|
23
22
|
|
24
23
|
gem.required_ruby_version = '>= 2.4.0'
|
25
24
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Sidekiq::Statsd::ServerMiddleware do
|
4
|
-
subject(:middleware) { described_class.new }
|
4
|
+
subject(:middleware) { described_class.new(statsd: client) }
|
5
5
|
|
6
6
|
let(:worker) { double "Dummy worker" }
|
7
7
|
let(:msg) { { 'queue' => 'mailer' } }
|
8
8
|
let(:queue) { nil }
|
9
|
-
let(:client) { double(
|
9
|
+
let(:client) { double('StatsD').as_null_object }
|
10
10
|
|
11
11
|
let(:worker_name) { worker.class.name.gsub("::", ".") }
|
12
12
|
|
@@ -14,28 +14,15 @@ describe Sidekiq::Statsd::ServerMiddleware do
|
|
14
14
|
let(:broken_job) { ->{ raise 'error' } }
|
15
15
|
|
16
16
|
before do
|
17
|
-
|
17
|
+
allow(client).to receive(:batch).and_yield(client)
|
18
18
|
end
|
19
19
|
|
20
|
-
it "
|
21
|
-
expect(
|
22
|
-
.to receive(:new)
|
23
|
-
.never
|
24
|
-
|
25
|
-
described_class.new(statsd: client)
|
20
|
+
it "raises error if no statsd supplied" do
|
21
|
+
expect { described_class.new }.to raise_error("A StatsD client must be provided")
|
26
22
|
end
|
27
23
|
|
28
24
|
context "with customised options" do
|
29
25
|
describe "#new" do
|
30
|
-
it "uses the custom statsd host and port" do
|
31
|
-
expect(::Statsd)
|
32
|
-
.to receive(:new)
|
33
|
-
.with('example.com', 8126)
|
34
|
-
.once
|
35
|
-
|
36
|
-
described_class.new(host: 'example.com', port: 8126)
|
37
|
-
end
|
38
|
-
|
39
26
|
it "uses the custom metric name prefix options" do
|
40
27
|
expect(client)
|
41
28
|
.to receive(:time)
|
@@ -44,31 +31,27 @@ describe Sidekiq::Statsd::ServerMiddleware do
|
|
44
31
|
.and_yield
|
45
32
|
|
46
33
|
described_class
|
47
|
-
.new(env: 'development', prefix: 'application.sidekiq')
|
34
|
+
.new(statsd: client, env: 'development', prefix: 'application.sidekiq')
|
48
35
|
.call(worker, msg, queue, &clean_job)
|
49
36
|
end
|
50
37
|
end
|
51
38
|
end
|
52
39
|
|
53
40
|
context 'without global sidekiq stats' do
|
54
|
-
|
55
|
-
|
56
|
-
it "doesn't initialze a Sidekiq::Stats instance" do
|
41
|
+
it "doesn't initialize a Sidekiq::Stats instance" do
|
57
42
|
# Sidekiq::Stats.new calls fetch_stats!, which makes redis calls
|
58
|
-
expect(
|
59
|
-
|
43
|
+
expect(Sidekiq::Stats).not_to receive(:new)
|
44
|
+
described_class.new(statsd: client, sidekiq_stats: false)
|
60
45
|
end
|
61
46
|
|
62
47
|
it "doesn't gauge sidekiq stats" do
|
63
|
-
|
64
|
-
|
65
|
-
expect(
|
66
|
-
expect(
|
67
|
-
expect(sidekiq_stats).not_to receive(:processed)
|
68
|
-
expect(sidekiq_stats).not_to receive(:failed)
|
48
|
+
expect(client).not_to receive(:enqueued)
|
49
|
+
expect(client).not_to receive(:retry_size)
|
50
|
+
expect(client).not_to receive(:processed)
|
51
|
+
expect(client).not_to receive(:failed)
|
69
52
|
|
70
53
|
described_class
|
71
|
-
.new(sidekiq_stats: false)
|
54
|
+
.new(statsd: client, sidekiq_stats: false)
|
72
55
|
.call(worker, msg, queue, &clean_job)
|
73
56
|
end
|
74
57
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-statsd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Cantero
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-12-
|
11
|
+
date: 2019-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -30,28 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 3.3.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: statsd-ruby
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 1.1.0
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 1.1.0
|
40
|
+
version: 3.3.1
|
55
41
|
description: Sidekiq StatsD is a Sidekiq server middleware to send Sidekiq worker
|
56
42
|
metrics through statsd.
|
57
43
|
email:
|