sidekiq-datadog-monitor 0.0.1 → 0.2.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/README.md +29 -5
- data/lib/sidekiq/datadog/monitor.rb +4 -1
- data/lib/sidekiq/datadog/monitor/data.rb +19 -13
- data/lib/sidekiq/datadog/monitor/metrics_worker.rb +18 -12
- data/lib/sidekiq/datadog/monitor/version.rb +1 -1
- metadata +63 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e6838bb59d76c94b8ca2e3ea015f7ab7af6081516f01e83e6a2d0a341d88b01
|
4
|
+
data.tar.gz: 5f209f188034fd94da47f3505eb758f264b5eb9149bdb9ffcb4ee172ad38f20c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c89749c8150eecc3cde7a9c6d121c902a7dd4b67f542ca664e5b7f4f95a70b90da1ad802c3e46c461fff8010376aac6565dc24f0be45afaf622fb9845e5f54be
|
7
|
+
data.tar.gz: eef31d5da46a77f797be7ca049d4bf8656b5f888ab648ec6608c8f526a84e9282cf8f938d750dc0c6336e2b40e92cdad2ef0e9c908b2c12a2f936fa0d705bc5a
|
data/README.md
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
# Sidekiq::Datadog::Monitor
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
Library that gather sidekiq jobs metrics (currently, only size and latency)
|
4
|
+
and send it to datadog
|
6
5
|
|
7
6
|
## Installation
|
8
7
|
|
9
8
|
Add this line to your application's Gemfile:
|
10
9
|
|
11
10
|
```ruby
|
12
|
-
gem 'sidekiq-datadog-monitor'
|
11
|
+
gem 'sidekiq-datadog-monitor', '0.0.1'
|
13
12
|
```
|
14
13
|
|
15
14
|
And then execute:
|
@@ -22,7 +21,32 @@ Or install it yourself as:
|
|
22
21
|
|
23
22
|
## Usage
|
24
23
|
|
25
|
-
|
24
|
+
To start sending metrics
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
# Import the library
|
28
|
+
require 'sidekiq/datadog/monitor/data'
|
29
|
+
|
30
|
+
# Initiate a Sidekiq::Datadog::Monitor client instance.
|
31
|
+
Sidekiq::Datadog::Monitor::Data.initialize!(
|
32
|
+
agent_host: 'localhost',
|
33
|
+
agent_port: 8125,
|
34
|
+
queue: 'queue name',
|
35
|
+
tags: ['env:production', 'product:product_name'], # optional
|
36
|
+
cron: "*/30 * * * *" # default: "*/1 * * * *",
|
37
|
+
batch: false # optional, default: false
|
38
|
+
)
|
39
|
+
```
|
40
|
+
`agent_host` and `agent_port` instantiate DogStatsD client
|
41
|
+
|
42
|
+
`queue` setting for background job that will gather and send Sidekiq metrics
|
43
|
+
|
44
|
+
`tags` tags for datadog metrics
|
45
|
+
|
46
|
+
`cron` - schedule settings for background job that will gather and send Sidekiq metrics
|
47
|
+
|
48
|
+
`batch` turns on sending DD metrics in batches. Make sure you don't have too many queues before enabling this option. The message with all tags must fit into [8KB of default DataDog buffer](https://docs.datadoghq.com/developers/dogstatsd/high_throughput/#enable-buffering-on-your-client) size.
|
49
|
+
|
26
50
|
|
27
51
|
## Development
|
28
52
|
|
@@ -1,28 +1,34 @@
|
|
1
|
-
require 'datadog/statsd'
|
2
|
-
require 'sidekiq/datadog/monitor/metrics_worker'
|
3
1
|
module Sidekiq
|
4
2
|
module Datadog
|
5
3
|
module Monitor
|
6
4
|
class Data
|
7
5
|
class << self
|
8
|
-
attr_reader :agent_port, :agent_host, :
|
6
|
+
attr_reader :agent_port, :agent_host, :tags, :env, :queue, :cron, :batch
|
9
7
|
|
10
8
|
def initialize!(options)
|
11
|
-
@agent_port = options
|
12
|
-
@
|
13
|
-
@
|
14
|
-
@
|
15
|
-
@queue = options[:queue] || ''
|
16
|
-
@cron = options[:cron] || "*/1 * * * *"
|
9
|
+
@agent_port, @agent_host, @queue = options.fetch_values(:agent_port, :agent_host, :queue)
|
10
|
+
@tags = options[:tags] || []
|
11
|
+
@cron = options[:cron] || '*/1 * * * *'
|
12
|
+
@batch = options[:batch] || false
|
17
13
|
|
18
|
-
|
14
|
+
Sidekiq.configure_server do |config|
|
15
|
+
SidekiqScheduler::Scheduler.dynamic = true
|
16
|
+
|
17
|
+
config.on(:startup) do
|
18
|
+
start
|
19
|
+
end
|
20
|
+
end
|
21
|
+
rescue StandardError => e
|
22
|
+
raise Sidekiq::Datadog::Monitor::Error, e.message
|
19
23
|
end
|
20
24
|
|
25
|
+
private
|
26
|
+
|
21
27
|
def start
|
22
|
-
Sidekiq.set_schedule('send_metrics',
|
23
|
-
|
28
|
+
Sidekiq.set_schedule('send_metrics',
|
29
|
+
{ 'cron' => cron, 'class' => 'Sidekiq::Datadog::Monitor::MetricsWorker', 'queue' => queue })
|
24
30
|
end
|
25
|
-
end
|
31
|
+
end
|
26
32
|
end
|
27
33
|
end
|
28
34
|
end
|
@@ -1,35 +1,41 @@
|
|
1
|
+
require 'sidekiq/datadog/monitor/data'
|
1
2
|
require 'datadog/statsd'
|
2
|
-
require 'sidekiq'
|
3
3
|
|
4
4
|
module Sidekiq
|
5
5
|
module Datadog
|
6
6
|
module Monitor
|
7
7
|
class MetricsWorker
|
8
8
|
include Sidekiq::Worker
|
9
|
-
|
9
|
+
|
10
|
+
sidekiq_options retry: false
|
11
|
+
|
10
12
|
def perform
|
11
|
-
|
12
|
-
post_queue_size(queue_name, size)
|
13
|
+
statsd = ::Datadog::Statsd.new(Data.agent_host, Data.agent_port)
|
13
14
|
|
14
|
-
|
15
|
-
|
15
|
+
return send_metrics(statsd) unless Data.batch
|
16
|
+
|
17
|
+
statsd.batch { |batch_statsd| send_metrics(batch_statsd) }
|
16
18
|
end
|
17
19
|
|
18
20
|
private
|
19
21
|
|
20
|
-
def statsd
|
21
|
-
|
22
|
+
def send_metrics(statsd)
|
23
|
+
Sidekiq::Stats.new.queues.each_pair do |queue_name, size|
|
24
|
+
post_queue_size(statsd, queue_name, size)
|
25
|
+
|
26
|
+
post_queue_latency(statsd, queue_name)
|
27
|
+
end
|
22
28
|
end
|
23
29
|
|
24
|
-
def post_queue_size(queue_name, size)
|
30
|
+
def post_queue_size(statsd, queue_name, size)
|
25
31
|
statsd.gauge('sidekiq.queue.size', size,
|
26
|
-
|
32
|
+
tags: ["queue_name:#{queue_name}"].concat(Data.tags))
|
27
33
|
end
|
28
34
|
|
29
|
-
def post_queue_latency(queue_name)
|
35
|
+
def post_queue_latency(statsd, queue_name)
|
30
36
|
latency = Sidekiq::Queue.new(queue_name).latency
|
31
37
|
statsd.gauge('sidekiq.queue.latency', latency,
|
32
|
-
|
38
|
+
tags: ["queue_name:#{queue_name}"].concat(Data.tags))
|
33
39
|
end
|
34
40
|
end
|
35
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-datadog-monitor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- aleksa_castle
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,48 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.85.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.85.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop-performance
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.38.1
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.38.1
|
55
97
|
- !ruby/object:Gem::Dependency
|
56
98
|
name: sidekiq
|
57
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +108,20 @@ dependencies:
|
|
66
108
|
- - ">="
|
67
109
|
- !ruby/object:Gem::Version
|
68
110
|
version: 2.2.1
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: sidekiq-scheduler
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 3.0.1
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 3.0.1
|
69
125
|
- !ruby/object:Gem::Dependency
|
70
126
|
name: dogstatsd-ruby
|
71
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,7 +136,7 @@ dependencies:
|
|
80
136
|
- - ">="
|
81
137
|
- !ruby/object:Gem::Version
|
82
138
|
version: 4.8.1
|
83
|
-
description:
|
139
|
+
description:
|
84
140
|
email:
|
85
141
|
- oleksandra.k@matic.com
|
86
142
|
executables: []
|
@@ -100,7 +156,7 @@ licenses:
|
|
100
156
|
- MIT
|
101
157
|
metadata:
|
102
158
|
allowed_push_host: https://rubygems.org
|
103
|
-
post_install_message:
|
159
|
+
post_install_message:
|
104
160
|
rdoc_options: []
|
105
161
|
require_paths:
|
106
162
|
- lib
|
@@ -115,8 +171,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
171
|
- !ruby/object:Gem::Version
|
116
172
|
version: '0'
|
117
173
|
requirements: []
|
118
|
-
rubygems_version: 3.0.
|
119
|
-
signing_key:
|
174
|
+
rubygems_version: 3.0.3
|
175
|
+
signing_key:
|
120
176
|
specification_version: 4
|
121
177
|
summary: A gem to gather and send sidekiq jobs metrics to datadog
|
122
178
|
test_files: []
|