sidekiq_queue_metrics 0.0.4 → 1.0

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 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