sidekiq_queue_metrics 0.0.4 → 1.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 616f7d90c5c36572b23161d8fcc09fdac5e05aa3fc4a4770445ecadd916854fa
|
4
|
+
data.tar.gz: e7ef6953e73d4c64a7bab64a3d6302be8f9aebd51152667be1815f76956d1a1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5457ea650cfb8a27175bd07a480695ac8105d4a31f4115a6fd2fd17b6b9e1fd4640deb332b94818eae24e24e487c4e7c4308839a3be776852d5e2bd6bda22284
|
7
|
+
data.tar.gz: 8a0425708609f2a8d0887b695261c2b9d354c038952cb597c26163c6f92e050aed980c0981c6667b4469c40dc3cc26c5518b3a02a229e7f1193bccc83f82f8b6
|
data/README.md
CHANGED
@@ -42,6 +42,14 @@ Output:
|
|
42
42
|
}
|
43
43
|
```
|
44
44
|
|
45
|
+
## Contributing
|
46
|
+
|
47
|
+
1. Fork it ( https://github.com/ajitsing/sidekiq_queue_metrics/fork )
|
48
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
49
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
50
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
51
|
+
5. Create a new Pull Request
|
52
|
+
|
45
53
|
## License
|
46
54
|
```LICENSE
|
47
55
|
MIT License
|
@@ -4,7 +4,7 @@ module Sidekiq::QueueMetrics
|
|
4
4
|
class << self
|
5
5
|
def fetch
|
6
6
|
queues = []
|
7
|
-
success_and_failed_stats = enqueued_jobs = retry_stats = {}
|
7
|
+
success_and_failed_stats = enqueued_jobs = scheduled_jobs = retry_stats = {}
|
8
8
|
together do
|
9
9
|
async do
|
10
10
|
queues = Sidekiq::Queue.all.map(&:name).map(&:to_s)
|
@@ -13,6 +13,7 @@ module Sidekiq::QueueMetrics
|
|
13
13
|
|
14
14
|
async {success_and_failed_stats = fetch_success_and_failed_stats}
|
15
15
|
async {retry_stats = fetch_retry_stats}
|
16
|
+
async {scheduled_jobs = fetch_scheduled_stats}
|
16
17
|
end
|
17
18
|
|
18
19
|
queues.map do |queue|
|
@@ -24,6 +25,7 @@ module Sidekiq::QueueMetrics
|
|
24
25
|
|
25
26
|
stats['enqueued'] = val_or_default(enqueued_jobs[queue])
|
26
27
|
stats['in_retry'] = val_or_default(retry_stats[queue])
|
28
|
+
stats['scheduled'] = val_or_default(scheduled_jobs[queue])
|
27
29
|
{queue => stats}
|
28
30
|
end.reduce({}, :merge)
|
29
31
|
end
|
@@ -40,6 +42,10 @@ module Sidekiq::QueueMetrics
|
|
40
42
|
Sidekiq::RetrySet.new.group_by(&:queue).map {|queue, jobs| [queue, jobs.count]}.to_h
|
41
43
|
end
|
42
44
|
|
45
|
+
def fetch_scheduled_stats
|
46
|
+
Sidekiq::ScheduledSet.new.group_by(&:queue).map {|queue, jobs| [queue, jobs.count]}.to_h
|
47
|
+
end
|
48
|
+
|
43
49
|
private
|
44
50
|
def val_or_default(val, default = 0)
|
45
51
|
val || default
|
@@ -1,3 +1,33 @@
|
|
1
|
+
<style>
|
2
|
+
.queue_metrics {
|
3
|
+
margin-right: 3.3%;
|
4
|
+
float: left;
|
5
|
+
width: 30%;
|
6
|
+
}
|
7
|
+
|
8
|
+
.heading {
|
9
|
+
display: block;
|
10
|
+
font-size: 1em;
|
11
|
+
font-weight: bold;
|
12
|
+
}
|
13
|
+
|
14
|
+
.processed_count {
|
15
|
+
color: rgba(35, 130, 13, 0.9);
|
16
|
+
font-size: 1.1em;
|
17
|
+
font-weight: bold;
|
18
|
+
}
|
19
|
+
|
20
|
+
.failed_count {
|
21
|
+
color: rgba(158, 19, 19, 0.96);
|
22
|
+
font-size: 1.1em;
|
23
|
+
font-weight: bold;
|
24
|
+
}
|
25
|
+
|
26
|
+
.center {
|
27
|
+
text-align: center;
|
28
|
+
}
|
29
|
+
</style>
|
30
|
+
|
1
31
|
<header class="row">
|
2
32
|
<div class="col-sm-10">
|
3
33
|
<h3>Queue Metrics</h3>
|
@@ -5,17 +35,17 @@
|
|
5
35
|
</header>
|
6
36
|
|
7
37
|
<% @queue_metrics.each do |queue, metrics| %>
|
8
|
-
<table class="table table-striped table-bordered table-white">
|
38
|
+
<table class="table table-striped table-bordered table-white queue_metrics">
|
9
39
|
<thead>
|
10
40
|
<tr>
|
11
|
-
<th><%= queue %></th>
|
12
|
-
<th style="width:
|
41
|
+
<th><span class="heading"><%= queue %></span></th>
|
42
|
+
<th style="width: 30%" class="center"><span class="heading">Count</span></th>
|
13
43
|
</tr>
|
14
44
|
</thead>
|
15
|
-
<% metrics.each do |
|
45
|
+
<% metrics.each do |metric_name, count| %>
|
16
46
|
<tr>
|
17
|
-
<td><%=
|
18
|
-
<td><%= count %></td>
|
47
|
+
<td><%= metric_name.split('_').map(&:capitalize).join(' ') %></td>
|
48
|
+
<td class="center"><span class="<%= metric_name %>_count"><%= count %></span></td>
|
19
49
|
</tr>
|
20
50
|
<% end %>
|
21
51
|
</table>
|
@@ -8,9 +8,11 @@ describe Sidekiq::QueueMetrics do
|
|
8
8
|
it 'should fetch current queue stats' do
|
9
9
|
stats = {mailer_queue: {processed: 2, failed: 1}, heavy_jobs_queue: {processed: 1, failed: 0}}
|
10
10
|
jobs_in_retry_queue = [OpenStruct.new(queue: 'mailer_queue'), OpenStruct.new(queue: 'heavy_jobs_queue')]
|
11
|
+
scheduled_jobs = [OpenStruct.new(queue: 'mailer_queue'), OpenStruct.new(queue: 'heavy_jobs_queue')]
|
11
12
|
|
12
13
|
expect(Sidekiq::QueueMetrics::Storage).to receive(:get_stats).and_return(stats.to_json)
|
13
14
|
expect(Sidekiq::RetrySet).to receive(:new).and_return(jobs_in_retry_queue)
|
15
|
+
expect(Sidekiq::ScheduledSet).to receive(:new).and_return(scheduled_jobs)
|
14
16
|
expect(Sidekiq::Queue).to receive(:new).with('mailer_queue').and_return(OpenStruct.new(size: 1))
|
15
17
|
expect(Sidekiq::Queue).to receive(:new).with('heavy_jobs_queue').and_return(OpenStruct.new(size: 1))
|
16
18
|
|
@@ -20,19 +22,22 @@ describe Sidekiq::QueueMetrics do
|
|
20
22
|
expect(queue_stats['mailer_queue']['failed']).to eq(1)
|
21
23
|
expect(queue_stats['mailer_queue']['enqueued']).to eq(1)
|
22
24
|
expect(queue_stats['mailer_queue']['in_retry']).to eq(1)
|
25
|
+
expect(queue_stats['mailer_queue']['scheduled']).to eq(1)
|
23
26
|
|
24
27
|
expect(queue_stats['heavy_jobs_queue']['processed']).to eq(1)
|
25
28
|
expect(queue_stats['heavy_jobs_queue']['failed']).to eq(0)
|
26
29
|
expect(queue_stats['heavy_jobs_queue']['enqueued']).to eq(1)
|
27
30
|
expect(queue_stats['heavy_jobs_queue']['in_retry']).to eq(1)
|
31
|
+
expect(queue_stats['heavy_jobs_queue']['scheduled']).to eq(1)
|
28
32
|
end
|
29
33
|
|
30
34
|
it 'should have default value as zero' do
|
31
35
|
stats = {mailer_queue: {processed: 2}, heavy_jobs_queue: {failed: 1}}
|
32
|
-
jobs_in_retry_queue = []
|
36
|
+
scheduled_jobs = jobs_in_retry_queue = []
|
33
37
|
|
34
38
|
expect(Sidekiq::QueueMetrics::Storage).to receive(:get_stats).and_return(stats.to_json)
|
35
39
|
expect(Sidekiq::RetrySet).to receive(:new).and_return(jobs_in_retry_queue)
|
40
|
+
expect(Sidekiq::ScheduledSet).to receive(:new).and_return(scheduled_jobs)
|
36
41
|
expect(Sidekiq::Queue).to receive(:new).with('mailer_queue').and_return(OpenStruct.new(size: 0))
|
37
42
|
expect(Sidekiq::Queue).to receive(:new).with('heavy_jobs_queue').and_return(OpenStruct.new(size: 0))
|
38
43
|
|
@@ -42,6 +47,7 @@ describe Sidekiq::QueueMetrics do
|
|
42
47
|
expect(queue_stats['mailer_queue']['failed']).to be_zero
|
43
48
|
expect(queue_stats['mailer_queue']['enqueued']).to be_zero
|
44
49
|
expect(queue_stats['mailer_queue']['in_retry']).to be_zero
|
50
|
+
expect(queue_stats['mailer_queue']['scheduled']).to be_zero
|
45
51
|
end
|
46
52
|
|
47
53
|
it 'should return Sidekiq::QueueMetrics for all sidekiq queues' do
|
@@ -58,11 +64,13 @@ describe Sidekiq::QueueMetrics do
|
|
58
64
|
expect(queue_stats['mailer_queue']['failed']).to be_zero
|
59
65
|
expect(queue_stats['mailer_queue']['enqueued']).to be_zero
|
60
66
|
expect(queue_stats['mailer_queue']['in_retry']).to be_zero
|
67
|
+
expect(queue_stats['mailer_queue']['scheduled']).to be_zero
|
61
68
|
|
62
69
|
expect(queue_stats['heavy_jobs_queue']['processed']).to be_zero
|
63
70
|
expect(queue_stats['heavy_jobs_queue']['failed']).to be_zero
|
64
71
|
expect(queue_stats['heavy_jobs_queue']['enqueued']).to be_zero
|
65
72
|
expect(queue_stats['heavy_jobs_queue']['in_retry']).to be_zero
|
73
|
+
expect(queue_stats['heavy_jobs_queue']['scheduled']).to be_zero
|
66
74
|
end
|
67
75
|
end
|
68
76
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq_queue_metrics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: '1.0'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ajit Singh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|