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: daf0f1ea2f12028ed178c494e10dfd964b698694fe7130eaac119f3bfa3a6d67
4
- data.tar.gz: e5c478e522f27ac57cccbdb96de47def08eeada6ed8fff075503bf7965e79014
3
+ metadata.gz: 616f7d90c5c36572b23161d8fcc09fdac5e05aa3fc4a4770445ecadd916854fa
4
+ data.tar.gz: e7ef6953e73d4c64a7bab64a3d6302be8f9aebd51152667be1815f76956d1a1c
5
5
  SHA512:
6
- metadata.gz: 4dd1d9e899a40948311352572bdb055a868f16ccecf17351156b1bc1a8dbf13364f4f70c770871d86d199735310bfc52fbddd2ccd00bbbe052c48c8bc9c6991b
7
- data.tar.gz: b0986216491cfd4cbaf3e2e5669bc23386550ee354418579301eeef178999c25427d2719e7d647fd9b1d551ea2a833e80bc0c891b3e8ea386abdf1d8d1c3677c
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,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module QueueMetrics
3
- VERSION = '0.0.4'
3
+ VERSION = '1.0'
4
4
  end
5
5
  end
@@ -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: 150px">Count</th>
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 |q, count| %>
45
+ <% metrics.each do |metric_name, count| %>
16
46
  <tr>
17
- <td><%= q %></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: 0.0.4
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-07-23 00:00:00.000000000 Z
11
+ date: 2018-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq