sidekiq_queue_status 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -4
- data/lib/sidekiq_queue_status/middleware.rb +13 -2
- data/lib/sidekiq_queue_status/railtie.rb +2 -1
- data/lib/sidekiq_queue_status/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc5fd855d926709a368cc99a1da6e19b2e7979f9
|
4
|
+
data.tar.gz: da788b27a27e1fd9572dfe06cdb50a99aa08329f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6f4775f9183af9637b917b8f0fe843473f40af3a6d1b43edecf60858c25ea4f961973b9b76b60d070cce45e94c560637de945d4d17642b88cfc98e69b57dbbc
|
7
|
+
data.tar.gz: c9244adf2de5e48c57da03f6bf5d75a4436e352681068edd9f3c4ef76a11df557b5f32f23535460b93398bd35b244a4ced098d0e40dcbf5196e567bf4ff8d588
|
data/README.md
CHANGED
@@ -7,11 +7,21 @@ Lists latency for each sidekiq queue. The latency is the number of
|
|
7
7
|
seconds the oldest job (next in line) is waiting to be performed.
|
8
8
|
|
9
9
|
Under normal circumstances returns a `200 OK` status code. When latency
|
10
|
-
is higher than the 30s default threshold,
|
11
|
-
|
10
|
+
is higher than the 30s default threshold, or when the failure rate
|
11
|
+
on the current day is higher than 10%, a `503 Service Unavailable`
|
12
|
+
is returned.
|
12
13
|
|
13
14
|
Thresholds are configurable by setting `config.queue_tresholds` hash.
|
14
15
|
Key is queue name, value is latency threshold in seconds.
|
16
|
+
Set `config.queue_failure_rate` to override the default failure rate.
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
# config/application.rb
|
20
|
+
Application.configure do
|
21
|
+
config.queue_tresholds['batch'] = 10.minutes
|
22
|
+
config.queue_failure_rate = 5
|
23
|
+
end
|
24
|
+
```
|
15
25
|
|
16
26
|
Response body is a JSON object, listing the latencies of all queues and
|
17
27
|
an array of error messages explaining which queues triggered a threshold
|
@@ -21,9 +31,10 @@ error.
|
|
21
31
|
{
|
22
32
|
"latencies": {
|
23
33
|
"batch": 200,
|
24
|
-
"default": 1
|
34
|
+
"default": 1,
|
35
|
+
"failure_percentage": 25
|
25
36
|
},
|
26
|
-
"errors": ["Queue batch above threshold of 100"]
|
37
|
+
"errors": ["Queue batch above threshold of 100", "Failure rate above 5%"]
|
27
38
|
}
|
28
39
|
```
|
29
40
|
|
@@ -3,14 +3,16 @@ require 'sidekiq/api'
|
|
3
3
|
module SidekiqQueueStatus
|
4
4
|
class Middleware
|
5
5
|
DEFAULT_TRESHOLD = 30
|
6
|
+
DEFAULT_FAILURE_RATE_PERC = 10
|
6
7
|
HEADERS = {
|
7
8
|
'Content-Type' => 'application/json',
|
8
9
|
'Cache-Control' => 'no-cache'
|
9
10
|
}
|
10
11
|
|
11
|
-
def initialize(app, configured_tresholds)
|
12
|
+
def initialize(app, configured_tresholds, failure_rate)
|
12
13
|
@app = app
|
13
14
|
@latency_treshold = Hash.new(DEFAULT_TRESHOLD).merge(configured_tresholds)
|
15
|
+
@max_failure_rate = failure_rate || DEFAULT_FAILURE_RATE_PERC
|
14
16
|
end
|
15
17
|
|
16
18
|
def call(env)
|
@@ -20,7 +22,9 @@ module SidekiqQueueStatus
|
|
20
22
|
max_latency = @latency_treshold[name]
|
21
23
|
errors << "Queue #{name} above threshold of #{max_latency}s" if latency > max_latency
|
22
24
|
end
|
23
|
-
|
25
|
+
failure_rate = calculate_failure_rate
|
26
|
+
errors << "Failure rate above #{@max_failure_rate}%" if failure_rate > @max_failure_rate
|
27
|
+
body = { latencies: queues, failure_percentage: failure_rate, errors: errors }.to_json
|
24
28
|
status = errors.any? ? 503 : 200
|
25
29
|
[status, HEADERS, [body]]
|
26
30
|
else
|
@@ -31,5 +35,12 @@ module SidekiqQueueStatus
|
|
31
35
|
def queues
|
32
36
|
Sidekiq::Queue.all.map { |q| [q.name, q.latency.to_i] }.to_h
|
33
37
|
end
|
38
|
+
|
39
|
+
def calculate_failure_rate
|
40
|
+
stats = Sidekiq::Stats::History.new(1)
|
41
|
+
processed, failed = [stats.processed, stats.failed].map { |h| h.values.last }
|
42
|
+
val = (failed.to_f / processed.to_f) * 100.0
|
43
|
+
val > 0 ? val.to_i : 0
|
44
|
+
end
|
34
45
|
end
|
35
46
|
end
|
@@ -3,8 +3,9 @@ require 'rails/railtie'
|
|
3
3
|
module SidekiqQueueStatus
|
4
4
|
class Railtie < Rails::Railtie
|
5
5
|
config.queue_tresholds = {}
|
6
|
+
config.queue_failure_rate = nil
|
6
7
|
initializer "sidekiq_queue_status.configure_rails_initialization" do |app|
|
7
|
-
app.middleware.use SidekiqQueueStatus::Middleware, app.config.queue_tresholds
|
8
|
+
app.middleware.use SidekiqQueueStatus::Middleware, app.config.queue_tresholds, app.config.queue_failure_rate
|
8
9
|
end
|
9
10
|
end
|
10
11
|
end
|